From 563bde6fcd9b2f54ae6ca618cad1d3180ba9e4e4 Mon Sep 17 00:00:00 2001
From: Sam <54530346+asylumexp@users.noreply.github.com>
Date: Tue, 31 Dec 2024 14:51:09 +1000
Subject: [PATCH] Replace existing repo with upstream
---
.github/CODE_OF_CONDUCT.md | 132 -
.github/CONTRIBUTING.md | 14 -
.github/FUNDING.yml | 1 -
.github/ISSUE_TEMPLATE/bug_report.yaml | 65 -
.github/ISSUE_TEMPLATE/config.yml | 5 -
.github/pull.yml | 9 -
CHANGELOG.md | 730 +-
CODE-AUDIT.md | 16 +-
LICENSE | 2 +-
SECURITY.md | 23 +
USER_SUBMITTED_GUIDES.md | 2 +-
ct/2fauth.sh | 90 +
ct/actualbudget.sh | 89 +-
ct/adguard.sh | 97 +-
ct/adventurelog.sh | 146 +-
ct/agentdvr.sh | 72 +-
ct/alpine-docker.sh | 54 +-
ct/alpine-grafana.sh | 56 +-
ct/alpine-nextcloud.sh | 55 +-
ct/alpine-vaultwarden.sh | 58 +-
ct/alpine-zigbee2mqtt.sh | 54 +-
ct/alpine.sh | 72 +-
ct/apache-cassandra.sh | 71 +-
ct/apache-couchdb.sh | 74 +-
ct/apache-guacamole.sh | 47 +
ct/apt-cacher-ng.sh | 79 +-
ct/archivebox.sh | 98 +-
ct/aria2.sh | 79 +-
ct/audiobookshelf.sh | 72 +-
ct/authentik.sh | 85 +
ct/autobrr.sh | 96 +-
ct/bazarr.sh | 73 +-
ct/blocky.sh | 73 +-
ct/bookstack.sh | 82 +
ct/bunkerweb.sh | 70 +-
ct/caddy.sh | 76 +-
ct/calibre-web.sh | 159 +-
ct/casaos.sh | 78 +-
ct/changedetection.sh | 127 +-
ct/channels.sh | 72 +-
ct/checkmk.sh | 59 +
ct/cloudflared.sh | 74 +-
ct/cockpit.sh | 182 +-
ct/commafeed.sh | 108 +-
ct/create_lxc.sh | 118 +-
ct/cronicle.sh | 180 +-
ct/daemonsync.sh | 104 +-
ct/dashy.sh | 144 +-
ct/debian.sh | 74 +-
ct/deconz.sh | 78 +-
ct/deluge.sh | 79 +-
ct/docker.sh | 74 +-
ct/dockge.sh | 80 +-
ct/emby.sh | 96 +-
ct/emqx.sh | 78 +-
ct/ersatztv.sh | 109 +-
ct/esphome.sh | 96 +-
ct/evcc.sh | 77 +-
ct/fenrus.sh | 123 +-
ct/fhem.sh | 80 +-
ct/flaresolverr.sh | 93 +-
ct/flowiseai.sh | 83 +-
ct/forgejo.sh | 107 +-
ct/frigate.sh | 80 +-
ct/gitea.sh | 91 +-
ct/glance.sh | 72 +
ct/go2rtc.sh | 87 +-
ct/gokapi.sh | 72 +-
ct/gotify.sh | 110 +-
ct/grafana.sh | 78 +-
ct/grist.sh | 78 +
ct/grocy.sh | 98 +-
ct/headscale.sh | 103 +-
ct/heimdall-dashboard.sh | 153 +-
ct/hivemq.sh | 68 +-
ct/hoarder.sh | 82 +
ct/homarr.sh | 124 +-
ct/homeassistant-core.sh | 67 +-
ct/homeassistant.sh | 69 +-
ct/homebox.sh | 117 +-
ct/homebridge.sh | 78 +-
ct/homepage.sh | 124 +-
ct/homer.sh | 120 +-
ct/hyperhdr.sh | 79 +-
ct/hyperion.sh | 79 +-
ct/influxdb.sh | 76 +-
ct/inspircd.sh | 69 +
ct/iobroker.sh | 78 +-
ct/iventoy.sh | 69 +-
ct/jackett.sh | 98 +-
ct/jellyfin.sh | 80 +-
ct/jellyseerr.sh | 133 +-
ct/jenkins.sh | 50 +
ct/kavita.sh | 88 +-
ct/keycloak.sh | 115 +-
ct/kimai.sh | 80 +
ct/komga.sh | 66 +
ct/kubo.sh | 99 +-
ct/lazylibrarian.sh | 93 +-
ct/lidarr.sh | 78 +-
ct/linkwarden.sh | 125 +-
ct/listmonk.sh | 77 +
ct/lldap.sh | 110 +-
ct/lubelogger.sh | 74 +
ct/mafl.sh | 72 +-
ct/magicmirror.sh | 81 +-
ct/mariadb.sh | 76 +-
ct/matterbridge.sh | 74 +-
ct/mediamtx.sh | 69 +-
ct/medusa.sh | 92 +-
ct/memos.sh | 109 +-
ct/meshcentral.sh | 78 +-
ct/metube.sh | 128 +-
ct/mongodb.sh | 78 +-
ct/motioneye.sh | 76 +-
ct/mqtt.sh | 76 +-
ct/mylar3.sh | 54 +
ct/myspeed.sh | 127 +-
ct/mysql.sh | 107 +-
ct/n8n.sh | 79 +-
ct/navidrome.sh | 98 +-
ct/neo4j.sh | 81 +-
ct/netbox.sh | 90 +
ct/nextcloudpi.sh | 78 +-
ct/nextpvr.sh | 69 +
ct/nginxproxymanager.sh | 62 +-
ct/nocodb.sh | 86 +-
ct/node-red.sh | 190 +-
ct/notifiarr.sh | 78 +-
ct/ntfy.sh | 79 +-
ct/nzbget.sh | 81 +-
ct/octoprint.sh | 92 +-
ct/ollama.sh | 80 +-
ct/omada.sh | 92 +-
ct/ombi.sh | 106 +-
ct/omv.sh | 80 +-
ct/onedev.sh | 72 +
ct/openhab.sh | 79 +-
ct/openobserve.sh | 84 +-
ct/openwebui.sh | 103 +-
ct/overseerr.sh | 97 +-
ct/owncast.sh | 79 +-
ct/pairdrop.sh | 84 +-
ct/paperless-ngx.sh | 66 +-
ct/part-db.sh | 85 +
ct/pbs.sh | 60 +-
ct/peanut.sh | 73 +-
ct/petio.sh | 81 +-
ct/photoprism.sh | 66 +-
ct/pialert.sh | 74 +-
ct/pihole.sh | 78 +-
ct/pingvin.sh | 106 +-
ct/plex.sh | 101 +-
ct/pocketbase.sh | 78 +-
ct/podman-homeassistant.sh | 67 +-
ct/podman.sh | 74 +-
ct/postgresql.sh | 76 +-
ct/prometheus.sh | 114 +-
ct/prowlarr.sh | 72 +-
ct/proxmox-datacenter-manager.sh | 46 +
ct/qbittorrent.sh | 79 +-
ct/rabbitmq.sh | 101 +-
ct/radarr.sh | 72 +-
ct/rdtclient.sh | 104 +-
ct/readarr.sh | 78 +-
ct/readeck.sh | 88 +-
ct/recyclarr.sh | 53 +
ct/redis.sh | 71 +-
ct/rockylinux.sh | 70 -
ct/rtsptoweb.sh | 78 +-
ct/runtipi.sh | 72 +-
ct/sabnzbd.sh | 102 +-
ct/scrypted.sh | 72 -
ct/sftpgo.sh | 78 +-
ct/shinobi.sh | 84 +-
ct/silverbullet.sh | 61 +
ct/smokeping.sh | 79 +-
ct/snipeit.sh | 75 +
ct/sonarr.sh | 88 +-
ct/spoolman.sh | 128 +-
ct/stirling-pdf.sh | 104 +-
ct/syncthing.sh | 79 +-
ct/tandoor.sh | 74 +-
ct/tasmoadmin.sh | 78 +-
ct/tautulli.sh | 78 +-
ct/tdarr.sh | 78 +-
ct/technitiumdns.sh | 86 +-
ct/teddycloud.sh | 70 +
ct/the-lounge.sh | 69 +
ct/threadfin.sh | 82 +-
ct/tianji.sh | 159 +-
ct/traccar.sh | 74 +-
ct/traefik.sh | 95 +-
ct/transmission.sh | 78 +-
ct/trilium.sh | 138 +-
ct/ubuntu.sh | 74 +-
ct/umami.sh | 105 +-
ct/umbrel.sh | 75 +-
ct/unbound.sh | 49 +
ct/unifi.sh | 86 +-
ct/unmanic.sh | 78 +-
ct/uptimekuma.sh | 105 +-
ct/vaultwarden.sh | 73 +-
ct/vikunja.sh | 70 +
ct/wallos.sh | 132 +-
ct/wastebin.sh | 117 +-
ct/watchyourlan.sh | 92 +-
ct/wavelog.sh | 87 +
ct/whisparr.sh | 79 +-
ct/whoogle.sh | 78 +-
ct/wikijs.sh | 115 +-
ct/wireguard.sh | 79 +-
ct/yunohost.sh | 80 +-
ct/zabbix.sh | 101 +-
ct/zammad.sh | 56 +
ct/zigbee2mqtt.sh | 60 +-
ct/zipline.sh | 131 +-
ct/zoraxy.sh | 98 +-
ct/zwave-js-ui.sh | 109 +-
frontend/.eslintrc.json | 5 +
frontend/.gitignore | 39 +
frontend/.prettierignore | 5 +
frontend/.prettierrc | 3 +
frontend/LICENSE | 21 +
frontend/components.json | 17 +
frontend/next.config.mjs | 25 +
frontend/package-lock.json | 10101 ++++++++++++++++
frontend/package.json | 88 +
frontend/postcss.config.mjs | 8 +
frontend/public/defaultimg.png | Bin 0 -> 77312 bytes
frontend/public/json | 1 +
frontend/public/logo.png | Bin 0 -> 64142 bytes
frontend/src/__tests__/app/page.test.tsx | 11 +
.../__tests__/public/validate-json.test.ts | 53 +
frontend/src/__tests__/setupTests.ts | 4 +
frontend/src/app/api/categories/route.ts | 56 +
frontend/src/app/favicon.ico | Bin 0 -> 1841 bytes
.../json-editor/_components/Categories.tsx | 117 +
.../json-editor/_components/InstallMethod.tsx | 240 +
.../src/app/json-editor/_components/Note.tsx | 130 +
.../src/app/json-editor/_schemas/schemas.ts | 45 +
frontend/src/app/json-editor/page.tsx | 335 +
frontend/src/app/layout.tsx | 94 +
frontend/src/app/manifest.ts | 28 +
frontend/src/app/not-found.tsx | 20 +
frontend/src/app/page.tsx | 146 +
frontend/src/app/robots.ts | 14 +
.../scripts/_components/ScriptAccordion.tsx | 132 +
.../scripts/_components/ScriptInfoBlocks.tsx | 213 +
.../app/scripts/_components/ScriptItem.tsx | 100 +
.../_components/ScriptItems/Alerts.tsx | 35 +
.../_components/ScriptItems/Buttons.tsx | 57 +
.../ScriptItems/DefaultPassword.tsx | 42 +
.../ScriptItems/DefaultSettings.tsx | 51 +
.../_components/ScriptItems/Description.tsx | 13 +
.../ScriptItems/InstallCommand.tsx | 85 +
.../_components/ScriptItems/InterFaces.tsx | 41 +
.../_components/ScriptItems/Tooltips.tsx | 52 +
.../src/app/scripts/_components/Sidebar.tsx | 35 +
frontend/src/app/scripts/page.tsx | 79 +
frontend/src/app/sitemap.ts | 23 +
frontend/src/components/CommandMenu.tsx | 128 +
frontend/src/components/Footer.tsx | 24 +
frontend/src/components/Navbar.tsx | 88 +
frontend/src/components/TextCopyBlock.tsx | 28 +
frontend/src/components/handleCopy.tsx | 10 +
frontend/src/components/theme-provider.tsx | 8 +
frontend/src/components/ui/accordion.tsx | 57 +
frontend/src/components/ui/alert.tsx | 59 +
.../components/ui/animated-gradient-text.tsx | 26 +
frontend/src/components/ui/badge.tsx | 39 +
frontend/src/components/ui/button.tsx | 108 +
frontend/src/components/ui/calendar.tsx | 66 +
frontend/src/components/ui/card.tsx | 89 +
.../src/components/ui/code-copy-button.tsx | 66 +
frontend/src/components/ui/codeblock.tsx | 138 +
frontend/src/components/ui/command.tsx | 155 +
frontend/src/components/ui/dialog.tsx | 122 +
frontend/src/components/ui/dropdown-menu.tsx | 200 +
frontend/src/components/ui/input.tsx | 25 +
frontend/src/components/ui/label.tsx | 26 +
.../src/components/ui/navigation-menu.tsx | 128 +
frontend/src/components/ui/number-ticker.tsx | 61 +
frontend/src/components/ui/particles.tsx | 283 +
frontend/src/components/ui/popover.tsx | 31 +
frontend/src/components/ui/select.tsx | 160 +
frontend/src/components/ui/separator.tsx | 31 +
frontend/src/components/ui/sheet.tsx | 140 +
frontend/src/components/ui/sonner.tsx | 31 +
.../components/ui/star-on-github-button.tsx | 57 +
frontend/src/components/ui/switch.tsx | 29 +
frontend/src/components/ui/tabs.tsx | 55 +
frontend/src/components/ui/textarea.tsx | 22 +
frontend/src/components/ui/theme-toggle.tsx | 47 +
frontend/src/components/ui/tooltip.tsx | 30 +
frontend/src/config/siteConfig.tsx | 65 +
frontend/src/lib/data.ts | 10 +
frontend/src/lib/time.ts | 7 +
frontend/src/lib/types.ts | 58 +
frontend/src/lib/utils.ts | 6 +
frontend/src/styles/globals.css | 95 +
frontend/tailwind.config.ts | 180 +
frontend/tsconfig.json | 33 +
frontend/vitest.config.mjs | 11 +
install/2fauth-install.sh | 123 +
install/actualbudget-install.sh | 15 +-
install/adguard-install.sh | 5 +-
install/adventurelog-install.sh | 2 +-
install/agentdvr-install.sh | 10 +-
install/alpine-docker-install.sh | 5 +-
install/alpine-grafana-install.sh | 3 +-
install/alpine-install.sh | 3 +-
install/alpine-nextcloud-install.sh | 50 +-
install/alpine-vaultwarden-install.sh | 7 +-
install/alpine-zigbee2mqtt-install.sh | 3 +-
install/apache-cassandra-install.sh | 6 +-
install/apache-couchdb-install.sh | 4 +-
install/apache-guacamole-install.sh | 140 +
install/apt-cacher-ng-install.sh | 3 +-
install/archivebox-install.sh | 7 +-
install/aria2-install.sh | 9 +-
install/audiobookshelf-install.sh | 61 +-
install/authentik-install.sh | 195 +
install/autobrr-install.sh | 6 +-
install/bazarr-install.sh | 4 +-
install/blocky-install.sh | 6 +-
install/bookstack-install.sh | 120 +
install/bunkerweb-install.sh | 4 +-
install/caddy-install.sh | 4 +-
install/calibre-web-install.sh | 4 +-
install/casaos-install.sh | 4 +-
install/changedetection-install.sh | 7 +-
install/channels-install.sh | 7 +-
install/checkmk-install.sh | 48 +
install/cloudflared-install.sh | 39 +-
install/cockpit-install.sh | 4 +-
install/commafeed-install.sh | 4 +-
install/cronicle-install.sh | 4 +-
install/daemonsync-install.sh | 9 +-
install/dashy-install.sh | 4 +-
install/debian-install.sh | 4 +-
install/deconz-install.sh | 13 +-
install/deluge-install.sh | 3 +-
install/docker-install.sh | 12 +-
install/dockge-install.sh | 6 +-
install/emby-install.sh | 12 +-
install/emqx-install.sh | 4 +-
install/ersatztv-install.sh | 9 +-
install/esphome-install.sh | 4 +-
install/evcc-install.sh | 6 +-
install/fenrus-install.sh | 19 +-
install/fhem-install.sh | 3 +-
install/flaresolverr-install.sh | 37 +-
install/flowiseai-install.sh | 4 +-
install/forgejo-install.sh | 10 +-
install/frigate-install.sh | 12 +-
install/gitea-install.sh | 6 +-
install/glance-install.sh | 81 +
install/go2rtc-install.sh | 10 +-
install/gokapi-install.sh | 14 +-
install/gotify-install.sh | 14 +-
install/grafana-install.sh | 4 +-
install/grist-install.sh | 83 +
install/grocy-install.sh | 4 +-
install/headscale-install.sh | 10 +-
install/heimdall-dashboard-install.sh | 4 +-
install/hivemq-install.sh | 6 +-
install/hoarder-install.sh | 181 +
install/homarr-install.sh | 15 +-
install/homeassistant-core-install.sh | 4 +-
install/homeassistant-install.sh | 4 +-
install/homebox-install.sh | 15 +-
install/homebridge-install.sh | 4 +-
install/homepage-install.sh | 12 +-
install/homer-install.sh | 4 +-
install/hyperhdr-install.sh | 4 +-
install/hyperion-install.sh | 5 +-
install/influxdb-install.sh | 8 +-
install/inspircd-install.sh | 54 +
install/iobroker-install.sh | 4 +-
install/iventoy-install.sh | 4 +-
install/jackett-install.sh | 10 +-
install/jellyfin-install.sh | 8 +-
install/jellyseerr-install.sh | 4 +-
install/jenkins-install.sh | 36 +
install/kavita-install.sh | 5 +-
install/keycloak-install.sh | 4 +-
install/kimai-install.sh | 107 +
install/komga-install.sh | 58 +
install/kubo-install.sh | 15 +-
install/lazylibrarian-install.sh | 5 +-
install/lidarr-install.sh | 6 +-
install/linkwarden-install.sh | 63 +-
install/listmonk-install.sh | 80 +
install/lldap-install.sh | 4 +-
install/lubelogger-install.sh | 72 +
install/mafl-install.sh | 4 +-
install/magicmirror-install.sh | 4 +-
install/mariadb-install.sh | 4 +-
install/matterbridge-install.sh | 7 +-
install/mediamtx-install.sh | 10 +-
install/medusa-install.sh | 19 +-
install/memos-install.sh | 2 +-
install/meshcentral-install.sh | 4 +-
install/metube-install.sh | 10 +-
install/mongodb-install.sh | 28 +-
install/motioneye-install.sh | 4 +-
install/mqtt-install.sh | 9 +-
install/mylar3-install.sh | 68 +
install/myspeed-install.sh | 7 +-
install/mysql-install.sh | 18 +-
install/n8n-install.sh | 4 +-
install/navidrome-install.sh | 10 +-
install/neo4j-install.sh | 4 +-
install/netbox-install.sh | 119 +
install/nextcloudpi-install.sh | 14 +-
install/nextpvr-install.sh | 46 +
install/nginxproxymanager-install.sh | 11 +-
install/nocodb-install.sh | 6 +-
install/node-red-install.sh | 4 +-
install/notifiarr-install.sh | 4 +-
install/ntfy-install.sh | 6 +-
install/nzbget-install.sh | 2 +-
install/octoprint-install.sh | 4 +-
install/ollama-install.sh | 2 +-
install/omada-install.sh | 32 +-
install/ombi-install.sh | 10 +-
install/omv-install.sh | 4 +-
install/onedev-install.sh | 44 +
install/openhab-install.sh | 4 +-
install/openobserve-install.sh | 6 +-
install/openwebui-install.sh | 2 +-
install/overseerr-install.sh | 4 +-
install/owncast-install.sh | 6 +-
install/pairdrop-install.sh | 4 +-
install/paperless-ngx-install.sh | 7 +-
install/part-db-install.sh | 112 +
install/pbs-install.sh | 16 +-
install/peanut-install.sh | 5 +-
install/petio-install.sh | 4 +-
install/photoprism-install.sh | 14 +-
install/pialert-install.sh | 11 +-
install/pihole-install.sh | 36 +-
install/pingvin-install.sh | 4 +-
install/plex-install.sh | 6 +-
install/pocketbase-install.sh | 9 +-
install/podman-homeassistant-install.sh | 4 +-
install/podman-install.sh | 4 +-
install/postgresql-install.sh | 6 +-
install/prometheus-install.sh | 12 +-
install/prowlarr-install.sh | 6 +-
install/proxmox-datacenter-manager-install.sh | 39 +
install/qbittorrent-install.sh | 6 +-
install/rabbitmq-install.sh | 16 +-
install/radarr-install.sh | 6 +-
install/rdtclient-install.sh | 30 +-
install/readarr-install.sh | 6 +-
install/readeck-install.sh | 6 +-
install/recyclarr-install.sh | 37 +
install/redis-install.sh | 4 +-
install/rtsptoweb-install.sh | 10 +-
install/runtipi-install.sh | 4 +-
install/sabnzbd-install.sh | 5 +-
install/scrypted-install.sh | 138 -
install/sftpgo-install.sh | 11 +-
install/shinobi-install.sh | 4 +-
install/silverbullet-install.sh | 59 +
install/smokeping-install.sh | 4 +-
install/snipeit-install.sh | 108 +
install/sonarr-install.sh | 6 +-
install/spoolman-install.sh | 13 +-
install/stirling-pdf-install.sh | 8 +-
install/syncthing-install.sh | 4 +-
install/tandoor-install.sh | 6 +-
install/tasmoadmin-install.sh | 4 +-
install/tautulli-install.sh | 4 +-
install/tdarr-install.sh | 8 +-
install/technitiumdns-install.sh | 15 +-
install/teddycloud-install.sh | 62 +
install/the-lounge-install.sh | 51 +
install/threadfin-install.sh | 6 +-
install/tianji-install.sh | 6 +-
install/traccar-install.sh | 10 +-
install/traefik-install.sh | 6 +-
install/transmission-install.sh | 4 +-
install/trilium-install.sh | 3 +-
install/ubuntu-install.sh | 4 +-
install/umami-install.sh | 6 +-
install/umbrel-install.sh | 4 +-
install/unbound-install.sh | 94 +
install/unifi-install.sh | 31 +-
install/unmanic-install.sh | 8 +-
install/uptimekuma-install.sh | 4 +-
install/vaultwarden-install.sh | 6 +-
install/vikunja-install.sh | 43 +
install/wallos-install.sh | 5 +-
install/wastebin-install.sh | 42 +-
install/watchyourlan-install.sh | 10 +-
install/wavelog-install.sh | 88 +
install/whisparr-install.sh | 6 +-
install/whoogle-install.sh | 4 +-
install/wikijs-install.sh | 4 +-
install/wireguard-install.sh | 17 +-
install/yunohost-install.sh | 4 +-
install/zabbix-install.sh | 27 +-
install/zammad-install.sh | 61 +
install/zigbee2mqtt-install.sh | 16 +-
install/zipline-install.sh | 6 +-
install/zoraxy-install.sh | 8 +-
install/zwave-js-ui-install.sh | 38 +-
json/2fauth.json | 43 +
json/actualbudget.json | 34 +
json/add-lxc-iptag.json | 47 +
json/add-netbird-lxc.json | 47 +
json/add-tailscale-lxc.json | 43 +
json/adguard.json | 39 +
json/adventurelog.json | 39 +
json/agentdvr.json | 34 +
json/all-templates.json | 39 +
json/alpine.json | 39 +
json/apache-cassandra.json | 39 +
json/apache-couchdb.json | 39 +
json/apache-guacamole.json | 34 +
json/apt-cacher-ng.json | 34 +
json/archivebox.json | 34 +
json/aria2.json | 39 +
json/audiobookshelf.json | 34 +
json/authentik.json | 39 +
json/autobrr.json | 34 +
json/bazarr.json | 34 +
json/blocky.json | 39 +
json/bookstack.json | 39 +
json/bunkerweb.json | 34 +
json/caddy.json | 34 +
json/calibre-web.json | 39 +
json/casaos.json | 39 +
json/changedetection.json | 34 +
json/channels.json | 34 +
json/checkmk.json | 39 +
json/clean-lxcs.json | 39 +
json/cloudflared.json | 39 +
json/cockpit.json | 39 +
json/code-server.json | 39 +
json/commafeed.json | 34 +
json/cron-update-lxcs.json | 44 +
json/cronicle.json | 39 +
json/crowdsec.json | 39 +
json/daemonsync.json | 34 +
json/dashy.json | 34 +
json/debian-vm.json | 34 +
json/debian.json | 34 +
json/deconz.json | 34 +
json/deluge.json | 34 +
json/docker.json | 58 +
json/dockge.json | 43 +
json/emby.json | 39 +
json/emqx.json | 39 +
json/ersatztv.json | 34 +
json/esphome.json | 34 +
json/evcc.json | 39 +
json/fenrus.json | 34 +
json/fhem.json | 39 +
json/filebrowser.json | 39 +
json/flaresolverr.json | 34 +
json/flowiseai.json | 34 +
json/forgejo.json | 34 +
json/frigate.json | 43 +
json/fstrim.json | 43 +
json/gitea.json | 34 +
json/glance.json | 39 +
json/glances.json | 39 +
json/go2rtc.json | 34 +
json/gokapi.json | 34 +
json/gotify.json | 34 +
json/grafana.json | 45 +
json/grist.json | 34 +
json/grocy.json | 34 +
json/haos-vm.json | 43 +
json/headscale.json | 39 +
json/heimdall-dashboard.json | 34 +
json/hivemq.json | 39 +
json/hoarder.json | 34 +
json/homarr.json | 34 +
json/homeassistant-core.json | 51 +
json/homeassistant.json | 47 +
json/homebox.json | 39 +
json/homebridge.json | 34 +
json/homepage.json | 39 +
json/homer.json | 39 +
json/host-backup.json | 43 +
json/hyperhdr.json | 34 +
json/hyperion.json | 34 +
json/influxdb.json | 34 +
json/inspircd.json | 34 +
json/iobroker.json | 34 +
json/iventoy.json | 39 +
json/jackett.json | 34 +
json/jellyfin.json | 43 +
json/jellyseerr.json | 34 +
json/jenkins.json | 34 +
json/kavita.json | 34 +
json/kernel-clean.json | 39 +
json/kernel-pin.json | 39 +
json/keycloak.json | 43 +
json/kimai.json | 34 +
json/komga.json | 39 +
json/kubo.json | 34 +
json/lazylibrarian.json | 34 +
json/lidarr.json | 34 +
json/linkwarden.json | 39 +
json/listmonk.json | 34 +
json/lldap.json | 34 +
json/lubelogger.json | 34 +
json/mafl.json | 39 +
json/magicmirror.json | 39 +
json/mariadb.json | 39 +
json/matterbridge.json | 39 +
json/mediamtx.json | 34 +
json/medusa.json | 34 +
json/memos.json | 34 +
json/meshcentral.json | 34 +
json/metadata.json | 25 +
json/metube.json | 34 +
json/microcode.json | 43 +
json/mikrotik-routeros.json | 34 +
json/mongodb.json | 34 +
json/monitor-all.json | 67 +
json/motioneye.json | 34 +
json/mqtt.json | 39 +
json/mylar3.json | 34 +
json/myspeed.json | 34 +
json/mysql.json | 43 +
json/n8n.json | 34 +
json/navidrome.json | 39 +
json/neo4j.json | 34 +
json/netbox.json | 39 +
json/netdata.json | 39 +
json/nextcloud-vm.json | 39 +
json/nextcloudpi.json | 45 +
json/nextpvr.json | 34 +
json/nginxproxymanager.json | 39 +
json/nocodb.json | 34 +
json/node-red.json | 39 +
json/notifiarr.json | 39 +
json/ntfy.json | 34 +
json/nzbget.json | 34 +
json/octoprint.json | 34 +
json/olivetin.json | 39 +
json/omada.json | 34 +
json/ombi.json | 34 +
json/omv.json | 39 +
json/onedev.json | 34 +
json/openhab.json | 34 +
json/openobserve.json | 39 +
json/openwebui.json | 34 +
json/openwrt.json | 34 +
json/overseerr.json | 34 +
json/owncast.json | 34 +
json/owncloud-vm.json | 39 +
json/pairdrop.json | 34 +
json/paperless-ngx.json | 39 +
json/part-db.json | 39 +
json/pbs.json | 39 +
json/peanut.json | 34 +
json/petio.json | 34 +
json/photoprism.json | 39 +
json/pialert.json | 34 +
json/pihole.json | 47 +
json/pimox-haos-vm.json | 39 +
json/pingvin.json | 34 +
json/plex.json | 39 +
json/pocketbase.json | 34 +
json/podman-homeassistant.json | 47 +
json/podman.json | 39 +
json/post-pbs-install.json | 47 +
json/post-pve-install.json | 43 +
json/postgresql.json | 34 +
json/prometheus.json | 34 +
json/prowlarr.json | 34 +
json/proxmox-datacenter-manager.json | 43 +
json/qbittorrent.json | 34 +
json/rabbitmq.json | 34 +
json/radarr.json | 34 +
json/rdtclient.json | 34 +
json/readarr.json | 34 +
json/readeck.json | 34 +
json/recyclarr.json | 34 +
json/redis.json | 39 +
json/rtsptoweb.json | 34 +
json/runtipi.json | 34 +
json/sabnzbd.json | 34 +
json/scaling-governor.json | 39 +
json/sftpgo.json | 34 +
json/shinobi.json | 34 +
json/silverbullet.json | 34 +
json/smokeping.json | 34 +
json/snipeit.json | 39 +
json/sonarr.json | 34 +
json/spoolman.json | 34 +
json/stirling-pdf.json | 34 +
json/syncthing.json | 34 +
json/tandoor.json | 34 +
json/tasmoadmin.json | 34 +
json/tautulli.json | 34 +
json/tdarr.json | 39 +
json/technitiumdns.json | 34 +
json/teddycloud.json | 39 +
json/the-lounge.json | 39 +
json/threadfin.json | 34 +
json/tianji.json | 34 +
json/traccar.json | 34 +
json/traefik.json | 34 +
json/transmission.json | 34 +
json/trilium.json | 34 +
json/turnkey.json | 43 +
json/ubuntu.json | 34 +
json/ubuntu2204-vm.json | 34 +
json/ubuntu2404-vm.json | 34 +
json/umami.json | 39 +
json/unbound.json | 39 +
json/unifi.json | 39 +
json/unmanic.json | 34 +
json/update-lxcs.json | 39 +
json/update-repo.json | 39 +
json/uptimekuma.json | 34 +
json/vaultwarden.json | 54 +
json/vikunja.json | 34 +
json/wallos.json | 34 +
json/wastebin.json | 34 +
json/watchyourlan.json | 34 +
json/wavelog.json | 39 +
json/webmin.json | 39 +
json/whisparr.json | 34 +
json/whoogle.json | 34 +
json/wikijs.json | 34 +
json/wireguard.json | 39 +
json/yunohost.json | 34 +
json/zabbix.json | 43 +
json/zammad.json | 34 +
json/zigbee2mqtt.json | 50 +
json/zipline.json | 34 +
json/zoraxy.json | 34 +
json/zwave-js-ui.json | 34 +
misc/add-lxc-iptag.sh | 357 +
misc/add-netbird-lxc.sh | 29 +-
misc/add-tailscale-lxc.sh | 2 +-
misc/all-templates.sh | 2 +-
misc/alpine-install.func | 88 +-
misc/build.func | 496 +-
misc/clean-lxcs.sh | 4 +-
misc/clean.sh | 2 +-
misc/code-server.sh | 11 +-
misc/container-restore-from-backup.sh | 2 +-
misc/copy-data/README.md | 18 +-
...iner-copy-data-home-assistant-container.sh | 4 +-
...container-copy-data-home-assistant-core.sh | 4 +-
...ntainer-copy-data-podman-home-assistant.sh | 4 +-
...core-copy-data-home-assistant-container.sh | 4 +-
...tant-core-copy-data-home-assistant-core.sh | 4 +-
misc/copy-data/plex-copy-data-plex.sh | 4 +-
...tant-copy-data-home-assistant-container.sh | 4 +-
misc/copy-data/z2m-copy-data-z2m.sh | 4 +-
.../zwavejs2mqtt-copy-data-zwavejsui.sh | 4 +-
misc/core-restore-from-backup.sh | 2 +-
misc/cron-update-lxcs.sh | 8 +-
misc/crowdsec.sh | 2 +-
misc/figlet.tar.xz | Bin 0 -> 168152 bytes
misc/filebrowser.sh | 4 +-
misc/frigate-support.sh | 4 +-
misc/fstrim.sh | 2 +-
misc/glances.sh | 2 +-
misc/homarr.env | 14 -
misc/host-backup.sh | 2 +-
misc/hw-acceleration.sh | 4 +-
misc/images/2025approved.png | Bin 0 -> 414809 bytes
misc/images/logo-81x112.png | Bin 14623 -> 5483 bytes
misc/images/logo.png | Bin 75264 -> 64142 bytes
misc/install.func | 109 +-
misc/kernel-clean.sh | 79 +-
misc/kernel-pin.sh | 2 +-
misc/microcode.sh | 2 +-
misc/monitor-all.sh | 2 +-
misc/netdata.sh | 2 +-
misc/olivetin.sh | 8 +-
misc/pbs3-upgrade.sh | 2 +-
misc/post-pbs-install.sh | 2 +-
misc/post-pve-install.sh | 53 +-
misc/pve8-upgrade.sh | 2 +-
misc/pyenv.sh | 4 +-
misc/scaling-governor.sh | 2 +-
misc/update-lxcs-cron.sh | 2 +-
misc/update-lxcs.sh | 2 +-
misc/update-repo.sh | 65 +
misc/usb-passthrough.sh | 2 +-
misc/webmin.sh | 2 +-
status.json | 702 --
turnkey/turnkey.sh | 2 +-
vm/debian-vm.sh | 58 +-
vm/haos-vm.sh | 6 +-
vm/mikrotik-routeros.sh | 13 +-
vm/nextcloud-vm.sh | 16 +-
vm/openwrt.sh | 29 +-
vm/owncloud-vm.sh | 36 +-
vm/pimox-haos-vm.sh | 4 +-
vm/ubuntu2204-vm.sh | 18 +-
vm/ubuntu2404-vm.sh | 18 +-
806 files changed, 37357 insertions(+), 12549 deletions(-)
delete mode 100644 .github/CODE_OF_CONDUCT.md
delete mode 100644 .github/CONTRIBUTING.md
delete mode 100644 .github/FUNDING.yml
delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.yaml
delete mode 100644 .github/ISSUE_TEMPLATE/config.yml
delete mode 100644 .github/pull.yml
create mode 100644 SECURITY.md
create mode 100644 ct/2fauth.sh
create mode 100644 ct/apache-guacamole.sh
create mode 100644 ct/authentik.sh
create mode 100644 ct/bookstack.sh
create mode 100644 ct/checkmk.sh
create mode 100644 ct/glance.sh
create mode 100644 ct/grist.sh
create mode 100644 ct/hoarder.sh
create mode 100644 ct/inspircd.sh
create mode 100644 ct/jenkins.sh
create mode 100644 ct/kimai.sh
create mode 100644 ct/komga.sh
create mode 100644 ct/listmonk.sh
create mode 100644 ct/lubelogger.sh
create mode 100644 ct/mylar3.sh
create mode 100644 ct/netbox.sh
create mode 100644 ct/nextpvr.sh
create mode 100644 ct/onedev.sh
create mode 100644 ct/part-db.sh
create mode 100644 ct/proxmox-datacenter-manager.sh
create mode 100644 ct/recyclarr.sh
delete mode 100644 ct/rockylinux.sh
delete mode 100644 ct/scrypted.sh
create mode 100644 ct/silverbullet.sh
create mode 100644 ct/snipeit.sh
create mode 100644 ct/teddycloud.sh
create mode 100644 ct/the-lounge.sh
create mode 100644 ct/unbound.sh
create mode 100644 ct/vikunja.sh
create mode 100644 ct/wavelog.sh
create mode 100644 ct/zammad.sh
create mode 100644 frontend/.eslintrc.json
create mode 100644 frontend/.gitignore
create mode 100644 frontend/.prettierignore
create mode 100644 frontend/.prettierrc
create mode 100644 frontend/LICENSE
create mode 100644 frontend/components.json
create mode 100644 frontend/next.config.mjs
create mode 100644 frontend/package-lock.json
create mode 100644 frontend/package.json
create mode 100644 frontend/postcss.config.mjs
create mode 100644 frontend/public/defaultimg.png
create mode 120000 frontend/public/json
create mode 100644 frontend/public/logo.png
create mode 100644 frontend/src/__tests__/app/page.test.tsx
create mode 100644 frontend/src/__tests__/public/validate-json.test.ts
create mode 100644 frontend/src/__tests__/setupTests.ts
create mode 100644 frontend/src/app/api/categories/route.ts
create mode 100644 frontend/src/app/favicon.ico
create mode 100644 frontend/src/app/json-editor/_components/Categories.tsx
create mode 100644 frontend/src/app/json-editor/_components/InstallMethod.tsx
create mode 100644 frontend/src/app/json-editor/_components/Note.tsx
create mode 100644 frontend/src/app/json-editor/_schemas/schemas.ts
create mode 100644 frontend/src/app/json-editor/page.tsx
create mode 100644 frontend/src/app/layout.tsx
create mode 100644 frontend/src/app/manifest.ts
create mode 100644 frontend/src/app/not-found.tsx
create mode 100644 frontend/src/app/page.tsx
create mode 100644 frontend/src/app/robots.ts
create mode 100644 frontend/src/app/scripts/_components/ScriptAccordion.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptInfoBlocks.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItem.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItems/Alerts.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItems/Buttons.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItems/DefaultPassword.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItems/DefaultSettings.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItems/Description.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItems/InstallCommand.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItems/InterFaces.tsx
create mode 100644 frontend/src/app/scripts/_components/ScriptItems/Tooltips.tsx
create mode 100644 frontend/src/app/scripts/_components/Sidebar.tsx
create mode 100644 frontend/src/app/scripts/page.tsx
create mode 100644 frontend/src/app/sitemap.ts
create mode 100644 frontend/src/components/CommandMenu.tsx
create mode 100644 frontend/src/components/Footer.tsx
create mode 100644 frontend/src/components/Navbar.tsx
create mode 100644 frontend/src/components/TextCopyBlock.tsx
create mode 100644 frontend/src/components/handleCopy.tsx
create mode 100644 frontend/src/components/theme-provider.tsx
create mode 100644 frontend/src/components/ui/accordion.tsx
create mode 100644 frontend/src/components/ui/alert.tsx
create mode 100644 frontend/src/components/ui/animated-gradient-text.tsx
create mode 100644 frontend/src/components/ui/badge.tsx
create mode 100644 frontend/src/components/ui/button.tsx
create mode 100644 frontend/src/components/ui/calendar.tsx
create mode 100644 frontend/src/components/ui/card.tsx
create mode 100644 frontend/src/components/ui/code-copy-button.tsx
create mode 100644 frontend/src/components/ui/codeblock.tsx
create mode 100644 frontend/src/components/ui/command.tsx
create mode 100644 frontend/src/components/ui/dialog.tsx
create mode 100644 frontend/src/components/ui/dropdown-menu.tsx
create mode 100644 frontend/src/components/ui/input.tsx
create mode 100644 frontend/src/components/ui/label.tsx
create mode 100644 frontend/src/components/ui/navigation-menu.tsx
create mode 100644 frontend/src/components/ui/number-ticker.tsx
create mode 100644 frontend/src/components/ui/particles.tsx
create mode 100644 frontend/src/components/ui/popover.tsx
create mode 100644 frontend/src/components/ui/select.tsx
create mode 100644 frontend/src/components/ui/separator.tsx
create mode 100644 frontend/src/components/ui/sheet.tsx
create mode 100644 frontend/src/components/ui/sonner.tsx
create mode 100644 frontend/src/components/ui/star-on-github-button.tsx
create mode 100644 frontend/src/components/ui/switch.tsx
create mode 100644 frontend/src/components/ui/tabs.tsx
create mode 100644 frontend/src/components/ui/textarea.tsx
create mode 100644 frontend/src/components/ui/theme-toggle.tsx
create mode 100644 frontend/src/components/ui/tooltip.tsx
create mode 100644 frontend/src/config/siteConfig.tsx
create mode 100644 frontend/src/lib/data.ts
create mode 100644 frontend/src/lib/time.ts
create mode 100644 frontend/src/lib/types.ts
create mode 100644 frontend/src/lib/utils.ts
create mode 100644 frontend/src/styles/globals.css
create mode 100644 frontend/tailwind.config.ts
create mode 100644 frontend/tsconfig.json
create mode 100644 frontend/vitest.config.mjs
create mode 100644 install/2fauth-install.sh
create mode 100644 install/apache-guacamole-install.sh
create mode 100644 install/authentik-install.sh
create mode 100644 install/bookstack-install.sh
create mode 100644 install/checkmk-install.sh
create mode 100644 install/glance-install.sh
create mode 100644 install/grist-install.sh
create mode 100644 install/hoarder-install.sh
create mode 100644 install/inspircd-install.sh
create mode 100644 install/jenkins-install.sh
create mode 100644 install/kimai-install.sh
create mode 100644 install/komga-install.sh
create mode 100644 install/listmonk-install.sh
create mode 100644 install/lubelogger-install.sh
create mode 100644 install/mylar3-install.sh
create mode 100644 install/netbox-install.sh
create mode 100644 install/nextpvr-install.sh
create mode 100644 install/onedev-install.sh
create mode 100644 install/part-db-install.sh
create mode 100644 install/proxmox-datacenter-manager-install.sh
create mode 100644 install/recyclarr-install.sh
delete mode 100644 install/scrypted-install.sh
create mode 100644 install/silverbullet-install.sh
create mode 100644 install/snipeit-install.sh
create mode 100644 install/teddycloud-install.sh
create mode 100644 install/the-lounge-install.sh
create mode 100644 install/unbound-install.sh
create mode 100644 install/vikunja-install.sh
create mode 100644 install/wavelog-install.sh
create mode 100644 install/zammad-install.sh
create mode 100644 json/2fauth.json
create mode 100644 json/actualbudget.json
create mode 100644 json/add-lxc-iptag.json
create mode 100644 json/add-netbird-lxc.json
create mode 100644 json/add-tailscale-lxc.json
create mode 100644 json/adguard.json
create mode 100644 json/adventurelog.json
create mode 100644 json/agentdvr.json
create mode 100644 json/all-templates.json
create mode 100644 json/alpine.json
create mode 100644 json/apache-cassandra.json
create mode 100644 json/apache-couchdb.json
create mode 100644 json/apache-guacamole.json
create mode 100644 json/apt-cacher-ng.json
create mode 100644 json/archivebox.json
create mode 100644 json/aria2.json
create mode 100644 json/audiobookshelf.json
create mode 100644 json/authentik.json
create mode 100644 json/autobrr.json
create mode 100644 json/bazarr.json
create mode 100644 json/blocky.json
create mode 100644 json/bookstack.json
create mode 100644 json/bunkerweb.json
create mode 100644 json/caddy.json
create mode 100644 json/calibre-web.json
create mode 100644 json/casaos.json
create mode 100644 json/changedetection.json
create mode 100644 json/channels.json
create mode 100644 json/checkmk.json
create mode 100644 json/clean-lxcs.json
create mode 100644 json/cloudflared.json
create mode 100644 json/cockpit.json
create mode 100644 json/code-server.json
create mode 100644 json/commafeed.json
create mode 100644 json/cron-update-lxcs.json
create mode 100644 json/cronicle.json
create mode 100644 json/crowdsec.json
create mode 100644 json/daemonsync.json
create mode 100644 json/dashy.json
create mode 100644 json/debian-vm.json
create mode 100644 json/debian.json
create mode 100644 json/deconz.json
create mode 100644 json/deluge.json
create mode 100644 json/docker.json
create mode 100644 json/dockge.json
create mode 100644 json/emby.json
create mode 100644 json/emqx.json
create mode 100644 json/ersatztv.json
create mode 100644 json/esphome.json
create mode 100644 json/evcc.json
create mode 100644 json/fenrus.json
create mode 100644 json/fhem.json
create mode 100644 json/filebrowser.json
create mode 100644 json/flaresolverr.json
create mode 100644 json/flowiseai.json
create mode 100644 json/forgejo.json
create mode 100644 json/frigate.json
create mode 100644 json/fstrim.json
create mode 100644 json/gitea.json
create mode 100644 json/glance.json
create mode 100644 json/glances.json
create mode 100644 json/go2rtc.json
create mode 100644 json/gokapi.json
create mode 100644 json/gotify.json
create mode 100644 json/grafana.json
create mode 100644 json/grist.json
create mode 100644 json/grocy.json
create mode 100644 json/haos-vm.json
create mode 100644 json/headscale.json
create mode 100644 json/heimdall-dashboard.json
create mode 100644 json/hivemq.json
create mode 100644 json/hoarder.json
create mode 100644 json/homarr.json
create mode 100644 json/homeassistant-core.json
create mode 100644 json/homeassistant.json
create mode 100644 json/homebox.json
create mode 100644 json/homebridge.json
create mode 100644 json/homepage.json
create mode 100644 json/homer.json
create mode 100644 json/host-backup.json
create mode 100644 json/hyperhdr.json
create mode 100644 json/hyperion.json
create mode 100644 json/influxdb.json
create mode 100644 json/inspircd.json
create mode 100644 json/iobroker.json
create mode 100644 json/iventoy.json
create mode 100644 json/jackett.json
create mode 100644 json/jellyfin.json
create mode 100644 json/jellyseerr.json
create mode 100644 json/jenkins.json
create mode 100644 json/kavita.json
create mode 100644 json/kernel-clean.json
create mode 100644 json/kernel-pin.json
create mode 100644 json/keycloak.json
create mode 100644 json/kimai.json
create mode 100644 json/komga.json
create mode 100644 json/kubo.json
create mode 100644 json/lazylibrarian.json
create mode 100644 json/lidarr.json
create mode 100644 json/linkwarden.json
create mode 100644 json/listmonk.json
create mode 100644 json/lldap.json
create mode 100644 json/lubelogger.json
create mode 100644 json/mafl.json
create mode 100644 json/magicmirror.json
create mode 100644 json/mariadb.json
create mode 100644 json/matterbridge.json
create mode 100644 json/mediamtx.json
create mode 100644 json/medusa.json
create mode 100644 json/memos.json
create mode 100644 json/meshcentral.json
create mode 100644 json/metadata.json
create mode 100644 json/metube.json
create mode 100644 json/microcode.json
create mode 100644 json/mikrotik-routeros.json
create mode 100644 json/mongodb.json
create mode 100644 json/monitor-all.json
create mode 100644 json/motioneye.json
create mode 100644 json/mqtt.json
create mode 100644 json/mylar3.json
create mode 100644 json/myspeed.json
create mode 100644 json/mysql.json
create mode 100644 json/n8n.json
create mode 100644 json/navidrome.json
create mode 100644 json/neo4j.json
create mode 100644 json/netbox.json
create mode 100644 json/netdata.json
create mode 100644 json/nextcloud-vm.json
create mode 100644 json/nextcloudpi.json
create mode 100644 json/nextpvr.json
create mode 100644 json/nginxproxymanager.json
create mode 100644 json/nocodb.json
create mode 100644 json/node-red.json
create mode 100644 json/notifiarr.json
create mode 100644 json/ntfy.json
create mode 100644 json/nzbget.json
create mode 100644 json/octoprint.json
create mode 100644 json/olivetin.json
create mode 100644 json/omada.json
create mode 100644 json/ombi.json
create mode 100644 json/omv.json
create mode 100644 json/onedev.json
create mode 100644 json/openhab.json
create mode 100644 json/openobserve.json
create mode 100644 json/openwebui.json
create mode 100644 json/openwrt.json
create mode 100644 json/overseerr.json
create mode 100644 json/owncast.json
create mode 100644 json/owncloud-vm.json
create mode 100644 json/pairdrop.json
create mode 100644 json/paperless-ngx.json
create mode 100644 json/part-db.json
create mode 100644 json/pbs.json
create mode 100644 json/peanut.json
create mode 100644 json/petio.json
create mode 100644 json/photoprism.json
create mode 100644 json/pialert.json
create mode 100644 json/pihole.json
create mode 100644 json/pimox-haos-vm.json
create mode 100644 json/pingvin.json
create mode 100644 json/plex.json
create mode 100644 json/pocketbase.json
create mode 100644 json/podman-homeassistant.json
create mode 100644 json/podman.json
create mode 100644 json/post-pbs-install.json
create mode 100644 json/post-pve-install.json
create mode 100644 json/postgresql.json
create mode 100644 json/prometheus.json
create mode 100644 json/prowlarr.json
create mode 100644 json/proxmox-datacenter-manager.json
create mode 100644 json/qbittorrent.json
create mode 100644 json/rabbitmq.json
create mode 100644 json/radarr.json
create mode 100644 json/rdtclient.json
create mode 100644 json/readarr.json
create mode 100644 json/readeck.json
create mode 100644 json/recyclarr.json
create mode 100644 json/redis.json
create mode 100644 json/rtsptoweb.json
create mode 100644 json/runtipi.json
create mode 100644 json/sabnzbd.json
create mode 100644 json/scaling-governor.json
create mode 100644 json/sftpgo.json
create mode 100644 json/shinobi.json
create mode 100644 json/silverbullet.json
create mode 100644 json/smokeping.json
create mode 100644 json/snipeit.json
create mode 100644 json/sonarr.json
create mode 100644 json/spoolman.json
create mode 100644 json/stirling-pdf.json
create mode 100644 json/syncthing.json
create mode 100644 json/tandoor.json
create mode 100644 json/tasmoadmin.json
create mode 100644 json/tautulli.json
create mode 100644 json/tdarr.json
create mode 100644 json/technitiumdns.json
create mode 100644 json/teddycloud.json
create mode 100644 json/the-lounge.json
create mode 100644 json/threadfin.json
create mode 100644 json/tianji.json
create mode 100644 json/traccar.json
create mode 100644 json/traefik.json
create mode 100644 json/transmission.json
create mode 100644 json/trilium.json
create mode 100644 json/turnkey.json
create mode 100644 json/ubuntu.json
create mode 100644 json/ubuntu2204-vm.json
create mode 100644 json/ubuntu2404-vm.json
create mode 100644 json/umami.json
create mode 100644 json/unbound.json
create mode 100644 json/unifi.json
create mode 100644 json/unmanic.json
create mode 100644 json/update-lxcs.json
create mode 100644 json/update-repo.json
create mode 100644 json/uptimekuma.json
create mode 100644 json/vaultwarden.json
create mode 100644 json/vikunja.json
create mode 100644 json/wallos.json
create mode 100644 json/wastebin.json
create mode 100644 json/watchyourlan.json
create mode 100644 json/wavelog.json
create mode 100644 json/webmin.json
create mode 100644 json/whisparr.json
create mode 100644 json/whoogle.json
create mode 100644 json/wikijs.json
create mode 100644 json/wireguard.json
create mode 100644 json/yunohost.json
create mode 100644 json/zabbix.json
create mode 100644 json/zammad.json
create mode 100644 json/zigbee2mqtt.json
create mode 100644 json/zipline.json
create mode 100644 json/zoraxy.json
create mode 100644 json/zwave-js-ui.json
create mode 100644 misc/add-lxc-iptag.sh
create mode 100644 misc/figlet.tar.xz
delete mode 100644 misc/homarr.env
create mode 100644 misc/images/2025approved.png
create mode 100644 misc/update-repo.sh
delete mode 100644 status.json
diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
deleted file mode 100644
index 4cf8cff54..000000000
--- a/.github/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,132 +0,0 @@
-
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity
-and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
-
-## Our Standards
-
-Examples of behavior that contributes to a positive environment for our
-community include:
-
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
- overall community
-
-Examples of unacceptable behavior include:
-
-* The use of sexualized language or imagery, and sexual attention or
- advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
- address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
-
-## Scope
-
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement.
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-## Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-### 2. Warning
-
-**Community Impact**: A violation through a single incident or series
-of actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or
-permanent ban.
-
-### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within
-the community.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.0, available at
-[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
-
-Community Impact Guidelines were inspired by
-[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
-
-For answers to common questions about this code of conduct, see the FAQ at
-[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
-at [https://www.contributor-covenant.org/translations][translations].
-
-[homepage]: https://www.contributor-covenant.org
-[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
-[Mozilla CoC]: https://github.com/mozilla/diversity
-[FAQ]: https://www.contributor-covenant.org/faq
-[translations]: https://www.contributor-covenant.org/translations
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
deleted file mode 100644
index 2b2bf02d8..000000000
--- a/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,14 +0,0 @@
-
-Contributing to Proxmox VE Helper Scripts
-
-Everybody is invited and welcome to contribute to Proxmox VE Helper Scripts.
-
-- Pull requests submitted against [**main**](https://github.com/tteck/Proxmox/tree/main) are meticulously scrutinized, so please do not take it personally if the project maintainer rejects your request. By adhering to the established patterns and conventions throughout the codebase, you greatly increase the likelihood that your changes will get merged into [**main**](https://github.com/tteck/Proxmox/tree/main).
-
-- It is important to stress that complaining about a decision after it has been made is not productive behavior for the pull request submitter. It is crucial for all contributors to respect the decision-making process and collaborate effectively towards achieving the best possible outcome for the project.
-
-- The repository will only accept Alpine applications that make use of the Alpine Package Keeper.
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 8ecf7b043..000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-ko_fi: proxmoxhelperscripts
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml
deleted file mode 100644
index 26e62e89e..000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.yaml
+++ /dev/null
@@ -1,65 +0,0 @@
-name: Problems with a script.
-description: Generate a report on an issue pertaining specifically to a script. For other inquires please share them in the Discussions section.
-body:
- - type: markdown
- attributes:
- value: |
- **IMPORTANT:** Failure to comply with the following guidelines may result in immediate closure.
- - Prior to submitting, kindly search the closed issues to check if the problem you are reporting has already been addressed and resolved. If you come across a closed issue that pertains to your problem, please leave a comment on that issue instead of creating a new one.
- - If the default Linux distribution is not adhered to, script support will be discontinued.
- - When encountering the error message `[ERROR] in line 23: exit code *: while executing command "$@" > /dev/null 2>&1`, make sure to run the script in verbose mode to accurately determine the underlying issue.
- - For suggestions, questions or feature/script requests, please share them in the [Discussions section.](https://github.com/tteck/Proxmox/discussions)
- - type: input
- id: guidelines
- attributes:
- label: Please verify that you have read and understood the guidelines.
- placeholder: 'yes'
- validations:
- required: true
- - type: textarea
- id: bug
- attributes:
- label: A clear and concise description of the issue.
- validations:
- required: true
- - type: dropdown
- id: settings
- validations:
- required: true
- attributes:
- label: What settings are you currently utilizing?
- options:
- -
- - Default Settings
- - Advanced Settings
- - type: markdown
- attributes:
- value: (if Advanced Settings, please try Default Settings before creating an issue)
- - type: dropdown
- id: distribution
- validations:
- required: true
- attributes:
- label: Which Linux distribution are you employing?
- options:
- -
- - Alpine
- - Debian 11
- - Debian 12
- - Ubuntu 20.04
- - Ubuntu 22.04
- - Ubuntu 24.04
- - type: textarea
- id: screenshot
- attributes:
- label: If relevant, including screenshots or a code block can be helpful in clarifying the issue.
- placeholder: Code blocks begin and conclude by enclosing the code with three backticks (```) above and below it.
- validations:
- required: false
- - type: textarea
- id: reproduce
- attributes:
- label: Please provide detailed steps to reproduce the issue.
- placeholder: First do this, then this ...
- validations:
- required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index 09abbdf7f..000000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-blank_issues_enabled: false
-contact_links:
- - name: Helper-Scripts Community Support
- url: https://github.com/tteck/Proxmox/discussions
- about: Please ask and answer questions here.
diff --git a/.github/pull.yml b/.github/pull.yml
deleted file mode 100644
index dc7c80072..000000000
--- a/.github/pull.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-version: "1"
-rules:
- - base: main
- upstream: tteck:main
- mergeMethod: merge # [none, merge, squash, rebase, hardreset]
- conflictReviewers:
- - asylumexp
-label: ":arrow_heading_down: pull"
-conflictLabel: "merge-conflict"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4d99a84ba..97c551127 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
Changelog
@@ -13,25 +13,675 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
> [!NOTE]
All LXC instances created using this repository come pre-installed with Midnight Commander, which is a command-line tool (`mc`) that offers a user-friendly file and directory management interface for the terminal environment.
+> [!IMPORTANT]
+Do not break established syntax in this file, as it is automatically updated by a Github Workflow
+
+## 2024-12-30
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- [Archivebox] Fix wrong port being printed post install. [@Strana-Mechty](https://github.com/Strana-Mechty) ([#1105](https://github.com/community-scripts/ProxmoxVE/pull/1105))
+- fix: add homepage version during build step [@se-bastiaan](https://github.com/se-bastiaan) ([#1107](https://github.com/community-scripts/ProxmoxVE/pull/1107))
+
+### 🌐 Website
+
+- Fix Trilium Website to TriliumNext [@tmkis2](https://github.com/tmkis2) ([#1103](https://github.com/community-scripts/ProxmoxVE/pull/1103))
+
+## 2024-12-29
+
+### Changed
+
+### ✨ New Scripts
+
+- New Script: Grist [@cfurrow](https://github.com/cfurrow) ([#1076](https://github.com/community-scripts/ProxmoxVE/pull/1076))
+- New Script: TeddyCloud Server [@dsiebel](https://github.com/dsiebel) ([#1064](https://github.com/community-scripts/ProxmoxVE/pull/1064))
+
+### 🚀 Updated Scripts
+
+- Fix Install / Update on Grist Script [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#1091](https://github.com/community-scripts/ProxmoxVE/pull/1091))
+
+### 🌐 Website
+
+- fix: Update add-lxc-iptag.json warn to warning [@BramSuurdje](https://github.com/BramSuurdje) ([#1094](https://github.com/community-scripts/ProxmoxVE/pull/1094))
+
+### 🧰 Maintenance
+
+- Introduce editorconfig for more consistent formatting [@dsiebel](https://github.com/dsiebel) ([#1073](https://github.com/community-scripts/ProxmoxVE/pull/1073))
+
+## 2024-12-28
+
+### Changed
+
+### 💥 Breaking Changes
+
+- Add Figlet into Repo | Creation of local ASCII Header [@MickLesk](https://github.com/MickLesk) ([#1072](https://github.com/community-scripts/ProxmoxVE/pull/1072))
+- Add an IP-Update for MOTD if IP Changed [@MickLesk](https://github.com/MickLesk) ([#1067](https://github.com/community-scripts/ProxmoxVE/pull/1067))
+
+### 🚀 Updated Scripts
+
+- Zabbix: Fix SQL Path for 7.2 [@MickLesk](https://github.com/MickLesk) ([#1069](https://github.com/community-scripts/ProxmoxVE/pull/1069))
+- Authentik: added missing port to access url [@TheRealVira](https://github.com/TheRealVira) ([#1065](https://github.com/community-scripts/ProxmoxVE/pull/1065))
+
+## 2024-12-27
+
+### Changed
+
+### ✨ New Scripts
+
+- new scripts for Authentik [@remz1337](https://github.com/remz1337) ([#291](https://github.com/community-scripts/ProxmoxVE/pull/291))
+
+### 🚀 Updated Scripts
+
+- Add 8.0 for MongoDB Installation [@MickLesk](https://github.com/MickLesk) ([#1046](https://github.com/community-scripts/ProxmoxVE/pull/1046))
+- Update Zabbix to 7.2. Release [@MickLesk](https://github.com/MickLesk) ([#1048](https://github.com/community-scripts/ProxmoxVE/pull/1048))
+- Apache-Guacamole script bug fix [@sannier3](https://github.com/sannier3) ([#1039](https://github.com/community-scripts/ProxmoxVE/pull/1039))
+
+### 🌐 Website
+
+- Updated SAB documentation based on RAM increase [@TheRealVira](https://github.com/TheRealVira) ([#1035](https://github.com/community-scripts/ProxmoxVE/pull/1035))
+
+### ❔ Unlabelled
+
+- Patch Figlet Repo if missing [@MickLesk](https://github.com/MickLesk) ([#1044](https://github.com/community-scripts/ProxmoxVE/pull/1044))
+- fix Tags for Advanced Settings [@MickLesk](https://github.com/MickLesk) ([#1042](https://github.com/community-scripts/ProxmoxVE/pull/1042))
+
+## 2024-12-26
+
+### Changed
+
+### ✨ New Scripts
+
+- New Script: Jenkins [@quantumryuu](https://github.com/quantumryuu) ([#1019](https://github.com/community-scripts/ProxmoxVE/pull/1019))
+- New Script: 2FAuth [@jkrgr0](https://github.com/jkrgr0) ([#943](https://github.com/community-scripts/ProxmoxVE/pull/943))
+
+### 🚀 Updated Scripts
+
+- ChangeDetection Update: Update also Browsers [@Niklas04](https://github.com/Niklas04) ([#1027](https://github.com/community-scripts/ProxmoxVE/pull/1027))
+- ensure all RFC1918 local Ipv4 addresses are in iptag script [@AskAlice](https://github.com/AskAlice) ([#992](https://github.com/community-scripts/ProxmoxVE/pull/992))
+- Fix Proxmox DataCenter: incorrect build.func url [@rbradley0](https://github.com/rbradley0) ([#1013](https://github.com/community-scripts/ProxmoxVE/pull/1013))
+
+### 🧰 Maintenance
+
+- [GitHub Actions] Introduce Shellcheck to check bash code [@andygrunwald](https://github.com/andygrunwald) ([#1018](https://github.com/community-scripts/ProxmoxVE/pull/1018))
+
+## 2024-12-25
+
+### Changed
+
+### ✨ New Scripts
+
+- add: pve-datacenter-manager [@CrazyWolf13](https://github.com/CrazyWolf13) ([#947](https://github.com/community-scripts/ProxmoxVE/pull/947))
+
+### 🚀 Updated Scripts
+
+- Fix Script: Alpine Nextcloud Upload File Size Limit [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#933](https://github.com/community-scripts/ProxmoxVE/pull/933))
+- Doubled RAM for SAB [@TheRealVira](https://github.com/TheRealVira) ([#1007](https://github.com/community-scripts/ProxmoxVE/pull/1007))
+
+## 2024-12-23
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix Navidrome Update & Install [@MickLesk](https://github.com/MickLesk) ([#991](https://github.com/community-scripts/ProxmoxVE/pull/991))
+- Update emby.sh to correct port [@Rageplant](https://github.com/Rageplant) ([#989](https://github.com/community-scripts/ProxmoxVE/pull/989))
+
+## 2024-12-21
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- update Port in homeassistant-core CT [@fraefel](https://github.com/fraefel) ([#961](https://github.com/community-scripts/ProxmoxVE/pull/961))
+
+## 2024-12-20
+
+### Changed
+
+### ✨ New Scripts
+
+- New Script: Apache Guacamole [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#657](https://github.com/community-scripts/ProxmoxVE/pull/657))
+- New Script: silverbullet [@dsiebel](https://github.com/dsiebel) ([#659](https://github.com/community-scripts/ProxmoxVE/pull/659))
+- New Script: Zammad [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#640](https://github.com/community-scripts/ProxmoxVE/pull/640))
+- New Script: CheckMk [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#926](https://github.com/community-scripts/ProxmoxVE/pull/926))
+
+### 🚀 Updated Scripts
+
+- Fix: Remove PHP Key generation in Bookstack Update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#948](https://github.com/community-scripts/ProxmoxVE/pull/948))
+
+### 🌐 Website
+
+- Update checkmk description [@BramSuurdje](https://github.com/BramSuurdje) ([#954](https://github.com/community-scripts/ProxmoxVE/pull/954))
+- Add Login Note for Checkmk [@MickLesk](https://github.com/MickLesk) ([#940](https://github.com/community-scripts/ProxmoxVE/pull/940))
+
+### ❔ Unlabelled
+
+- Update build.func to display the Proxmox Hostname [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#894](https://github.com/community-scripts/ProxmoxVE/pull/894))
+
+## 2024-12-19
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix: Bookstack Update Function [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#844](https://github.com/community-scripts/ProxmoxVE/pull/844))
+- mysql not showing ip after install [@snow2k9](https://github.com/snow2k9) ([#924](https://github.com/community-scripts/ProxmoxVE/pull/924))
+- Fix Omada - Crawling latest version [@MickLesk](https://github.com/MickLesk) ([#918](https://github.com/community-scripts/ProxmoxVE/pull/918))
+
+### 🌐 Website
+
+- Fix script path formatting in InstallMethod component [@BramSuurdje](https://github.com/BramSuurdje) ([#909](https://github.com/community-scripts/ProxmoxVE/pull/909))
+- Fix Part-DB Docu (cred command) [@EvilBlood](https://github.com/EvilBlood) ([#898](https://github.com/community-scripts/ProxmoxVE/pull/898))
+- Enhance Tooltip component by adding CircleHelp icon and fix instructions in script component [@BramSuurdje](https://github.com/BramSuurdje) ([#910](https://github.com/community-scripts/ProxmoxVE/pull/910))
+
+## 2024-12-18
+
+### Changed
+
+### ✨ New Scripts
+
+- New script: Part-DB LXC [@bvdberg01](https://github.com/bvdberg01) ([#591](https://github.com/community-scripts/ProxmoxVE/pull/591))
+
+### 🚀 Updated Scripts
+
+- Fix Kernel-Clean for Proxmox 8.x [@MickLesk](https://github.com/MickLesk) ([#904](https://github.com/community-scripts/ProxmoxVE/pull/904))
+- [Frigate] Remove SSE 4.2 from instruction set supporting OpenVino [@remz1337](https://github.com/remz1337) ([#902](https://github.com/community-scripts/ProxmoxVE/pull/902))
+
+### 🌐 Website
+
+- New Metadata Category: "Coding & AI" [@newzealandpaul](https://github.com/newzealandpaul) ([#890](https://github.com/community-scripts/ProxmoxVE/pull/890))
+- Moved Webmin to "Server & Networking" [@newzealandpaul](https://github.com/newzealandpaul) ([#891](https://github.com/community-scripts/ProxmoxVE/pull/891))
+
+## 2024-12-17
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix Alpine-Nextcloud: Bump PHP Version to 8.3 [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#865](https://github.com/community-scripts/ProxmoxVE/pull/865))
+- Correction of Jellyfin CT Port [@mneten](https://github.com/mneten) ([#884](https://github.com/community-scripts/ProxmoxVE/pull/884))
+- fix spinner on lxc-ip-tag [@MickLesk](https://github.com/MickLesk) ([#876](https://github.com/community-scripts/ProxmoxVE/pull/876))
+- Fix Keycloak Installation [@MickLesk](https://github.com/MickLesk) ([#874](https://github.com/community-scripts/ProxmoxVE/pull/874))
+- Fix ports ressources [@MickLesk](https://github.com/MickLesk) ([#867](https://github.com/community-scripts/ProxmoxVE/pull/867))
+
+### 🧰 Maintenance
+
+- Small Changes to the PR Template [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#862](https://github.com/community-scripts/ProxmoxVE/pull/862))
+
+### ❔ Unlabelled
+
+- calculate terminal size for header_info [@MickLesk](https://github.com/MickLesk) ([#879](https://github.com/community-scripts/ProxmoxVE/pull/879))
+- Fix header creation with figlet for alpine [@MickLesk](https://github.com/MickLesk) ([#869](https://github.com/community-scripts/ProxmoxVE/pull/869))
+
+## 2024-12-16
+
+### Changed
+
+### 💥 Breaking Changes
+
+- Massive Update: build.func | install.func | create_lxc.sh (Part 1) [@MickLesk](https://github.com/MickLesk) ([#643](https://github.com/community-scripts/ProxmoxVE/pull/643))
+- Update ALL CT's to new default (Part 2) [@MickLesk](https://github.com/MickLesk) ([#710](https://github.com/community-scripts/ProxmoxVE/pull/710))
+
+### ✨ New Scripts
+
+- New Script: LXC IP-Tag [@MickLesk](https://github.com/MickLesk) ([#536](https://github.com/community-scripts/ProxmoxVE/pull/536))
+
+### 🚀 Updated Scripts
+
+- Increase Size | Description & Download-URL of Debian VM [@MickLesk](https://github.com/MickLesk) ([#837](https://github.com/community-scripts/ProxmoxVE/pull/837))
+- Update Script: Remove Docker Compose Question [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#847](https://github.com/community-scripts/ProxmoxVE/pull/847))
+
+### 🌐 Website
+
+- Bump nanoid from 3.3.7 to 3.3.8 in /frontend [@dependabot[bot]](https://github.com/dependabot[bot]) ([#845](https://github.com/community-scripts/ProxmoxVE/pull/845))
+
+### ❔ Unlabelled
+
+- Fix SSH root access in install.func [@havardthom](https://github.com/havardthom) ([#858](https://github.com/community-scripts/ProxmoxVE/pull/858))
+- Fix variable name for CT_TYPE override [@remz1337](https://github.com/remz1337) ([#855](https://github.com/community-scripts/ProxmoxVE/pull/855))
+- Keeps the same style after writing the SEARCH icon [@remz1337](https://github.com/remz1337) ([#851](https://github.com/community-scripts/ProxmoxVE/pull/851))
+
+## 2024-12-13
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix Keycloak Update Function [@MickLesk](https://github.com/MickLesk) ([#762](https://github.com/community-scripts/ProxmoxVE/pull/762))
+- Fix config bug in Alpine Vaultwarden [@havardthom](https://github.com/havardthom) ([#775](https://github.com/community-scripts/ProxmoxVE/pull/775))
+
+### 🌐 Website
+
+- Change MISC from red to green [@MickLesk](https://github.com/MickLesk) ([#815](https://github.com/community-scripts/ProxmoxVE/pull/815))
+- Update some JSON Files for Website [@MickLesk](https://github.com/MickLesk) ([#812](https://github.com/community-scripts/ProxmoxVE/pull/812))
+- Update Notes & Documentation for Proxmox Backup Server [@MickLesk](https://github.com/MickLesk) ([#804](https://github.com/community-scripts/ProxmoxVE/pull/804))
+
+### 🧰 Maintenance
+
+- Github: Optimize Issue Template & PR Template [@MickLesk](https://github.com/MickLesk) ([#802](https://github.com/community-scripts/ProxmoxVE/pull/802))
+
+## 2024-12-12
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Update jellyfin.sh / Fix infinite loop [@gerpo](https://github.com/gerpo) ([#792](https://github.com/community-scripts/ProxmoxVE/pull/792))
+
+### 🌐 Website
+
+- Fix port and website in nextcloudpi.json [@PhoenixEmik](https://github.com/PhoenixEmik) ([#790](https://github.com/community-scripts/ProxmoxVE/pull/790))
+- Add post-install note to mqtt.json [@havardthom](https://github.com/havardthom) ([#783](https://github.com/community-scripts/ProxmoxVE/pull/783))
+
+### 🧰 Maintenance
+
+- Filter pull requests on main branch in changelog-pr.yml [@havardthom](https://github.com/havardthom) ([#793](https://github.com/community-scripts/ProxmoxVE/pull/793))
+- Fix Z-Wave JS UI Breaking Change in CHANGELOG.md [@havardthom](https://github.com/havardthom) ([#781](https://github.com/community-scripts/ProxmoxVE/pull/781))
+
+## 2024-12-09
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix PostgreSQL password bug in Umami install [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#750](https://github.com/community-scripts/ProxmoxVE/pull/750))
+
+## 2024-12-08
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Use MongoDB 4.4 in Unifi for non-AVX users [@havardthom](https://github.com/havardthom) ([#691](https://github.com/community-scripts/ProxmoxVE/pull/691))
+
+### 🌐 Website
+
+- Move homarr to Dashboards section [@CrazyWolf13](https://github.com/CrazyWolf13) ([#740](https://github.com/community-scripts/ProxmoxVE/pull/740))
+
+## 2024-12-07
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Zigbee2MQTT: Remove dev branch choice until v2.0.0 release [@havardthom](https://github.com/havardthom) ([#702](https://github.com/community-scripts/ProxmoxVE/pull/702))
+- Fix Hoarder build failure by installing Chromium stable [@vhsdream](https://github.com/vhsdream) ([#723](https://github.com/community-scripts/ProxmoxVE/pull/723))
+
+### 🌐 Website
+
+- Bugfix: Include script name in website search [@havardthom](https://github.com/havardthom) ([#731](https://github.com/community-scripts/ProxmoxVE/pull/731))
+
+### ❔ Unlabelled
+
+- Fix broken build.func [@havardthom](https://github.com/havardthom) ([#736](https://github.com/community-scripts/ProxmoxVE/pull/736))
+
+## 2024-12-06
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix bugs in Komga update [@DysfunctionalProgramming](https://github.com/DysfunctionalProgramming) ([#717](https://github.com/community-scripts/ProxmoxVE/pull/717))
+- Bookstack: Fix Update function composer [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#700](https://github.com/community-scripts/ProxmoxVE/pull/700))
+
+### 🌐 Website
+
+- fix: note component in json-editor getting out of focus when typing and revert theme switch animation [@BramSuurdje](https://github.com/BramSuurdje) ([#706](https://github.com/community-scripts/ProxmoxVE/pull/706))
+
+### 🧰 Maintenance
+
+- Update frontend CI/CD workflow [@havardthom](https://github.com/havardthom) ([#703](https://github.com/community-scripts/ProxmoxVE/pull/703))
+
+## 2024-12-05
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- PostgreSQL: Change authentication method from peer to md5 for UNIX sockets [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#650](https://github.com/community-scripts/ProxmoxVE/pull/650))
+- Fix stdout in unifi.sh [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#688](https://github.com/community-scripts/ProxmoxVE/pull/688))
+- Fix `rm` bug in Vikunja update [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#692](https://github.com/community-scripts/ProxmoxVE/pull/692))
+
+## 2024-12-04
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Update Spelling 'Environment' in nginxproxymanager [@MathijsG](https://github.com/MathijsG) ([#676](https://github.com/community-scripts/ProxmoxVE/pull/676))
+
+### 🌐 Website
+
+- Update homepage.json documentation and website links [@patchmonkey](https://github.com/patchmonkey) ([#668](https://github.com/community-scripts/ProxmoxVE/pull/668))
+
+## 2024-12-03
+
+### Changed
+
+### ✨ New Scripts
+
+- New Script: Onedev [@quantumryuu](https://github.com/quantumryuu) ([#612](https://github.com/community-scripts/ProxmoxVE/pull/612))
+
+### 🚀 Updated Scripts
+
+- Script Update: SnipeIT [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#641](https://github.com/community-scripts/ProxmoxVE/pull/641))
+
+## 2024-12-02
+
+### Changed
+
+### ✨ New Scripts
+
+- New Script: Hoarder LXC [@vhsdream](https://github.com/vhsdream) ([#567](https://github.com/community-scripts/ProxmoxVE/pull/567))
+- New script: SnipeIT LXC [@michelroegl-brunner](https://github.com/michelroegl-brunner) ([#538](https://github.com/community-scripts/ProxmoxVE/pull/538))
+- New Script: Glance [@quantumryuu](https://github.com/quantumryuu) ([#595](https://github.com/community-scripts/ProxmoxVE/pull/595))
+- New script: Unbound LXC [@wimb0](https://github.com/wimb0) ([#547](https://github.com/community-scripts/ProxmoxVE/pull/547))
+- New script: Mylar3 LXC [@davalanche](https://github.com/davalanche) ([#554](https://github.com/community-scripts/ProxmoxVE/pull/554))
+
+### 🚀 Updated Scripts
+
+- Stirling-PDF: replace dependency for v0.35.0 and add check and fix in stirling-pdf.sh [@vhsdream](https://github.com/vhsdream) ([#614](https://github.com/community-scripts/ProxmoxVE/pull/614))
+- qbittorrent: do not override the configuration port in systemd [@zdraganov](https://github.com/zdraganov) ([#618](https://github.com/community-scripts/ProxmoxVE/pull/618))
+
+### 🌐 Website
+
+- chore: Update unbound logo to have only the actual logo [@BramSuurdje](https://github.com/BramSuurdje) ([#648](https://github.com/community-scripts/ProxmoxVE/pull/648))
+- fix: vaultwarden info mismatch [@BramSuurdje](https://github.com/BramSuurdje) ([#645](https://github.com/community-scripts/ProxmoxVE/pull/645))
+- Wallos json fix [@quantumryuu](https://github.com/quantumryuu) ([#630](https://github.com/community-scripts/ProxmoxVE/pull/630))
+
+## 2024-11-30
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Convert line endings in the-lounge.sh [@jamezpolley](https://github.com/jamezpolley) ([#599](https://github.com/community-scripts/ProxmoxVE/pull/599))
+
+### 🌐 Website
+
+- add some Information for Monitor-All Script [@MickLesk](https://github.com/MickLesk) ([#605](https://github.com/community-scripts/ProxmoxVE/pull/605))
+
+## 2024-11-29
+
+### Changed
+
+### ✨ New Scripts
+
+- New Script: The Lounge IRC [@quantumryuu](https://github.com/quantumryuu) ([#571](https://github.com/community-scripts/ProxmoxVE/pull/571))
+- New Script: LubeLogger [@quantumryuu](https://github.com/quantumryuu) ([#574](https://github.com/community-scripts/ProxmoxVE/pull/574))
+- New Script: Inspircd [@quantumryuu](https://github.com/quantumryuu) ([#576](https://github.com/community-scripts/ProxmoxVE/pull/576))
+
+### 🚀 Updated Scripts
+
+- Fix msg_error on zwave-js-ui [@MickLesk](https://github.com/MickLesk) ([#585](https://github.com/community-scripts/ProxmoxVE/pull/585))
+- Fix Kimai Apache2 Rights [@MickLesk](https://github.com/MickLesk) ([#577](https://github.com/community-scripts/ProxmoxVE/pull/577))
+
+## 2024-11-28
+
+### Changed
+
+### 💥 Breaking Changes
+
+- Fix Z-Wave JS UI script [@MickLesk](https://github.com/MickLesk) ([#546](https://github.com/community-scripts/ProxmoxVE/pull/546))
+ - [Migration guide](https://github.com/community-scripts/ProxmoxVE/discussions/635)
+
+### 🚀 Updated Scripts
+
+- Add vitest, add json validation tests, fix broken json files [@havardthom](https://github.com/havardthom) ([#566](https://github.com/community-scripts/ProxmoxVE/pull/566))
+- Add update script to Pocketbase [@dsiebel](https://github.com/dsiebel) ([#535](https://github.com/community-scripts/ProxmoxVE/pull/535))
+- Fix MongoDB install in Unifi script [@havardthom](https://github.com/havardthom) ([#564](https://github.com/community-scripts/ProxmoxVE/pull/564))
+- Remove changing DISK_REF for zfspool mikrotik-routeros.sh [@tjcomserv](https://github.com/tjcomserv) ([#529](https://github.com/community-scripts/ProxmoxVE/pull/529))
+
+### 🌐 Website
+
+- Show Changelog on Mobile Devices [@MickLesk](https://github.com/MickLesk) ([#558](https://github.com/community-scripts/ProxmoxVE/pull/558))
+
+## 2024-11-27
+
+### Changed
+
+### 💥 Breaking Changes
+
+- Zabbix: Use Agent2 as Default | Update Script added | some other Improvements [@MickLesk](https://github.com/MickLesk) ([#527](https://github.com/community-scripts/ProxmoxVE/pull/527))
+
+### 🚀 Updated Scripts
+
+- Fix: install mosquitto from mosquitto repo [@dsiebel](https://github.com/dsiebel) ([#534](https://github.com/community-scripts/ProxmoxVE/pull/534))
+- Patch Netbird Script | Container Boot-Check | Debian/Ubuntu Only [@MickLesk](https://github.com/MickLesk) ([#528](https://github.com/community-scripts/ProxmoxVE/pull/528))
+- Install MongoDB 4.2 for non-AVX CPUs in Unifi LXC [@ColinOppenheim](https://github.com/ColinOppenheim) ([#319](https://github.com/community-scripts/ProxmoxVE/pull/319))
+
+### 🌐 Website
+
+- Fix json error in zabbix.json [@havardthom](https://github.com/havardthom) ([#543](https://github.com/community-scripts/ProxmoxVE/pull/543))
+- Fix another json error in add-netbird-lxc.json [@havardthom](https://github.com/havardthom) ([#545](https://github.com/community-scripts/ProxmoxVE/pull/545))
+
+## 2024-11-26
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix Vikunja install script to prevent database deletion upon updating [@vhsdream](https://github.com/vhsdream) ([#524](https://github.com/community-scripts/ProxmoxVE/pull/524))
+
+## 2024-11-25
+
+### Changed
+
+### 💥 Breaking Changes
+
+- Remove Scrypted script [@MickLesk](https://github.com/MickLesk) ([#511](https://github.com/community-scripts/ProxmoxVE/pull/511))
+ - Because of request from Scrypted maintainer: [#494](https://github.com/community-scripts/ProxmoxVE/issues/494)
+ - Official Scrypted script can be used instead: https://docs.scrypted.app/installation.html#proxmox-ve
+
+### 🚀 Updated Scripts
+
+- Fix bugs in Calibre-Web update [@havardthom](https://github.com/havardthom) ([#517](https://github.com/community-scripts/ProxmoxVE/pull/517))
+- Fix upload folder in listmonk LXC [@bvdberg01](https://github.com/bvdberg01) ([#515](https://github.com/community-scripts/ProxmoxVE/pull/515))
+
+### 🌐 Website
+
+- Fix website url in Zoraxy documentation [@miggi92](https://github.com/miggi92) ([#506](https://github.com/community-scripts/ProxmoxVE/pull/506))
+
+## 2024-11-24
+
+### Changed
+
+### ✨ New Scripts
+
+- New script: listmonk LXC [@bvdberg01](https://github.com/bvdberg01) ([#442](https://github.com/community-scripts/ProxmoxVE/pull/442))
+
+### 🧰 Maintenance
+
+- Add release title to github-release.yml [@havardthom](https://github.com/havardthom) ([#481](https://github.com/community-scripts/ProxmoxVE/pull/481))
+
+## 2024-11-23
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix Actual Budget install missing build tools [@cour64](https://github.com/cour64) ([#455](https://github.com/community-scripts/ProxmoxVE/pull/455))
+- Fix Vikunja Update [@MickLesk](https://github.com/MickLesk) ([#440](https://github.com/community-scripts/ProxmoxVE/pull/440))
+- Patch PostInstall-Script to PVE 8.3 | Add PVE 8.3 in Security [@MickLesk](https://github.com/MickLesk) ([#431](https://github.com/community-scripts/ProxmoxVE/pull/431))
+
+### 🌐 Website
+
+- Frontend: fix reported issue with json-editor page and add OS select in installmethod [@BramSuurdje](https://github.com/BramSuurdje) ([#426](https://github.com/community-scripts/ProxmoxVE/pull/426))
+- Fixed Typo [@BenBakDev](https://github.com/BenBakDev) ([#441](https://github.com/community-scripts/ProxmoxVE/pull/441))
+
+### 🧰 Maintenance
+
+- Fix newline issue in changelog pr [@havardthom](https://github.com/havardthom) ([#474](https://github.com/community-scripts/ProxmoxVE/pull/474))
+- Remove newline in changelog-pr action [@havardthom](https://github.com/havardthom) ([#461](https://github.com/community-scripts/ProxmoxVE/pull/461))
+- Add action that creates github release based on CHANGELOG.md [@havardthom](https://github.com/havardthom) ([#462](https://github.com/community-scripts/ProxmoxVE/pull/462))
+
+## 2024-11-21
+
+### Changed
+
+### ✨ New Scripts
+
+- Add new LXC: NextPVR [@MickLesk](https://github.com/MickLesk) ([#391](https://github.com/community-scripts/ProxmoxVE/pull/391))
+- Add new LXC: Kimai [@MickLesk](https://github.com/MickLesk) ([#397](https://github.com/community-scripts/ProxmoxVE/pull/397))
+
+### 🚀 Updated Scripts
+
+- Add .env file support for HomeBox [@404invalid-user](https://github.com/404invalid-user) ([#383](https://github.com/community-scripts/ProxmoxVE/pull/383))
+- RDTClient Remove .NET 8.0 | Add .NET 9.0 [@MickLesk](https://github.com/MickLesk) ([#413](https://github.com/community-scripts/ProxmoxVE/pull/413))
+- Remove old resource message from vaultwarden [@havardthom](https://github.com/havardthom) ([#402](https://github.com/community-scripts/ProxmoxVE/pull/402))
+
+### 🌐 Website
+
+- Add PostInstall Documentation to zigbee2mqtt.json [@MickLesk](https://github.com/MickLesk) ([#411](https://github.com/community-scripts/ProxmoxVE/pull/411))
+- Fix incorrect hdd values in json files [@havardthom](https://github.com/havardthom) ([#403](https://github.com/community-scripts/ProxmoxVE/pull/403))
+- Website: Add discord link to navbar [@BramSuurdje](https://github.com/BramSuurdje) ([#405](https://github.com/community-scripts/ProxmoxVE/pull/405))
+
+### 🧰 Maintenance
+
+- Use github app in changelog-pr.yml and add auto approval [@havardthom](https://github.com/havardthom) ([#416](https://github.com/community-scripts/ProxmoxVE/pull/416))
+
+## 2024-11-20
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- LinkWarden: Moved PATH into service [@newzealandpaul](https://github.com/newzealandpaul) ([#376](https://github.com/community-scripts/ProxmoxVE/pull/376))
+
+### 🌐 Website
+
+- Replace dash "-" with "/" in metadata [@newzealandpaul](https://github.com/newzealandpaul) ([#374](https://github.com/community-scripts/ProxmoxVE/pull/374))
+- Proxmox VE Cron LXC Updater: Add tteck's notes. [@newzealandpaul](https://github.com/newzealandpaul) ([#378](https://github.com/community-scripts/ProxmoxVE/pull/378))
+
+## 2024-11-19
+
+### Changed
+
+### 🚀 Updated Scripts
+
+- Fix Wallos Update [@MickLesk](https://github.com/MickLesk) ([#339](https://github.com/community-scripts/ProxmoxVE/pull/339))
+- Linkwarden: Move Secret Key above in install.sh [@MickLesk](https://github.com/MickLesk) ([#356](https://github.com/community-scripts/ProxmoxVE/pull/356))
+- Linkwarden: add gnupg to installed dependencies [@erfansamandarian](https://github.com/erfansamandarian) ([#349](https://github.com/community-scripts/ProxmoxVE/pull/349))
+
+### 🌐 Website
+
+- Add *Arr Suite category for Website [@MickLesk](https://github.com/MickLesk) ([#370](https://github.com/community-scripts/ProxmoxVE/pull/370))
+- Refactor Buttons component to use a ButtonLink for cleaner code, simplifying the source URL generation and layout [@BramSuurdje](https://github.com/BramSuurdje) ([#371](https://github.com/community-scripts/ProxmoxVE/pull/371))
+
+### 🧰 Maintenance
+
+- [github]: add new Frontend_Report / Issue_Report & optimize config.yml [@MickLesk](https://github.com/MickLesk) ([#226](https://github.com/community-scripts/ProxmoxVE/pull/226))
+- [chore] Update FUNDING.yml [@MickLesk](https://github.com/MickLesk) ([#352](https://github.com/community-scripts/ProxmoxVE/pull/352))
+
+## 2024-11-18
+
+### Changed
+
+### 💥 Breaking Changes
+
+- Massive Update - Remove old storage check, add new storage and resource check to all scripts - Remove downscaling with pct set [@MickLesk](https://github.com/MickLesk) ([#333](https://github.com/community-scripts/ProxmoxVE/pull/333))
+
+### ✨ New Scripts
+
+- new scripts for NetBox [@bvdberg01](https://github.com/bvdberg01) ([#308](https://github.com/community-scripts/ProxmoxVE/pull/308))
+
+### 🚀 Updated Scripts
+
+- Support SSE 4.2 in Frigate script [@anishp55](https://github.com/anishp55) ([#328](https://github.com/community-scripts/ProxmoxVE/pull/328))
+- Bugfix: Wallos Patch (Cron Log & Media Backup) [@MickLesk](https://github.com/MickLesk) ([#331](https://github.com/community-scripts/ProxmoxVE/pull/331))
+- Linkwarden - Harmonize Script, Add Monolith & Bugfixing [@MickLesk](https://github.com/MickLesk) ([#306](https://github.com/community-scripts/ProxmoxVE/pull/306))
+- Fix optional installs in Cockpit LXC [@havardthom](https://github.com/havardthom) ([#317](https://github.com/community-scripts/ProxmoxVE/pull/317))
+
+### 🌐 Website
+
+- Added additional instructions to nginxproxymanager [@newzealandpaul](https://github.com/newzealandpaul) ([#329](https://github.com/community-scripts/ProxmoxVE/pull/329))
+
+### 🧰 Maintenance
+
+- Verify changes before commit in changelog-pr.yml [@havardthom](https://github.com/havardthom) ([#310](https://github.com/community-scripts/ProxmoxVE/pull/310))
+
+## 2024-11-17
+
+### Changed
+
+### ✨ New Scripts
+
+- Add Komga LXC [@DysfunctionalProgramming](https://github.com/DysfunctionalProgramming) ([#275](https://github.com/community-scripts/ProxmoxVE/pull/275))
+
+### 🚀 Updated Scripts
+
+- Tweak: Patch Prometheus for v.3.0.0 [@MickLesk](https://github.com/MickLesk) ([#300](https://github.com/community-scripts/ProxmoxVE/pull/300))
+- Wavelog - Small Adjustment [@HB9HIL](https://github.com/HB9HIL) ([#292](https://github.com/community-scripts/ProxmoxVE/pull/292))
+
+### 🌐 Website
+
+- Add Note for Komga Installation (Website) [@MickLesk](https://github.com/MickLesk) ([#303](https://github.com/community-scripts/ProxmoxVE/pull/303))
+- Fix Komga logo [@havardthom](https://github.com/havardthom) ([#298](https://github.com/community-scripts/ProxmoxVE/pull/298))
+
+### 🧰 Maintenance
+
+- Add github workflow for automatic changelog PR [@havardthom](https://github.com/havardthom) ([#299](https://github.com/community-scripts/ProxmoxVE/pull/299))
+- Use website label in autolabeler [@havardthom](https://github.com/havardthom) ([#297](https://github.com/community-scripts/ProxmoxVE/pull/297))
+
+## 2024-11-16
+
+### Changed
+
+- **Recyclarr LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/recyclarr-install.sh)
+ - NEW Script
+- **Wavelog LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/wavelog-install.sh)
+ - NEW Script
+- **Vaultwarden LXC:** RAM has now been increased to 6144 MB [(PR)](https://github.com/community-scripts/ProxmoxVE/pull/285)
+ - Breaking Change
+
+
+## 2024-11-05
+
+### Changed
+
+- **Bookstack LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/bookstack-install.sh)
+ - NEW Script
+- **Vikunja LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/vikunja-install.sh)
+ - NEW Script
+
+## 2024-11-04
+
+### Breaking Change
+- **Automatic Update of Repository:** The update function now uses the new repository `community-scripts/ProxmoxVE` for Debian/Ubuntu LXC containers.
+
+ ```bash
+ bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/misc/update-repo.sh)"
+
+## 2024-10-31
+
+### Changed
+
+- **NZBGet LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/nzbget-install.sh)
+ - NEW Script
+- **Memos LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/memos-install.sh)
+ - NEW Script
+
## 2024-10-27
### Changed
-- **Open WebUI LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/8a21f6e7f025a911865395d4c0fa9a001bd0d512)
+- **Open WebUI LXC** [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/8a21f6e7f025a911865395d4c0fa9a001bd0d512)
- Refactor Script to add an option to install Ollama.
## 2024-10-26
### Changed
-- **AdventureLog LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/adventurelog-install.sh)
+- **AdventureLog LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adventurelog-install.sh)
- NEW Script
## 2024-10-25
### Changed
-- **Zoraxy LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/468a5d367ded4cf453a1507452e112ac3e234e2a)
+- **Zoraxy LXC** [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/468a5d367ded4cf453a1507452e112ac3e234e2a)
- Switch built from source to a pre-compiled binary version.
- Breaking Change
@@ -39,41 +689,41 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
-- **Wallos LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/wallos-install.sh)
+- **Wallos LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/wallos-install.sh)
- NEW Script
-- **Open WebUI LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/openwebui-install.sh)
+- **Open WebUI LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/openwebui-install.sh)
- NEW Script
## 2024-10-19
### Changed
-- **Cockpit LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/cockpit-install.sh)
+- **Cockpit LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/cockpit-install.sh)
- NEW Script
-- **Neo4j LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/neo4j-install.sh)
+- **Neo4j LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/neo4j-install.sh)
- NEW Script
## 2024-10-18
### Changed
-- **ArchiveBox LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/archivebox-install.sh)
+- **ArchiveBox LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/archivebox-install.sh)
- NEW Script
## 2024-10-15
### Changed
-- **evcc LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/evcc-install.sh)
+- **evcc LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/evcc-install.sh)
- NEW Script
## 2024-10-10
### Changed
-- **MySQL LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/mysql-install.sh)
+- **MySQL LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/mysql-install.sh)
- NEW Script
-- **Tianji LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/4c83a790ac9b040da1f11ad2cbe13d3fc5f480e9)
+- **Tianji LXC** [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/4c83a790ac9b040da1f11ad2cbe13d3fc5f480e9)
- Breaking Change
- Switch from `pm2` process management to `systemd`
@@ -81,7 +731,7 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
-- **Home Assistant Core LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/f2937febe69b2bad8b3a14eb84aa562a8f14cc6a) [(Commit)](https://github.com/tteck/Proxmox/commit/f2966ced7f457fd506f865f7f5b70ea12c4b0049)
+- **Home Assistant Core LXC** [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/f2937febe69b2bad8b3a14eb84aa562a8f14cc6a) [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/f2966ced7f457fd506f865f7f5b70ea12c4b0049)
- Refactor Code
- Breaking Change
- Home Assistant has transitioned to using `uv` for managing the virtual environment and installing additional modules.
@@ -90,23 +740,23 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
-- **HomeBox LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/homebox-install.sh)
+- **HomeBox LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/homebox-install.sh)
- NEW Script
-- **Zipline LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/zipline-install.sh)
+- **Zipline LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/zipline-install.sh)
- NEW Script
## 2024-09-13
### Changed
-- **Tianji LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/tianji-install.sh)
+- **Tianji LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/tianji-install.sh)
- NEW Script
## 2024-08-21
### Changed
-- **WireGuard LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/723365a79df7cc0fd29b1af8f7ef200a7e0921b1)
+- **WireGuard LXC** [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/723365a79df7cc0fd29b1af8f7ef200a7e0921b1)
- Refactor Code
- Breaking Change
@@ -114,7 +764,7 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
-- **CommaFeed LXC** [(Commit)](https://github.com/tteck/Proxmox/commit/0a33d1739ec3a49011411929bd46a260e92e99f9)
+- **CommaFeed LXC** [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/0a33d1739ec3a49011411929bd46a260e92e99f9)
- Refactor Code
- Breaking Change
@@ -122,30 +772,30 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
-- **lldap LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/lldap-install.sh)
+- **lldap LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/lldap-install.sh)
- NEW Script
## 2024-07-26
### Changed
-- **Gitea LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/gitea-install.sh)
+- **Gitea LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/gitea-install.sh)
- NEW Script
## 2024-06-30
### Changed
-- **All Scripts** [(Commit)](https://github.com/tteck/Proxmox/commit/39ea1d4a20b83c07d084ebafdc811eec3548f289)
+- **All Scripts** [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/39ea1d4a20b83c07d084ebafdc811eec3548f289)
- Requires Proxmox Virtual Environment version 8.1 or later.
## 2024-06-27
### Changed
-- **Kubo LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/kubo-install.sh)
+- **Kubo LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/kubo-install.sh)
- NEW Script
-- **RabbitMQ LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/rabbitmq-install.sh)
+- **RabbitMQ LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/rabbitmq-install.sh)
- NEW Script
- **Scrutiny LXC**
- Removed from website, broken.
@@ -161,27 +811,27 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
-- **MySpeed LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/myspeed-install.sh)
+- **MySpeed LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/myspeed-install.sh)
- NEW Script
## 2024-06-13
### Changed
-- **PeaNUT LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/peanut-install.sh)
+- **PeaNUT LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/peanut-install.sh)
- NEW Script
- **Website**
- If the Changelog has changed recently, the link on the website will pulse.
-- **Spoolman LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/spoolman-install.sh)
+- **Spoolman LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/spoolman-install.sh)
- NEW Script
## 2024-06-12
### Changed
-- **MeTube LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/metube-install.sh)
+- **MeTube LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/metube-install.sh)
- NEW Script
-- **Matterbridge LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/matterbridge-install.sh)
+- **Matterbridge LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/matterbridge-install.sh)
- NEW Script
- **Website**
- Reopen the gh-pages site (https://tteck.github.io/Proxmox/)
@@ -190,14 +840,14 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
-- **Zabbix LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/zabbix-install.sh)
+- **Zabbix LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/zabbix-install.sh)
- NEW Script
## 2024-06-06
### Changed
-- **Petio LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/petio-install.sh)
+- **Petio LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/petio-install.sh)
- NEW Script
- **Website**
- Important notices will now be displayed on the landing page.
@@ -206,14 +856,14 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
-- **FlareSolverr LXC** [(View Source)](https://github.com/tteck/Proxmox/blob/main/install/flaresolverr-install.sh)
+- **FlareSolverr LXC** [(View Source)](https://github.com/community-scripts/ProxmoxVE/blob/main/install/flaresolverr-install.sh)
- NEW Script
## 2024-05-31
### Changed
-- **Advanced Settings** [(Commit)](https://github.com/tteck/Proxmox/commit/fc9dff220b4ea426d3a75178ad8accacae4683ca)
+- **Advanced Settings** [(Commit)](https://github.com/community-scripts/ProxmoxVE/commit/fc9dff220b4ea426d3a75178ad8accacae4683ca)
- Passwords are now masked
## 2024-05-30
@@ -1041,7 +1691,7 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
- **Proxmox VE Monitor-All**
- - Skip instances based on onboot and templates. [8c2a3cc](https://github.com/tteck/Proxmox/commit/8c2a3cc4d774fa13d17f695d6bdf9a4deedb1372).
+ - Skip instances based on onboot and templates. [8c2a3cc](https://github.com/community-scripts/ProxmoxVE/commit/8c2a3cc4d774fa13d17f695d6bdf9a4deedb1372).
## 2023-06-12
@@ -1177,7 +1827,7 @@ All LXC instances created using this repository come pre-installed with Midnight
- **InfluxDB LXC**
- Choosing InfluxDB v1 will result in Chronograf being installed automatically.
-- **[User Submitted Guides](https://github.com/tteck/Proxmox/blob/main/USER_SUBMITTED_GUIDES.md)**
+- **[User Submitted Guides](https://github.com/community-scripts/ProxmoxVE/blob/main/USER_SUBMITTED_GUIDES.md)**
- Informative guides that demonstrate how to install various software packages using Proxmox VE Helper Scripts.
## 2023-04-14
@@ -1571,7 +2221,7 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
- **Proxmox LXC Updater**
- - Now updates Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, ArchLinux [(@Uruknara)](https://github.com/tteck/Proxmox/commits?author=Uruknara)
+ - Now updates Ubuntu, Debian, Devuan, Alpine Linux, CentOS-Rocky-Alma, Fedora, ArchLinux [(@Uruknara)](https://github.com/community-scripts/ProxmoxVE/commits?author=Uruknara)
## 2022-11-13
@@ -2274,28 +2924,28 @@ All LXC instances created using this repository come pre-installed with Midnight
### Changed
- **Node-Red LXC**
- - Add Install [Themes Script](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/node-red-themes.png)
+ - Add Install Themes Script
## 2022-02-16
### Changed
- **Home Assistant Container LXC**
- - Add Options to [Update Menu](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/update-menu.png)
+ - Add Options to Update Menu
## 2022-02-14
### Changed
- **Home Assistant Container LXC**
- - Add [Update Menu](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/update-menu.png)
+ - Add Update Menu
## 2022-02-13
### Changed
- **Mariadb LXC**
- - Add [Adminer](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/adminer.png) (formerly phpMinAdmin), a full-featured database management tool
+ - Add Adminer (formerly phpMinAdmin), a full-featured database management tool
## 2022-02-12
@@ -2387,7 +3037,7 @@ All LXC instances created using this repository come pre-installed with Midnight
- `va-driver-all` is preinstalled
- now using Ubuntu 21.10
- **misc**
- - new GUI script [(Screenshot)](https://raw.githubusercontent.com/tteck/Proxmox/main/misc/images/pms-copy-data.png) to copy data from one Plex Media Server LXC to another Plex Media Server LXC
+ - new GUI script to copy data from one Plex Media Server LXC to another Plex Media Server LXC
## Initial Catch up - 2022-01-23
diff --git a/CODE-AUDIT.md b/CODE-AUDIT.md
index 46db7c9c7..158a5c6ce 100644
--- a/CODE-AUDIT.md
+++ b/CODE-AUDIT.md
@@ -1,14 +1,14 @@
-

+
Exploring the Scripts and Steps Involved in an Application LXC Installation
-1) [adguard.sh](https://github.com/tteck/Proxmox/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.)
-2) [build.func](https://github.com/tteck/Proxmox/blob/main/misc/build.func): Adds user settings and integrates collected information.
-3) [create_lxc.sh](https://github.com/tteck/Proxmox/blob/main/ct/create_lxc.sh): Constructs the LXC container.
-4) [adguard-install.sh](https://github.com/tteck/Proxmox/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/tteck/Proxmox/blob/main/misc/install.func), and installs the application.
-5) [adguard.sh](https://github.com/tteck/Proxmox/blob/main/ct/adguard.sh) (again): To display the completion message.
+1) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh): This script collects system parameters. (Also holds the function to update the application.)
+2) [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func): Adds user settings and integrates collected information.
+3) [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/create_lxc.sh): Constructs the LXC container.
+4) [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh): Executes functions from [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), and installs the application.
+5) [adguard.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/adguard.sh) (again): To display the completion message.
-The installation process uses reusable scripts: [build.func](https://github.com/tteck/Proxmox/blob/main/misc/build.func), [create_lxc.sh](https://github.com/tteck/Proxmox/blob/main/ct/create_lxc.sh), and [install.func](https://github.com/tteck/Proxmox/blob/main/misc/install.func), which are not specific to any particular application.
+The installation process uses reusable scripts: [build.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/build.func), [create_lxc.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/ct/create_lxc.sh), and [install.func](https://github.com/community-scripts/ProxmoxVE/blob/main/misc/install.func), which are not specific to any particular application.
-To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/tteck/Proxmox/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container.
+To gain a better understanding, focus on reviewing [adguard-install.sh](https://github.com/community-scripts/ProxmoxVE/blob/main/install/adguard-install.sh). This script contains the commands and configurations for installing and configuring AdGuard Home within the LXC container.
diff --git a/LICENSE b/LICENSE
index 86316b3f8..acc8bf814 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2021-2024 tteck
+Copyright (c) 2021-2025 tteck
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000..c8530d506
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,23 @@
+## Supported Versions
+This project currently supports the following versions of Proxmox VE:
+
+| Version | Supported |
+| ------- | ------------------ |
+| 8.3.x | :white_check_mark: |
+| 8.2.x | :white_check_mark: |
+| 8.1.x | :white_check_mark: |
+| 8.0.x | Limited support* ❕|
+| < 8.0 | :x: |
+
+*Version 8.0.x has limited support. Security updates may not be provided for all issues in this version.
+
+## Reporting a Vulnerability
+
+Security vulnerabilities shouldn’t be reported publicly to prevent potential exploitation. Instead, please report any vulnerabilities privately by reaching out directly to us. You can either join our [Discord server](https://discord.gg/UHrpNWGwkH) and send a direct message to a maintainer or contact us via email at contact@community-scripts.org. Be sure to include a detailed description of the vulnerability and the steps to reproduce it. Thank you for helping us keep our project secure!
+
+Once a vulnerability has been reported, the project maintainers will review it and acknowledge the report within 7 business days. We will then work to address the vulnerability and provide a fix as soon as possible. Depending on the severity of the issue, a patch may be released immediately or included in the next scheduled update.
+
+Please note that not all reported vulnerabilities may be accepted. The project maintainers reserve the right to decline a vulnerability report if it is deemed to be a low-risk issue or if it conflicts with the project's design or architecture. In such cases, we will provide an explanation for the decision.
+
+If you have any questions or concerns about this security policy, please don't hesitate to contact the project maintainers.
+
diff --git a/USER_SUBMITTED_GUIDES.md b/USER_SUBMITTED_GUIDES.md
index a1a3aae9e..795993950 100644
--- a/USER_SUBMITTED_GUIDES.md
+++ b/USER_SUBMITTED_GUIDES.md
@@ -1,6 +1,6 @@
User Submitted Guides
diff --git a/ct/2fauth.sh b/ct/2fauth.sh
new file mode 100644
index 000000000..1f930ac41
--- /dev/null
+++ b/ct/2fauth.sh
@@ -0,0 +1,90 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: jkrgr0
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://docs.2fauth.app/
+
+# App Default Values
+APP="2FAuth"
+TAGS="2fa;authenticator"
+var_cpu="1"
+var_ram="512"
+var_disk="2"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+
+ # Check if installation is present | -f for file, -d for folder
+ if [[ ! -d "/opt/2fauth" ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ # Crawling the new version and checking whether an update is required
+ RELEASE=$(curl -s https://api.github.com/repos/Bubka/2FAuth/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ "${RELEASE}" != "$(cat /opt/2fauth_version.txt)" ]] || [[ ! -f /opt/2fauth_version.txt ]]; then
+ msg_info "Updating $APP to ${RELEASE}"
+
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+
+ # Creating Backup
+ msg_info "Creating Backup"
+ mv "/opt/2fauth" "/opt/2fauth-backup"
+ msg_ok "Backup Created"
+
+ # Execute Update
+ wget -q "https://github.com/Bubka/2FAuth/archive/refs/tags/${RELEASE}.zip"
+ unzip -q "${RELEASE}.zip"
+ mv "2FAuth-${RELEASE//v}/" "/opt/2fauth"
+ mv "/opt/2fauth-backup/.env" "/opt/2fauth/.env"
+ mv "/opt/2fauth-backup/storage" "/opt/2fauth/storage"
+ cd "/opt/2fauth" || return
+
+ chown -R www-data: "/opt/2fauth"
+ chmod -R 755 "/opt/2fauth"
+
+ export COMPOSER_ALLOW_SUPERUSER=1
+ composer install --no-dev --prefer-source &>/dev/null
+
+ php artisan 2fauth:install
+
+ # Cleaning up
+ msg_info "Cleaning Up"
+ rm -rf "v${RELEASE}.zip"
+ $STD apt-get -y autoremove
+ $STD apt-get -y autoclean
+ msg_ok "Cleanup Completed"
+
+ # Last Action
+ echo "${RELEASE}" >/opt/2fauth_version.txt
+ msg_ok "Updated $APP to ${RELEASE}"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}"
\ No newline at end of file
diff --git a/ct/actualbudget.sh b/ct/actualbudget.sh
index 25745fad4..b5925f1d8 100644
--- a/ct/actualbudget.sh
+++ b/ct/actualbudget.sh
@@ -1,77 +1,52 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://actualbudget.org/
-function header_info {
-clear
-cat <<"EOF"
- ___ __ __ ____ __ __
- / | _____/ /___ ______ _/ / / __ )__ ______/ /___ ____ / /_
- / /| |/ ___/ __/ / / / __ `/ / / __ / / / / __ / __ `/ _ \/ __/
- / ___ / /__/ /_/ /_/ / /_/ / / / /_/ / /_/ / /_/ / /_/ / __/ /_
-/_/ |_\___/\__/\__,_/\__,_/_/ /_____/\__,_/\__,_/\__, /\___/\__/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Actual Budget"
-var_disk="4"
+var_tags="finance"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/actualbudget ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-systemctl stop actualbudget.service
-cd /opt/actualbudget
-git pull &>/dev/null
-yarn install &>/dev/null
-systemctl start actualbudget.service
-msg_ok "Successfully Updated ${APP}"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/actualbudget ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ systemctl stop actualbudget.service
+ cd /opt/actualbudget
+ git pull &>/dev/null
+ yarn install &>/dev/null
+ systemctl start actualbudget.service
+ msg_ok "Successfully Updated ${APP}"
+ exit
}
start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 1024
-pct set $CTID -cores 1
-msg_ok "Set Container to Normal Resources"
+
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5006${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5006${CL}"
\ No newline at end of file
diff --git a/ct/adguard.sh b/ct/adguard.sh
index 87a1a0ae7..c233e2b4a 100644
--- a/ct/adguard.sh
+++ b/ct/adguard.sh
@@ -1,87 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://adguard.com/
-function header_info {
-clear
-cat <<"EOF"
- ___ __ __
- / | ____/ /___ ___ ______ __________/ /
- / /| |/ __ / __ / / / / __ / ___/ __ /
- / ___ / /_/ / /_/ / /_/ / /_/ / / / /_/ /
-/_/ |_\__,_/\__, /\__,_/\__,_/_/ \__,_/
- /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Adguard"
-var_disk="2"
+var_tags="adblock"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/AdGuardHome ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-wget -qL https://static.adguard.com/adguardhome/release/AdGuardHome_linux_amd64.tar.gz
-msg_info "Stopping AdguardHome"
-systemctl stop AdGuardHome
-msg_ok "Stopped AdguardHome"
-
-msg_info "Updating AdguardHome"
-tar -xvf AdGuardHome_linux_amd64.tar.gz &>/dev/null
-mkdir -p adguard-backup
-cp -r /opt/AdGuardHome/AdGuardHome.yaml /opt/AdGuardHome/data adguard-backup/
-cp AdGuardHome/AdGuardHome /opt/AdGuardHome/AdGuardHome
-cp -r adguard-backup/* /opt/AdGuardHome/
-msg_ok "Updated AdguardHome"
-
-msg_info "Starting AdguardHome"
-systemctl start AdGuardHome
-msg_ok "Started AdguardHome"
-
-msg_info "Cleaning Up"
-rm -rf AdGuardHome_linux_amd64.tar.gz AdGuardHome adguard-backup
-msg_ok "Cleaned"
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/AdGuardHome ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "Adguard Home should be updated via the user interface."
+ exit
}
start
@@ -89,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
diff --git a/ct/adventurelog.sh b/ct/adventurelog.sh
index 3d7137e57..14478040e 100644
--- a/ct/adventurelog.sh
+++ b/ct/adventurelog.sh
@@ -1,104 +1,77 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://adventurelog.app/
-function header_info {
-clear
-cat <<"EOF"
- ___ __ __ __
- / | ____/ / _____ ____ / /___ __________ / / ____ ____ _
- / /| |/ __ / | / / _ \/ __ \/ __/ / / / ___/ _ \/ / / __ \/ __ `/
- / ___ / /_/ /| |/ / __/ / / / /_/ /_/ / / / __/ /___/ /_/ / /_/ /
-/_/ |_\__,_/ |___/\___/_/ /_/\__/\__,_/_/ \___/_____/\____/\__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="AdventureLog"
+var_tags="traveling"
var_disk="7"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
function update_script() {
-header_info
-if [[ ! -d /opt/adventurelog ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-RELEASE=$(curl -s https://api.github.com/repos/seanmorley15/AdventureLog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping Services"
- systemctl stop adventurelog-backend
- systemctl stop adventurelog-frontend
- msg_ok "Services Stopped"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/adventurelog ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/seanmorley15/AdventureLog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Services"
+ systemctl stop adventurelog-backend
+ systemctl stop adventurelog-frontend
+ msg_ok "Services Stopped"
- msg_info "Updating ${APP} to ${RELEASE}"
- cp /opt/adventurelog/backend/server/.env /opt/server.env
- cp /opt/adventurelog/frontend/env /opt/frontend.env
- wget -q "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip"
- unzip -q v${RELEASE}.zip
- mv AdventureLog-${RELEASE} /opt/adventurelog
- mv /opt/server.env /opt/adventurelog/backend/server/.env
- cd /opt/adventurelog/backend/server
- pip install --upgrade pip &>/dev/null
- pip install -r requirements.txt &>/dev/null
- python3 manage.py collectstatic --noinput &>/dev/null
- python3 manage.py migrate &>/dev/null
-
- mv /opt/frontend.env /opt/adventurelog/frontend/.env
- cd /opt/adventurelog/frontend
- pnpm install &>/dev/null
- pnpm run build &>/dev/null
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cp /opt/adventurelog/backend/server/.env /opt/server.env
+ cp /opt/adventurelog/frontend/.env /opt/frontend.env
+ wget -q "https://github.com/seanmorley15/AdventureLog/archive/refs/tags/v${RELEASE}.zip"
+ unzip -q v${RELEASE}.zip
+ mv AdventureLog-${RELEASE} /opt/adventurelog
+ mv /opt/server.env /opt/adventurelog/backend/server/.env
+ cd /opt/adventurelog/backend/server
+ pip install --upgrade pip &>/dev/null
+ pip install -r requirements.txt &>/dev/null
+ python3 manage.py collectstatic --noinput &>/dev/null
+ python3 manage.py migrate &>/dev/null
- msg_info "Starting Services"
- systemctl start adventurelog-backend
- systemctl start adventurelog-frontend
- msg_ok "Started Services"
+ mv /opt/frontend.env /opt/adventurelog/frontend/.env
+ cd /opt/adventurelog/frontend
+ pnpm install &>/dev/null
+ pnpm run build &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP}"
- msg_info "Cleaning Up"
- rm -rf v${RELEASE}.zip
- msg_ok "Cleaned"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Starting Services"
+ systemctl start adventurelog-backend
+ systemctl start adventurelog-frontend
+ msg_ok "Started Services"
+
+ msg_info "Cleaning Up"
+ rm -rf v${RELEASE}.zip
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -106,5 +79,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
\ No newline at end of file
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/agentdvr.sh b/ct/agentdvr.sh
index 9d0ead0f7..07810da88 100644
--- a/ct/agentdvr.sh
+++ b/ct/agentdvr.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.ispyconnect.com/
-function header_info {
-clear
-cat <<"EOF"
- ___ __ ____ _ ______
- / | ____ ____ ____ / /_/ __ \ | / / __ \
- / /| |/ __ `/ _ \/ __ \/ __/ / / / | / / /_/ /
- / ___ / /_/ / __/ / / / /_/ /_/ /| |/ / _, _/
-/_/ |_\__, /\___/_/ /_/\__/_____/ |___/_/ |_|
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="AgentDVR"
-var_disk="8"
+var_tags="dvr"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="ubuntu"
var_version="22.04"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/agentdvr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/agentdvr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -64,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP}${CL} should be reachable by going to the following URL.
- ${BL}http://${IP}:8090${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
\ No newline at end of file
diff --git a/ct/alpine-docker.sh b/ct/alpine-docker.sh
index 55142c7cf..b04cd64a8 100644
--- a/ct/alpine-docker.sh
+++ b/ct/alpine-docker.sh
@@ -1,58 +1,28 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-function header_info {
- clear
- cat <<"EOF"
- ____ __
- / __ \____ _____/ /_ __ _____
- / / / / __ \/ ___/ //_/ _ \/ ___/
- / /_/ / /_/ / /__/ ,< / __/ /
-/_____/\____/\___/_/|_|\___/_/
- Alpine
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Alpine-Docker"
-var_disk="2"
+var_tags="docker;alpine"
var_cpu="1"
var_ram="1024"
+var_disk="2"
var_os="alpine"
var_version="3.20"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
diff --git a/ct/alpine-grafana.sh b/ct/alpine-grafana.sh
index 0b47b6183..c71d9a21d 100644
--- a/ct/alpine-grafana.sh
+++ b/ct/alpine-grafana.sh
@@ -1,58 +1,28 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-function header_info {
- clear
- cat <<"EOF"
- ______ ____
- / ____/________ _/ __/___ _____ ____ _
- / / __/ ___/ __ / /_/ __ / __ \/ __ /
-/ /_/ / / / /_/ / __/ /_/ / / / / /_/ /
-\____/_/ \__,_/_/ \__,_/_/ /_/\__,_/
- Alpine
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Alpine-Grafana"
-var_disk="1"
+var_tags="alpine;monitoring"
var_cpu="1"
var_ram="256"
+var_disk="1"
var_os="alpine"
-var_version="3.19"
+var_version="3.20"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
diff --git a/ct/alpine-nextcloud.sh b/ct/alpine-nextcloud.sh
index f82469f90..ec1a313ea 100644
--- a/ct/alpine-nextcloud.sh
+++ b/ct/alpine-nextcloud.sh
@@ -1,57 +1,28 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-function header_info {
- clear
- cat <<"EOF"
- _ __ __ __ __ __ __ __
- / | / /__ _ __/ /______/ /___ __ ______/ / / / / /_ __/ /_
- / |/ / _ \| |/_/ __/ ___/ / __ \/ / / / __ / / /_/ / / / / __ \
- / /| / __/> /_/ /__/ / /_/ / /_/ / /_/ / / __ / /_/ / /_/ /
-/_/ |_/\___/_/|_|\__/\___/_/\____/\__,_/\__,_/ /_/ /_/\__,_/_.___/
-Alpine
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Alpine-Nextcloud"
-var_disk="2"
+var_tags="alpine;cloud"
var_cpu="2"
var_ram="1024"
+var_disk="2"
var_os="alpine"
-var_version="3.19"
+var_version="3.20"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
if [[ ! -d /usr/share/webapps/nextcloud ]]; then
msg_error "No ${APP} Installation Found!"
diff --git a/ct/alpine-vaultwarden.sh b/ct/alpine-vaultwarden.sh
index d1a1e140b..9f18067b3 100644
--- a/ct/alpine-vaultwarden.sh
+++ b/ct/alpine-vaultwarden.sh
@@ -1,58 +1,28 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-function header_info {
- clear
- cat <<"EOF"
- _ __ ____ __
-| | / /___ ___ __/ / /__ ______ __________/ /__ ____
-| | / / __ `/ / / / / __/ | /| / / __ `/ ___/ __ / _ \/ __ \
-| |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / / / /_/ / __/ / / /
-|___/\__,_/\__,_/_/\__/ |__/|__/\__,_/_/ \__,_/\___/_/ /_/
- Alpine
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Alpine-Vaultwarden"
-var_disk="0.3"
+var_tags="alpine;vault"
var_cpu="1"
var_ram="256"
+var_disk="0.3"
var_os="alpine"
-var_version="3.19"
+var_version="3.20"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
@@ -85,7 +55,7 @@ function update_script() {
sed -i "s|\"admin_token\": .*|\"admin_token\": \"${TOKEN}\",|" /var/lib/vaultwarden/config.json
fi
rc-service vaultwarden restart -q
- fi
+ fi
clear
exit
;;
diff --git a/ct/alpine-zigbee2mqtt.sh b/ct/alpine-zigbee2mqtt.sh
index 1faf4c1ee..688d513d6 100644
--- a/ct/alpine-zigbee2mqtt.sh
+++ b/ct/alpine-zigbee2mqtt.sh
@@ -1,58 +1,28 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-function header_info {
- clear
- cat <<"EOF"
- _____ _ __ ___ __ _______ ____________
-/__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/
- / / / / __ / __ \/ _ \/ _ \__/ // /|_/ / / / / / / / /
- / /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / /
-/____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/
- /____/ Alpine
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Alpine-Zigbee2MQTT"
+var_tags="alpine;zigbee;mqtt;smarthome"
var_disk="0.3"
var_cpu="1"
var_ram="256"
var_os="alpine"
-var_version="3.19"
+var_version="3.20"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
if ! apk -e info newt >/dev/null 2>&1; then
apk add -q newt
diff --git a/ct/alpine.sh b/ct/alpine.sh
index f7557342e..4b1a28bc5 100644
--- a/ct/alpine.sh
+++ b/ct/alpine.sh
@@ -1,68 +1,38 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-function header_info {
-clear
-cat <<"EOF"
- ___ __ _
- / | / /___ (_)___ ___
- / /| | / / __ \/ / __ \/ _ \
- / ___ |/ / /_/ / / / / / __/
-/_/ |_/_/ .___/_/_/ /_/\___/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Alpine"
-var_disk="0.1"
+var_tags="os;alpine"
var_cpu="1"
var_ram="512"
+var_disk="0.1"
var_os="alpine"
-var_version="3.19"
+var_version="3.20"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW="-password alpine"
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
- "1" "Check for Alpine Updates" ON \
- 3>&1 1>&2 2>&3)
+ UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 1 \
+ "1" "Check for Alpine Updates" ON \
+ 3>&1 1>&2 2>&3)
-header_info
-if [ "$UPD" == "1" ]; then
-apk update && apk upgrade
-exit;
-fi
+ header_info
+ if [ "$UPD" == "1" ]; then
+ apk update && apk upgrade
+ exit
+ fi
}
start
diff --git a/ct/apache-cassandra.sh b/ct/apache-cassandra.sh
index adf0d3e4b..0e0db07b2 100644
--- a/ct/apache-cassandra.sh
+++ b/ct/apache-cassandra.sh
@@ -1,64 +1,40 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://cassandra.apache.org/_/index.html
-function header_info {
-clear
-cat <<"EOF"
- ___ __ ______ __
- / | ____ ____ ______/ /_ ___ / ____/___ _______________ _____ ____/ /________ _
- / /| | / __ \/ __ `/ ___/ __ \/ _ \ / / / __ `/ ___/ ___/ __ `/ __ \/ __ / ___/ __ `/
- / ___ |/ /_/ / /_/ / /__/ / / / __/ / /___/ /_/ (__ |__ ) /_/ / / / / /_/ / / / /_/ /
-/_/ |_/ .___/\__,_/\___/_/ /_/\___/ \____/\__,_/____/____/\__,_/_/ /_/\__,_/_/ \__,_/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Apache-Cassandra"
-var_disk="4"
+var_tags="database;NoSQL"
var_cpu="1"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
-VERBOSE="yes"
+var_unprivileged="1"
+
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/cassandra.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/cassandra.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -66,3 +42,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/apache-couchdb.sh b/ct/apache-couchdb.sh
index ca197b92c..9f1b41599 100644
--- a/ct/apache-couchdb.sh
+++ b/ct/apache-couchdb.sh
@@ -1,64 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://couchdb.apache.org/
-function header_info {
-clear
-cat <<"EOF"
- ___ __ ______ __ ____ ____
- / | ____ ____ ______/ /_ ___ / ____/___ __ _______/ /_ / __ \/ __ )
- / /| | / __ \/ __ `/ ___/ __ \/ _ \ / / / __ \/ / / / ___/ __ \/ / / / __ |
- / ___ |/ /_/ / /_/ / /__/ / / / __/ / /___/ /_/ / /_/ / /__/ / / / /_/ / /_/ /
-/_/ |_/ .___/\__,_/\___/_/ /_/\___/ \____/\____/\__,_/\___/_/ /_/_____/_____/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Apache-CouchDB"
-var_disk="10"
+var_tags="database"
var_cpu="2"
var_ram="4096"
+var_disk="10"
var_os="debian"
var_version="12"
-VERBOSE="yes"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/couchdb.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/couchdb.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -66,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5984/_utils/${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5984/_utils/${CL}"
diff --git a/ct/apache-guacamole.sh b/ct/apache-guacamole.sh
new file mode 100644
index 000000000..96df515fd
--- /dev/null
+++ b/ct/apache-guacamole.sh
@@ -0,0 +1,47 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/refs/heads/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: Michel Roegl-Brunner (michelroegl-brunner)
+# License: | MIT https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://guacamole.apache.org/
+
+#App Default Values
+APP="Apache-Guacamole"
+TAGS="webserver;remote"
+var_disk="4"
+var_cpu="1"
+var_ram="2048"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/apache-guacamole ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "Ther is currently no automatic update function for ${APP}."
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/guacamole${CL}"
+
diff --git a/ct/apt-cacher-ng.sh b/ct/apt-cacher-ng.sh
index 46c76bb7a..52182d22a 100644
--- a/ct/apt-cacher-ng.sh
+++ b/ct/apt-cacher-ng.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://wiki.debian.org/AptCacherNg
-function header_info {
-clear
-cat <<"EOF"
- ___ __ ______ __ _ ________
- / | ____ / /_ / ____/___ ______/ /_ ___ _____ / | / / ____/
- / /| | / __ \/ __/__/ / / __ `/ ___/ __ \/ _ \/ ___/__/ |/ / / __
- / ___ |/ /_/ / /_/__/ /___/ /_/ / /__/ / / / __/ / /__/ /| / /_/ /
-/_/ |_/ .___/\__/ \____/\__,_/\___/_/ /_/\___/_/ /_/ |_/\____/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Apt-Cacher-NG"
-var_disk="2"
+var_tags="caching"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} maintenance page should be reachable by going to the following URL.
- ${BL}http://${IP}:3142/acng-report.html${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3142/acng-report.html{CL}"
diff --git a/ct/archivebox.sh b/ct/archivebox.sh
index cc9542bf6..1a6e2b745 100644
--- a/ct/archivebox.sh
+++ b/ct/archivebox.sh
@@ -1,80 +1,53 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://archivebox.io/
-function header_info {
-clear
-cat <<"EOF"
- ___ __ _ ____
- / | __________/ /_ (_) _____ / __ )____ _ __
- / /| | / ___/ ___/ __ \/ / | / / _ \/ __ / __ \| |/_/
- / ___ |/ / / /__/ / / / /| |/ / __/ /_/ / /_/ /> <
-/_/ |_/_/ \___/_/ /_/_/ |___/\___/_____/\____/_/|_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="ArchiveBox"
-var_disk="8"
+var_tags="archive;bookmark"
var_cpu="2"
var_ram="1024"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/archivebox ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-msg_info "Stopping ${APP}"
-systemctl stop archivebox
-msg_ok "Stopped ${APP}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/archivebox ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop archivebox
+ msg_ok "Stopped ${APP}"
-msg_info "Updating ${APP}"
-cd /opt/archivebox/data
-pip install --upgrade --ignore-installed archivebox
-sudo -u archivebox archivebox init
-msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP}"
+ cd /opt/archivebox/data
+ pip install --upgrade --ignore-installed archivebox
+ sudo -u archivebox archivebox init
+ msg_ok "Updated ${APP}"
-msg_info "Starting ${APP}"
-systemctl start archivebox
-msg_ok "Started ${APP}"
+ msg_info "Starting ${APP}"
+ systemctl start archivebox
+ msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -82,5 +55,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8000/admin/login${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000/admin/login${CL}"
diff --git a/ct/aria2.sh b/ct/aria2.sh
index 35a968c38..af1bd8185 100644
--- a/ct/aria2.sh
+++ b/ct/aria2.sh
@@ -1,64 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://aria2.github.io/
-function header_info {
-clear
-cat <<"EOF"
- ___ _ ___
- / | _____(_)___ |__ \
- / /| | / ___/ / __ `/_/ /
- / ___ |/ / / / /_/ / __/
-/_/ |_/_/ /_/\__,_/____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Aria2"
-var_disk="8"
+var_tags="download-utility"
var_cpu="2"
-var_ram="1028"
+var_ram="1024"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -66,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:6880${CL}"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6880${CL}"
diff --git a/ct/audiobookshelf.sh b/ct/audiobookshelf.sh
index f362184a9..8c8770f11 100644
--- a/ct/audiobookshelf.sh
+++ b/ct/audiobookshelf.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.audiobookshelf.org/
-function header_info {
-clear
-cat <<"EOF"
- ___ __ __ __ ______
- ____ ___ ______/ (_)___ / /_ ____ ____ / /_______/ /_ ___ / / __/
- / __ `/ / / / __ / / __ \/ __ \/ __ \/ __ \/ //_/ ___/ __ \/ _ \/ / /_
-/ /_/ / /_/ / /_/ / / /_/ / /_/ / /_/ / /_/ / ,< (__ ) / / / __/ / __/
-\__,_/\__,_/\__,_/_/\____/_.___/\____/\____/_/|_/____/_/ /_/\___/_/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="audiobookshelf"
-var_disk="4"
+var_tags="podcast;audiobook"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/trusted.gpg.d/audiobookshelf-ppa.asc ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-echo "This application receives updates through the APT package manager."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/trusted.gpg.d/audiobookshelf-ppa.asc ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ echo "This application receives updates through the APT package manager."
+ exit
}
start
@@ -64,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:13378${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:13378${CL}"
diff --git a/ct/authentik.sh b/ct/authentik.sh
new file mode 100644
index 000000000..6ea956ed2
--- /dev/null
+++ b/ct/authentik.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: remz1337
+# License: MIT
+# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+
+# App Default Values
+APP="Authentik"
+var_tags="identity-provider"
+var_disk="15"
+var_cpu="6"
+var_ram="8192"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/authentik-server.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/goauthentik/authentik/releases/latest | grep "tarball_url" | awk '{print substr($2, 2, length($2)-3)}')
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop authentik-server
+ systemctl stop authentik-worker
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Building ${APP} website"
+ mkdir -p /opt/authentik
+ wget -qO authentik.tar.gz "${RELEASE}"
+ tar -xzf authentik.tar.gz -C /opt/authentik --strip-components 1 --overwrite
+ rm -rf authentik.tar.gz
+ cd /opt/authentik/website
+ npm install &>/dev/null
+ npm run build-bundled &>/dev/null
+ cd /opt/authentik/web
+ npm install &>/dev/null
+ npm run build &>/dev/null
+ msg_ok "Built ${APP} website"
+
+ msg_info "Installing Python Dependencies"
+ cd /opt/authentik
+ poetry install --only=main --no-ansi --no-interaction --no-root &>/dev/null
+ poetry export --without-hashes --without-urls -f requirements.txt --output requirements.txt &>/dev/null
+ pip install --no-cache-dir -r requirements.txt &>/dev/null
+ pip install . &>/dev/null
+ msg_ok "Installed Python Dependencies"
+
+ msg_info "Updating ${APP} to v${RELEASE} (Patience)"
+ cp -r /opt/authentik/authentik/blueprints /opt/authentik/blueprints
+ bash /opt/authentik/lifecycle/ak migrate &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting ${APP}"
+ systemctl start authentik-server
+ systemctl start authentik-worker
+ msg_ok "Started ${APP}"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000/if/flow/initial-setup/${CL}"
diff --git a/ct/autobrr.sh b/ct/autobrr.sh
index f4c0f0868..5497fb256 100644
--- a/ct/autobrr.sh
+++ b/ct/autobrr.sh
@@ -1,76 +1,53 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://autobrr.com/
-function header_info {
-clear
-cat <<"EOF"
- ___ __ __
- / | __ __/ /_____ / /_ __________
- / /| |/ / / / __/ __ \/ __ \/ ___/ ___/
- / ___ / /_/ / /_/ /_/ / /_/ / / / /
-/_/ |_\__,_/\__/\____/_.___/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Autobrr"
-var_disk="8"
+var_tags="arr;"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /root/.config/autobrr/config.toml ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Stopping ${APP} LXC"
-systemctl stop autobrr.service
-msg_ok "Stopped ${APP} LXC"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /root/.config/autobrr/config.toml ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP} LXC"
+ systemctl stop autobrr.service
+ msg_ok "Stopped ${APP} LXC"
-msg_info "Updating ${APP} LXC"
-rm -rf /usr/local/bin/*
-wget -q $(curl -s https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_arm64 | cut -d\" -f4)
-tar -C /usr/local/bin -xzf autobrr*.tar.gz
-rm -rf autobrr*.tar.gz
-msg_ok "Updated ${APP} LXC"
+ msg_info "Updating ${APP} LXC"
+ rm -rf /usr/local/bin/*
+ wget -q $(curl -s https://api.github.com/repos/autobrr/autobrr/releases/latest | grep download | grep linux_x86_64 | cut -d\" -f4)
+ tar -C /usr/local/bin -xzf autobrr*.tar.gz
+ rm -rf autobrr*.tar.gz
+ msg_ok "Updated ${APP} LXC"
-msg_info "Starting ${APP} LXC"
-systemctl start autobrr.service
-msg_ok "Started ${APP} LXC"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ${APP} LXC"
+ systemctl start autobrr.service
+ msg_ok "Started ${APP} LXC"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -78,5 +55,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:7474${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7474${CL}"
\ No newline at end of file
diff --git a/ct/bazarr.sh b/ct/bazarr.sh
index adc795242..fd646e614 100755
--- a/ct/bazarr.sh
+++ b/ct/bazarr.sh
@@ -1,64 +1,38 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.bazarr.media/
-function header_info {
-clear
-cat <<"EOF"
- ____
- / __ )____ _____ ____ ___________
- / __ / __ `/_ / / __ `/ ___/ ___/
- / /_/ / /_/ / / /_/ /_/ / / / /
-/_____/\__,_/ /___/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Bazarr"
-var_disk="4"
+var_tags="arr"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var/lib/bazarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var/lib/bazarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
exit
}
@@ -67,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:6767${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6767${CL}"
\ No newline at end of file
diff --git a/ct/blocky.sh b/ct/blocky.sh
index ef9d69318..494e51c0b 100644
--- a/ct/blocky.sh
+++ b/ct/blocky.sh
@@ -1,65 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://0xerr0r.github.io/blocky/latest/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ __
- / __ )/ /___ _____/ /____ __
- / __ / / __ \/ ___/ //_/ / / /
- / /_/ / / /_/ / /__/ ,< / /_/ /
-/_____/_/\____/\___/_/|_|\__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Blocky"
-var_disk="2"
+var_tags="adblock"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,3 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"
\ No newline at end of file
diff --git a/ct/bookstack.sh b/ct/bookstack.sh
new file mode 100644
index 000000000..e8b6aa169
--- /dev/null
+++ b/ct/bookstack.sh
@@ -0,0 +1,82 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/BookStackApp/BookStack
+
+# App Default Values
+APP="Bookstack"
+var_tags="organizer"
+var_cpu="1"
+var_ram="1024"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/bookstack ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/BookStackApp/BookStack/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Apache2"
+ systemctl stop apache2
+ msg_ok "Services Stopped"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ mv /opt/bookstack /opt/bookstack-backup
+ wget -q --directory-prefix=/opt "https://github.com/BookStackApp/BookStack/archive/refs/tags/v${RELEASE}.zip"
+ unzip -q /opt/v${RELEASE}.zip -d /opt
+ mv /opt/BookStack-${RELEASE} /opt/bookstack
+ cp /opt/bookstack-backup/.env /opt/bookstack/.env
+ cp -r /opt/bookstack-backup/public/uploads/ /opt/bookstack/public/uploads
+ cp -r /opt/bookstack-backup/storage/uploads/ /opt/bookstack/storage/uploads
+ cp -r /opt/bookstack-backup/themes/ /opt/bookstack/themes
+ cd /opt/bookstack
+ COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev &>/dev/null
+ php artisan migrate --force &>/dev/null
+ chown www-data:www-data -R /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
+ chmod -R 755 /opt/bookstack /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads /opt/bookstack/storage
+ chmod -R 775 /opt/bookstack/storage /opt/bookstack/bootstrap/cache /opt/bookstack/public/uploads
+ chmod -R 640 /opt/bookstack/.env
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting Apache2"
+ systemctl start apache2
+ msg_ok "Started Apache2"
+
+ msg_info "Cleaning Up"
+ rm -rf /opt/bookstack-backup
+ rm -rf /opt/v${RELEASE}.zip
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
diff --git a/ct/bunkerweb.sh b/ct/bunkerweb.sh
index 4f2508436..bd5a0b252 100644
--- a/ct/bunkerweb.sh
+++ b/ct/bunkerweb.sh
@@ -1,63 +1,36 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.bunkerweb.io/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ _ __ __
- / __ )__ ______ / /_____ ____| | / /__ / /_
- / __ / / / / __ \/ //_/ _ \/ ___/ | /| / / _ \/ __ \
- / /_/ / /_/ / / / / ,< / __/ / | |/ |/ / __/ /_/ /
-/_____/\__,_/_/ /_/_/|_|\___/_/ |__/|__/\___/_.___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="BunkerWeb"
-var_disk="4"
+var_tags="webserver"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /etc/bunkerweb ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-
-RELEASE=$(curl -s https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/bunkerweb ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ RELEASE=$(curl -s https://api.github.com/repos/bunkerity/bunkerweb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating ${APP} to ${RELEASE}"
cat </etc/apt/preferences.d/bunkerweb
@@ -82,5 +55,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} setup should be reachable by going to the following URL.
- ${BL}http://${IP}/setup${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/setup${CL}"
\ No newline at end of file
diff --git a/ct/caddy.sh b/ct/caddy.sh
index f4e8d0410..5afc686d0 100644
--- a/ct/caddy.sh
+++ b/ct/caddy.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://caddyserver.com/
-function header_info {
-clear
-cat <<"EOF"
- ______ __ __
- / ____/___ _____/ /___/ /_ __
- / / / __ `/ __ / __ / / / /
-/ /___/ /_/ / /_/ / /_/ / /_/ /
-\____/\__,_/\__,_/\__,_/\__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Caddy"
-var_disk="2"
+var_tags="webserver"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /etc/caddy ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/caddy ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,3 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:80${CL}"
\ No newline at end of file
diff --git a/ct/calibre-web.sh b/ct/calibre-web.sh
index 120cf942b..2d8849d17 100644
--- a/ct/calibre-web.sh
+++ b/ct/calibre-web.sh
@@ -1,70 +1,46 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# Co-Author: remz1337
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck (tteckster) | Co-Author: remz1337
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/janeczku/calibre-web
-function header_info {
-clear
-cat <<"EOF"
- ______ ___ __ _ __ __
- / ____/___ _/ (_) /_ ________ | | / /__ / /_
- / / / __ `/ / / __ \/ ___/ _ \___| | /| / / _ \/ __ \
-/ /___/ /_/ / / / /_/ / / / __/___/ |/ |/ / __/ /_/ /
-\____/\__,_/_/_/_.___/_/ \___/ |__/|__/\___/_.___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Calibre-Web"
-var_disk="4"
+var_tags="eBook"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
if [[ ! -f /etc/systemd/system/cps.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
- header_info
- msg_info "Updating $APP LXC"
+ msg_info "Stopping ${APP}"
systemctl stop cps
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP}"
cd /opt/kepubify
- rm kepubify-linux-arm64
- curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-arm64 &>/dev/null
- chmod +x kepubify-linux-arm64
+ rm -rf kepubify-linux-64bit
+ curl -fsSLO https://github.com/pgaskin/kepubify/releases/latest/download/kepubify-linux-64bit
+ chmod +x kepubify-linux-64bit
menu_array=("1" "Enables gdrive as storage backend for your ebooks" OFF \
"2" "Enables sending emails via a googlemail account without enabling insecure apps" OFF \
"3" "Enables displaying of additional author infos on the authors page" OFF \
@@ -72,33 +48,33 @@ function update_script() {
"5" "Enables login via google or github oauth" OFF \
"6" "Enables extracting of metadata from epub, fb2, pdf files, and also extraction of covers from cbr, cbz, cbt files" OFF \
"7" "Enables extracting of metadata from cbr, cbz, cbt files" OFF \
- "8" "Enables syncing with your kobo reader" OFF )
+ "8" "Enables syncing with your kobo reader" OFF)
if [ -f "/opt/calibre-web/options.txt" ]; then
cps_options="$(cat /opt/calibre-web/options.txt)"
- IFS=',' read -ra ADDR <<< "$cps_options"
+ IFS=',' read -ra ADDR <<<"$cps_options"
for i in "${ADDR[@]}"; do
- if [ $i == "gdrive" ]; then
- line=0
- elif [ $i == "gmail" ]; then
- line=1
- elif [ $i == "goodreads" ]; then
- line=2
- elif [ $i == "ldap" ]; then
- line=3
- elif [ $i == "oauth" ]; then
- line=4
- elif [ $i == "metadata" ]; then
- line=5
- elif [ $i == "comics" ]; then
- line=6
- elif [ $i == "kobo" ]; then
- line=7
- fi
- array_index=$(( 3*line + 2 ))
+ if [ $i == "gdrive" ]; then
+ line=0
+ elif [ $i == "gmail" ]; then
+ line=1
+ elif [ $i == "goodreads" ]; then
+ line=2
+ elif [ $i == "ldap" ]; then
+ line=3
+ elif [ $i == "oauth" ]; then
+ line=4
+ elif [ $i == "metadata" ]; then
+ line=5
+ elif [ $i == "comics" ]; then
+ line=6
+ elif [ $i == "kobo" ]; then
+ line=7
+ fi
+ array_index=$((3 * line + 2))
menu_array[$array_index]=ON
done
fi
- if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
+ if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID >/dev/null; then kill $SPINNER_PID >/dev/null; fi
CHOICES=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "CALIBRE-WEB OPTIONS" --separate-output --checklist "Choose Additional Options" 15 125 8 "${menu_array[@]}" 3>&1 1>&2 2>&3)
spinner &
SPINNER_PID=$!
@@ -107,29 +83,29 @@ function update_script() {
for CHOICE in $CHOICES; do
case "$CHOICE" in
"1")
- options+=( gdrive )
+ options+=(gdrive)
;;
"2")
- options+=( gmail )
+ options+=(gmail)
;;
"3")
- options+=( goodreads )
+ options+=(goodreads)
;;
"4")
- options+=( ldap )
+ options+=(ldap)
apt-get install -qqy libldap2-dev libsasl2-dev
;;
"5")
- options+=( oauth )
+ options+=(oauth)
;;
"6")
- options+=( metadata )
+ options+=(metadata)
;;
"7")
- options+=( comics )
+ options+=(comics)
;;
"8")
- options+=( kobo )
+ options+=(kobo)
;;
*)
echo "Unsupported item $CHOICE!" >&2
@@ -138,16 +114,22 @@ function update_script() {
esac
done
fi
- if [ ! -z "$options" ] && [ ${#options[@]} -gt 0 ]; then
- cps_options=$(IFS=, ; echo "${options[*]}")
- echo $cps_options > /opt/calibre-web/options.txt
- pip install --upgrade calibreweb[$cps_options]
+ if [ ${#options[@]} -gt 0 ]; then
+ cps_options=$(
+ IFS=,
+ echo "${options[*]}"
+ )
+ echo $cps_options >/opt/calibre-web/options.txt
+ pip install --upgrade calibreweb[$cps_options] &>/dev/null
else
- rm /opt/calibre-web/options.txt 2> /dev/null
- pip install --upgrade calibreweb
+ rm -rf /opt/calibre-web/options.txt
+ pip install --upgrade calibreweb &>/dev/null
fi
+
+ msg_info "Starting ${APP}"
systemctl start cps
- msg_ok "Updated $APP LXC"
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
exit
}
@@ -155,10 +137,7 @@ start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 512
-pct set $CTID -cores 1
-msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8083${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"
diff --git a/ct/casaos.sh b/ct/casaos.sh
index d23937eff..050290a3b 100644
--- a/ct/casaos.sh
+++ b/ct/casaos.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://casaos.io/
-function header_info {
-clear
-cat <<"EOF"
- ______ ____ _____
- / ____/___ __________ _/ __ \/ ___/
- / / / __ `/ ___/ __ `/ / / /\__ \
-/ /___/ /_/ (__ ) /_/ / /_/ /___/ /
-\____/\__,_/____/\__,_/\____//____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="CasaOS"
-var_disk="8"
+var_tags="cloud"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated ${APP} LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP} ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/changedetection.sh b/ct/changedetection.sh
index 030821b4a..86901e7d6 100644
--- a/ct/changedetection.sh
+++ b/ct/changedetection.sh
@@ -1,81 +1,75 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://changedetection.io/
-function header_info {
-clear
-cat <<"EOF"
- ________ ____ __ __ _
- / ____/ /_ ____ _____ ____ ____ / __ \___ / /____ _____/ /_(_)___ ____
- / / / __ \/ __ `/ __ \/ __ `/ _ \ / / / / _ \/ __/ _ \/ ___/ __/ / __ \/ __ \
-/ /___/ / / / /_/ / / / / /_/ / __/ / /_/ / __/ /_/ __/ /__/ /_/ / /_/ / / / /
-\____/_/ /_/\__,_/_/ /_/\__, /\___/ /_____/\___/\__/\___/\___/\__/_/\____/_/ /_/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Change Detection"
-var_disk="8"
+var_tags="monitoring;crawler"
var_cpu="2"
var_ram="1024"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/changedetection.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
- apt-get update
- apt-get install -y libjpeg-dev
-fi
-pip3 install changedetection.io --upgrade &>/dev/null
-pip3 install playwright --upgrade &>/dev/null
-if [[ -f /etc/systemd/system/browserless.service ]]; then
- git -C /opt/browserless/ fetch --all &>/dev/null
- git -C /opt/browserless/ reset --hard origin/main &>/dev/null
- npm update --prefix /opt/browserless &>/dev/null
- npm run build --prefix /opt/browserless &>/dev/null
- npm run build:function --prefix /opt/browserless &>/dev/null
- npm prune production --prefix /opt/browserless &>/dev/null
- systemctl restart browserless
-else
- msg_error "No Browserless Installation Found!"
-fi
-systemctl restart changedetection
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+
+ if [[ ! -f /etc/systemd/system/changedetection.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ if ! dpkg -s libjpeg-dev >/dev/null 2>&1; then
+ msg_info "Installing Dependencies"
+ apt-get update
+ apt-get install -y libjpeg-dev
+ msg_ok "Updated Dependencies"
+ fi
+
+ msg_info "Updating ${APP}"
+ pip3 install changedetection.io --upgrade &>/dev/null
+ msg_ok "Updated ${APP}"
+
+ msg_info "Updating Playwright"
+ pip3 install playwright --upgrade &>/dev/null
+ msg_ok "Updated Playwright"
+
+ if [[ -f /etc/systemd/system/browserless.service ]]; then
+ msg_info "Updating Browserless (Patience)"
+ git -C /opt/browserless/ fetch --all &>/dev/null
+ git -C /opt/browserless/ reset --hard origin/main &>/dev/null
+ npm update --prefix /opt/browserless &>/dev/null
+ /opt/browserless/node_modules/playwright-core/cli.js install --with-deps &>/dev/null
+ # Update Chrome separately, as it has to be done with the force option. Otherwise the installation of other browsers will not be done if Chrome is already installed.
+ /opt/browserless/node_modules/playwright-core/cli.js install --force chrome &>/dev/null
+ /opt/browserless/node_modules/playwright-core/cli.js install chromium firefox webkit &>/dev/null
+ npm run build --prefix /opt/browserless &>/dev/null
+ npm run build:function --prefix /opt/browserless &>/dev/null
+ npm prune production --prefix /opt/browserless &>/dev/null
+ systemctl restart browserless
+ msg_ok "Updated Browserless"
+ else
+ msg_error "No Browserless Installation Found!"
+ fi
+
+ systemctl restart changedetection
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -83,5 +77,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
diff --git a/ct/channels.sh b/ct/channels.sh
index 18fa63a40..8d09ab4d6 100644
--- a/ct/channels.sh
+++ b/ct/channels.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://getchannels.com/dvr-server/
-function header_info {
-clear
-cat <<"EOF"
- ________ __ ____ _ ______ _____
- / ____/ /_ ____ _____ ____ ___ / /____ / __ \ | / / __ \ / ___/___ ______ _____ _____
- / / / __ \/ __ `/ __ \/ __ \/ _ \/ / ___/ / / / / | / / /_/ / \__ \/ _ \/ ___/ | / / _ \/ ___/
-/ /___/ / / / /_/ / / / / / / / __/ (__ ) / /_/ /| |/ / _, _/ ___/ / __/ / | |/ / __/ /
-\____/_/ /_/\__,_/_/ /_/_/ /_/\___/_/____/ /_____/ |___/_/ |_| /____/\___/_/ |___/\___/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Channels"
-var_disk="8"
+var_tags="dvr"
var_cpu="2"
var_ram="1024"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/channels-dvr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/channels-dvr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -64,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8089 ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8089${CL}"
\ No newline at end of file
diff --git a/ct/checkmk.sh b/ct/checkmk.sh
new file mode 100644
index 000000000..4a08f504a
--- /dev/null
+++ b/ct/checkmk.sh
@@ -0,0 +1,59 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: Michel Roegl-Brunner (michelroegl-brunner)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://checkmk.com/
+
+APP="checkmk"
+var_tags="monitoring"
+var_cpu="2"
+var_ram="2048"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+header_info "$APP"
+base_settings
+
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /opt/checkmk_version.txt ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -fsSL https://api.github.com/repos/checkmk/checkmk/tags | grep "name" | awk '{print substr($2, 3, length($2)-4) }' | grep -v "*-rc" | tail -n +2 | head -n 1)
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Updating ${APP} to v${RELEASE}"
+ omd stop monitoring &>/dev/null
+ omd cp monitoring monitoringbackup &>/dev/null
+ wget -q https://download.checkmk.com/checkmk/${RELEASE}/check-mk-raw-${RELEASE}_0.bookworm_amd64.deb -O /opt/checkmk.deb
+ apt-get install -y /opt/checkmk.deb &>/dev/null
+ omd --force -V ${RELEASE}.cre update --conflict=install monitoring &>/dev/null
+ omd start monitoring &>/dev/null
+ omd -f rm monitoringbackup &>/dev/null
+ omd cleanup &>/dev/null
+ rm -rf /opt/checkmk.deb
+ msg_ok "Updated ${APP} to v${RELEASE}"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}."
+ fi
+
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/monitoring${CL}"
diff --git a/ct/cloudflared.sh b/ct/cloudflared.sh
index 91d2ea41d..c3a43cb2e 100644
--- a/ct/cloudflared.sh
+++ b/ct/cloudflared.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.cloudflare.com/
-function header_info {
-clear
-cat <<"EOF"
- ________ ________ __
- / ____/ /___ __ ______/ / __/ /___ _________ ____/ /
- / / / / __ \/ / / / __ / /_/ / __ `/ ___/ _ \/ __ /
-/ /___/ / /_/ / /_/ / /_/ / __/ / /_/ / / / __/ /_/ /
-\____/_/\____/\__,_/\__,_/_/ /_/\__,_/_/ \___/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Cloudflared"
-var_disk="2"
+var_tags="network;cloudflare"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,3 +44,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/cockpit.sh b/ct/cockpit.sh
index d6ac3c731..265f3de2f 100644
--- a/ct/cockpit.sh
+++ b/ct/cockpit.sh
@@ -1,119 +1,92 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: havardthom
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck | Co-Author: havardthom
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://cockpit-project.org/
-function header_info {
-clear
-cat <<"EOF"
- ______ __ _ __
- / ____/___ _____/ /______ (_) /_
- / / / __ \/ ___/ //_/ __ \/ / __/
-/ /___/ /_/ / /__/ ,< / /_/ / / /_
-\____/\____/\___/_/|_/ .___/_/\__/
- /_/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Cockpit"
-var_disk="4"
+var_tags="monitoring;network"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-if [[ ! -d /etc/cockpit ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
- "1" "Update LXC" ON \
- "2" "Install cockpit-file-sharing" OFF \
- "3" "Install cockpit-identities" OFF \
- "4" "Install cockpit-navigator" OFF \
- 3>&1 1>&2 2>&3)
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/cockpit ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
+ "1" "Update LXC" ON \
+ "2" "Install cockpit-file-sharing" OFF \
+ "3" "Install cockpit-identities" OFF \
+ "4" "Install cockpit-navigator" OFF \
+ 3>&1 1>&2 2>&3)
-header_info
-if [ "$UPD" == "1" ]; then
- msg_info "Updating ${APP} LXC"
- apt-get update &>/dev/null
- apt-get -y upgrade &>/dev/null
- msg_ok "Updated ${APP} LXC"
- exit
-fi
-if [ "$UPD" == "2" ]; then
- msg_info "Installing dependencies (patience)"
- apt-get install -y attr &>/dev/null
- apt-get install -y nfs-kernel-server &>/dev/null
- apt-get install -y samba &>/dev/null
- apt-get install -y samba-common-bin &>/dev/null
- apt-get install -y winbind &>/dev/null
- apt-get install -y gawk &>/dev/null
- msg_ok "Installed dependencies"
- msg_info "Installing Cockpit file sharing"
- LATEST=$(curl -s https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
- wget -q https://github.com/45Drives/cockpit-file-sharing/releases/download/v${LATEST}/cockpit-file-sharing_${LATEST}-1focal_all.deb
- dpkg -i cockpit-file-sharing_${LATEST}-1focal_all.deb &>/dev/null
- rm cockpit-file-sharing_${LATEST}-1focal_all.deb
- msg_ok "Installed Cockpit file sharing"
- exit
-fi
-if [ "$UPD" == "3" ]; then
- msg_info "Installing dependencies (patience)"
- apt-get install -y psmisc &>/dev/null
- apt-get install -y samba &>/dev/null
- apt-get install -y samba-common-bin &>/dev/null
- msg_ok "Installed dependencies"
- msg_info "Installing Cockpit identities"
- LATEST=$(curl -s https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
- wget -q https://github.com/45Drives/cockpit-identities/releases/download/v${LATEST}/cockpit-identities_${LATEST}-1focal_all.deb
- dpkg -i cockpit-identities_${LATEST}-1focal_all.deb &>/dev/null
- rm cockpit-identities_${LATEST}-1focal_all.deb
- msg_ok "Installed Cockpit identities"
- exit
-fi
-if [ "$UPD" == "4" ]; then
- msg_info "Installing dependencies"
- apt-get install -y rsync &>/dev/null
- apt-get install -y zip &>/dev/null
- msg_ok "Installed dependencies"
- msg_info "Installing Cockpit navigator"
- LATEST=$(curl -s https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
- wget -q https://github.com/45Drives/cockpit-navigator/releases/download/v${LATEST}/cockpit-navigator_${LATEST}-1focal_all.deb
- dpkg -i cockpit-navigator_${LATEST}-1focal_all.deb &>/dev/null
- rm cockpit-navigator_${LATEST}-1focal_all.deb
- msg_ok "Installed Cockpit navigator"
- exit
-fi
+ if [ "$UPD" == "1" ]; then
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
+ fi
+ if [ "$UPD" == "2" ]; then
+ msg_info "Installing dependencies (patience)"
+ apt-get install -y attr &>/dev/null
+ apt-get install -y nfs-kernel-server &>/dev/null
+ apt-get install -y samba &>/dev/null
+ apt-get install -y samba-common-bin &>/dev/null
+ apt-get install -y winbind &>/dev/null
+ apt-get install -y gawk &>/dev/null
+ msg_ok "Installed dependencies"
+ msg_info "Installing Cockpit file sharing"
+ wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-file-sharing/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
+ dpkg -i cockpit-file-sharing_*focal_all.deb &>/dev/null
+ rm cockpit-file-sharing_*focal_all.deb
+ msg_ok "Installed Cockpit file sharing"
+ exit
+ fi
+ if [ "$UPD" == "3" ]; then
+ msg_info "Installing dependencies (patience)"
+ apt-get install -y psmisc &>/dev/null
+ apt-get install -y samba &>/dev/null
+ apt-get install -y samba-common-bin &>/dev/null
+ msg_ok "Installed dependencies"
+ msg_info "Installing Cockpit identities"
+ wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-identities/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
+ dpkg -i cockpit-identities_*focal_all.deb &>/dev/null
+ rm cockpit-identities_*focal_all.deb
+ msg_ok "Installed Cockpit identities"
+ exit
+ fi
+ if [ "$UPD" == "4" ]; then
+ msg_info "Installing dependencies"
+ apt-get install -y rsync &>/dev/null
+ apt-get install -y zip &>/dev/null
+ msg_ok "Installed dependencies"
+ msg_info "Installing Cockpit navigator"
+ wget -q $(curl -s https://api.github.com/repos/45Drives/cockpit-navigator/releases/latest | grep download | grep focal_all.deb | cut -d\" -f4)
+ dpkg -i cockpit-navigator_*focal_all.deb &>/dev/null
+ rm cockpit-navigator_*focal_all.deb
+ msg_ok "Installed Cockpit navigator"
+ exit
+ fi
}
start
@@ -121,5 +94,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:9090${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9090${CL}"
\ No newline at end of file
diff --git a/ct/commafeed.sh b/ct/commafeed.sh
index 738a98da7..59d9f44c3 100644
--- a/ct/commafeed.sh
+++ b/ct/commafeed.sh
@@ -1,82 +1,59 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.commafeed.com/#/welcome
-function header_info {
-clear
-cat <<"EOF"
- ______ ______ __
- / ____/___ ____ ___ ____ ___ ____ _/ ____/__ ___ ____/ /
- / / / __ \/ __ `__ \/ __ `__ \/ __ `/ /_ / _ \/ _ \/ __ /
-/ /___/ /_/ / / / / / / / / / / / /_/ / __/ / __/ __/ /_/ /
-\____/\____/_/ /_/ /_/_/ /_/ /_/\__,_/_/ \___/\___/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="CommaFeed"
-var_disk="4"
+var_tags="rss-reader"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/commafeed ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -sL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop commafeed
- msg_ok "Stopped ${APP}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/commafeed ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -sL https://api.github.com/repos/Athou/commafeed/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop commafeed
+ msg_ok "Stopped ${APP}"
- msg_info "Updating ${APP} to ${RELEASE}"
- wget -q https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip
- unzip -q commafeed-${RELEASE}-h2-jvm.zip
- rsync -a --exclude 'data/' commafeed-${RELEASE}-h2/ /opt/commafeed/
- rm -rf commafeed-${RELEASE}-h2 commafeed-${RELEASE}-h2-jvm.zip
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ wget -q https://github.com/Athou/commafeed/releases/download/${RELEASE}/commafeed-${RELEASE}-h2-jvm.zip
+ unzip -q commafeed-${RELEASE}-h2-jvm.zip
+ rsync -a --exclude 'data/' commafeed-${RELEASE}-h2/ /opt/commafeed/
+ rm -rf commafeed-${RELEASE}-h2 commafeed-${RELEASE}-h2-jvm.zip
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
- msg_info "Starting ${APP}"
- systemctl start commafeed
- msg_ok "Started ${APP}"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Starting ${APP}"
+ systemctl start commafeed
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -84,5 +61,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8082${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8082${CL}"
diff --git a/ct/create_lxc.sh b/ct/create_lxc.sh
index 6da46a871..46f529021 100644
--- a/ct/create_lxc.sh
+++ b/ct/create_lxc.sh
@@ -2,22 +2,33 @@
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
+# Co-Author: MickLesk
# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# This sets verbose mode if the global variable is set to "yes"
# if [ "$VERBOSE" == "yes" ]; then set -x; fi
# This function sets color variables for formatting output in the terminal
+# Colors
YW=$(echo "\033[33m")
+YWB=$(echo "\033[93m")
BL=$(echo "\033[36m")
RD=$(echo "\033[01;31m")
GN=$(echo "\033[1;92m")
+
+# Formatting
CL=$(echo "\033[m")
-CM="${GN}✓${CL}"
-CROSS="${RD}✗${CL}"
+UL=$(echo "\033[4m")
+BOLD=$(echo "\033[1m")
BFR="\\r\\033[K"
HOLD=" "
+TAB=" "
+
+# Icons
+CM="${TAB}✔️${TAB}${CL}"
+CROSS="${TAB}✖️${TAB}${CL}"
+INFO="${TAB}💡${TAB}${CL}"
# This sets error handling options and defines the error_handler function to handle errors
set -Eeuo pipefail
@@ -36,19 +47,24 @@ function error_handler() {
# This function displays a spinner.
function spinner() {
- local chars="/-\|"
- local spin_i=0
- printf "\e[?25l"
- while true; do
- printf "\r \e[36m%s\e[0m" "${chars:spin_i++%${#chars}:1}"
- sleep 0.1
- done
+ local frames=('⠋' '⠙' '⠹' '⠸' '⠼' '⠴' '⠦' '⠧' '⠇' '⠏')
+ local spin_i=0
+ local interval=0.1
+ printf "\e[?25l"
+
+ local color="${YWB}"
+
+ while true; do
+ printf "\r ${color}%s${CL}" "${frames[spin_i]}"
+ spin_i=$(( (spin_i + 1) % ${#frames[@]} ))
+ sleep "$interval"
+ done
}
# This function displays an informational message with a yellow color.
function msg_info() {
local msg="$1"
- echo -ne " ${HOLD} ${YW}${msg} "
+ echo -ne "${TAB}${YW}${HOLD}${msg}${HOLD}"
spinner &
SPINNER_PID=$!
}
@@ -58,7 +74,7 @@ function msg_ok() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
printf "\e[?25h"
local msg="$1"
- echo -e "${BFR} ${CM} ${GN}${msg}${CL}"
+ echo -e "${BFR}${CM}${GN}${msg}${CL}"
}
# This function displays a error message with a red color.
@@ -66,7 +82,7 @@ function msg_error() {
if [ -n "$SPINNER_PID" ] && ps -p $SPINNER_PID > /dev/null; then kill $SPINNER_PID > /dev/null; fi
printf "\e[?25h"
local msg="$1"
- echo -e "${BFR} ${CROSS} ${RD}${msg}${CL}"
+ echo -e "${BFR}${CROSS}${RD}${msg}${CL}"
}
# This checks for the presence of valid Container Storage and Template Storage locations
@@ -105,7 +121,7 @@ function select_storage() {
local TAG=$(echo $line | awk '{print $1}')
local TYPE=$(echo $line | awk '{printf "%-10s", $2}')
local FREE=$(echo $line | numfmt --field 4-6 --from-unit=K --to=iec --format %.2f | awk '{printf( "%9sB", $6)}')
- local ITEM=" Type: $TYPE Free: $FREE "
+ local ITEM="Type: $TYPE Free: $FREE "
local OFFSET=2
if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then
local MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET))
@@ -123,11 +139,14 @@ function select_storage() {
"Which storage pool you would like to use for the ${CONTENT_LABEL,,}?\nTo make a selection, use the Spacebar.\n" \
16 $(($MSG_MAX_LENGTH + 23)) 6 \
"${MENU[@]}" 3>&1 1>&2 2>&3) || exit "Menu aborted."
+ if [ $? -ne 0 ]; then
+ echo -e "${CROSS}${RD} Menu aborted by user.${CL}"
+ exit 0
+ fi
done
- printf $STORAGE
+ printf "%s" "$STORAGE"
fi
}
-
# Test if required variables are set
[[ "${CTID:-}" ]] || exit "You need to set 'CTID' variable."
[[ "${PCT_OSTYPE:-}" ]] || exit "You need to set 'PCT_OSTYPE' variable."
@@ -150,60 +169,23 @@ msg_ok "Using ${BL}$TEMPLATE_STORAGE${CL} ${GN}for Template Storage."
CONTAINER_STORAGE=$(select_storage container) || exit
msg_ok "Using ${BL}$CONTAINER_STORAGE${CL} ${GN}for Container Storage."
+# Update LXC template list
+msg_info "Updating LXC Template List"
+pveam update >/dev/null
+msg_ok "Updated LXC Template List"
+
# Get LXC template string
-if [ $PCT_OSTYPE = debian ]; then
- if [ $PCT_OSVERSION = 11 ]; then
- TEMPLATE_VARIENT=bullseye
- else
- TEMPLATE_VARIENT=bookworm
- fi
-elif [ $PCT_OSTYPE = alpine ]; then
- TEMPLATE_VARIENT=3.19
-else
- if [ $PCT_OSVERSION = 20.04 ]; then
- TEMPLATE_VARIENT=focal
- elif [ $PCT_OSVERSION = 24.04 ]; then
- TEMPLATE_VARIENT=noble
- else
- TEMPLATE_VARIENT=jammy
- fi
-fi
+TEMPLATE_SEARCH=${PCT_OSTYPE}-${PCT_OSVERSION:-}
+mapfile -t TEMPLATES < <(pveam available -section system | sed -n "s/.*\($TEMPLATE_SEARCH.*\)/\1/p" | sort -t - -k 2 -V)
+[ ${#TEMPLATES[@]} -gt 0 ] || exit "Unable to find a template when searching for '$TEMPLATE_SEARCH'."
+TEMPLATE="${TEMPLATES[-1]}"
-if [ -d "/var/lib/vz/template/cache" ]; then
- TEMPLATE=$PCT_OSTYPE-$TEMPLATE_VARIENT-rootfs.tar.xz
- # Download template if needed
- if [ ! -f "/var/lib/vz/template/cache/$TEMPLATE" ]; then
- if [ $PCT_OSTYPE = debian ]; then
- msg_info "Downloading LXC Template"
- wget -q $(curl -s https://api.github.com/repos/asylumexp/debian-ifupdown2-lxc/releases/latest | grep download | grep debian-$TEMPLATE_VARIENT-arm64-rootfs.tar.xz | cut -d\" -f4) -O /var/lib/vz/template/cache/$TEMPLATE -q || exit "A problem occured while downloading the LXC template."
- msg_ok "Downloaded LXC Template"
- else
- templateurl="https://jenkins.linuxcontainers.org/job/image-$PCT_OSTYPE/architecture=arm64,release=$TEMPLATE_VARIENT,variant=default/lastStableBuild/artifact/rootfs.tar.xz"
- msg_info "Downloading LXC Template"
- wget $templateurl -O /var/lib/vz/template/cache/$TEMPLATE -q || exit "A problem occured while downloading the LXC template."
- msg_ok "Downloaded LXC Template"
- fi
- fi
-else
- # Update LXC template list
- msg_info "Updating LXC Template List"
- pveam update >/dev/null
- msg_ok "Updated LXC Template List"
- if [ $PCT_OSTYPE = debian ]; then
- msg_error "Debian unsupported with this download method. Exiting."
- elif [ $PCT_OSTYPE = alpine]; then
- $TEMPLATE_VARIENT = 3.18
- fi
-
- TEMPLATE="$(pveam available | grep -E "arm64.*$PCT_OSTYPE-$TEMPLATE_VARIENT" | sed 's/arm64[[:space:]]*//')"
-
- # Download LXC template if needed
- if ! pveam list $TEMPLATE_STORAGE | grep -F $TEMPLATE > /dev/null; then
- msg_info "Downloading LXC Template"
- pveam download $TEMPLATE_STORAGE $TEMPLATE >/dev/null ||
- exit "A problem occured while downloading the LXC template."
- msg_ok "Downloaded LXC Template"
- fi
+# Download LXC template if needed
+if ! pveam list $TEMPLATE_STORAGE | grep -q $TEMPLATE; then
+ msg_info "Downloading LXC Template"
+ pveam download $TEMPLATE_STORAGE $TEMPLATE >/dev/null ||
+ exit "A problem occured while downloading the LXC template."
+ msg_ok "Downloaded LXC Template"
fi
# Combine all options
diff --git a/ct/cronicle.sh b/ct/cronicle.sh
index 43ef798fe..fd2d56337 100644
--- a/ct/cronicle.sh
+++ b/ct/cronicle.sh
@@ -1,124 +1,101 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://cronicle.net/
-function header_info {
-clear
-cat <<"EOF"
- ______ _ __
- / ____/________ ____ (_)____/ /__
- / / / ___/ __ \/ __ \/ / ___/ / _ \
-/ /___/ / / /_/ / / / / / /__/ / __/
-\____/_/ \____/_/ /_/_/\___/_/\___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Cronicle"
-var_disk="2"
+var_tags="task-scheduler"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
- "1" "Update ${APP}" ON \
- "2" "Install ${APP} Worker" OFF \
- 3>&1 1>&2 2>&3)
+ header_info
+ check_container_storage
+ check_container_resources
+ UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
+ "1" "Update ${APP}" ON \
+ "2" "Install ${APP} Worker" OFF \
+ 3>&1 1>&2 2>&3)
-if [ "$UPD" == "1" ]; then
-header_info
-if [[ ! -d /opt/cronicle ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
- if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
- if ! command -v npm >/dev/null 2>&1; then
- echo "Installing NPM..."
- apt-get install -y npm >/dev/null 2>&1
- echo "Installed NPM..."
+ if [ "$UPD" == "1" ]; then
+ if [[ ! -d /opt/cronicle ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
fi
- fi
-msg_info "Updating ${APP}"
-/opt/cronicle/bin/control.sh upgrade &>/dev/null
-msg_ok "Updated ${APP}"
-exit
-fi
-if [ "$UPD" == "2" ]; then
- if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
- if ! command -v npm >/dev/null 2>&1; then
- echo "Installing NPM..."
- apt-get install -y npm >/dev/null 2>&1
- echo "Installed NPM..."
+ if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
+ if ! command -v npm >/dev/null 2>&1; then
+ echo "Installing NPM..."
+ apt-get install -y npm >/dev/null 2>&1
+ echo "Installed NPM..."
+ fi
fi
+ msg_info "Updating ${APP}"
+ /opt/cronicle/bin/control.sh upgrade &>/dev/null
+ msg_ok "Updated ${APP}"
+ exit
fi
-LATEST=$(curl -sL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
-IP=$(hostname -I | awk '{print $1}')
-msg_info "Installing Dependencies"
+ if [ "$UPD" == "2" ]; then
+ if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
+ if ! command -v npm >/dev/null 2>&1; then
+ echo "Installing NPM..."
+ apt-get install -y npm >/dev/null 2>&1
+ echo "Installed NPM..."
+ fi
+ fi
+ LATEST=$(curl -sL https://api.github.com/repos/jhuckaby/Cronicle/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
+ IP=$(hostname -I | awk '{print $1}')
+ msg_info "Installing Dependencies"
-apt-get install -y git &>/dev/null
-apt-get install -y make &>/dev/null
-apt-get install -y g++ &>/dev/null
-apt-get install -y gcc &>/dev/null
-apt-get install -y ca-certificates &>/dev/null
-apt-get install -y gnupg &>/dev/null
-msg_ok "Installed Dependencies"
+ apt-get install -y git &>/dev/null
+ apt-get install -y make &>/dev/null
+ apt-get install -y g++ &>/dev/null
+ apt-get install -y gcc &>/dev/null
+ apt-get install -y ca-certificates &>/dev/null
+ apt-get install -y gnupg &>/dev/null
+ msg_ok "Installed Dependencies"
-msg_info "Setting up Node.js Repository"
-mkdir -p /etc/apt/keyrings
-curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
-echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
-msg_ok "Set up Node.js Repository"
+ msg_info "Setting up Node.js Repository"
+ mkdir -p /etc/apt/keyrings
+ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
+ echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" >/etc/apt/sources.list.d/nodesource.list
+ msg_ok "Set up Node.js Repository"
-msg_info "Installing Node.js"
-apt-get update &>/dev/null
-apt-get install -y nodejs &>/dev/null
-msg_ok "Installed Node.js"
+ msg_info "Installing Node.js"
+ apt-get update &>/dev/null
+ apt-get install -y nodejs &>/dev/null
+ msg_ok "Installed Node.js"
-msg_info "Installing Cronicle Worker"
-mkdir -p /opt/cronicle
-cd /opt/cronicle
-tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1 &>/dev/null
-npm install &>/dev/null
-node bin/build.js dist &>/dev/null
-sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
-/opt/cronicle/bin/control.sh start &>/dev/null
-cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled &>/dev/null
-chmod 775 /etc/init.d/cronicled
-update-rc.d cronicled defaults &>/dev/null
-msg_ok "Installed Cronicle Worker"
-echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
-exit
-fi
+ msg_info "Installing Cronicle Worker"
+ mkdir -p /opt/cronicle
+ cd /opt/cronicle
+ tar zxvf <(curl -fsSL https://github.com/jhuckaby/Cronicle/archive/${LATEST}.tar.gz) --strip-components 1 &>/dev/null
+ npm install &>/dev/null
+ node bin/build.js dist &>/dev/null
+ sed -i "s/localhost:3012/${IP}:3012/g" /opt/cronicle/conf/config.json
+ /opt/cronicle/bin/control.sh start &>/dev/null
+ cp /opt/cronicle/bin/cronicled.init /etc/init.d/cronicled &>/dev/null
+ chmod 775 /etc/init.d/cronicled
+ update-rc.d cronicled defaults &>/dev/null
+ msg_ok "Installed Cronicle Worker"
+ echo -e "\n Add Masters secret key to /opt/cronicle/conf/config.json \n"
+ exit
+ fi
}
start
@@ -126,5 +103,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Primary should be reachable by going to the following URL.
- ${BL}http://${IP}:3012${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3012${CL}"
\ No newline at end of file
diff --git a/ct/daemonsync.sh b/ct/daemonsync.sh
index 8d06eb914..910324bef 100644
--- a/ct/daemonsync.sh
+++ b/ct/daemonsync.sh
@@ -1,73 +1,49 @@
#!/usr/bin/env bash
-# source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://daemonsync.me/
-echo "Unsupported. View notes on GitHub."
+# App Default Values
+APP="Daemon Sync"
+var_tags="sync"
+var_cpu="1"
+var_ram="512"
+var_disk="8"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
-# function header_info {
-# clear
-# cat <<"EOF"
-# ____ _____
-# / __ \____ ____ ____ ___ ____ ____ / ___/__ ______ _____
-# / / / / __ / _ \/ __ __ \/ __ \/ __ \ \__ \/ / / / __ \/ ___/
-# / /_/ / /_/ / __/ / / / / / /_/ / / / / ___/ / /_/ / / / / /__
-# /_____/\__,_/\___/_/ /_/ /_/\____/_/ /_/ /____/\__, /_/ /_/\___/
-# /____/
-# EOF
-# }
-# header_info
-# echo -e "Loading..."
-# APP="Daemon Sync"
-# var_disk="8"
-# var_cpu="1"
-# var_ram="512"
-# var_os="debian"
-# var_version="12"
-# variables
-# color
-# catch_errors
+# App Output & Base Settings
+header_info "$APP"
+base_settings
-# function default_settings() {
-# CT_TYPE="1"
-# PW=""
-# CT_ID=$NEXTID
-# HN=$NSAPP
-# DISK_SIZE="$var_disk"
-# CORE_COUNT="$var_cpu"
-# RAM_SIZE="$var_ram"
-# BRG="vmbr0"
-# NET="dhcp"
-# GATE=""
-# APT_CACHER=""
-# APT_CACHER_IP=""
-# DISABLEIP6="no"
-# MTU=""
-# SD=""
-# NS=""
-# MAC=""
-# VLAN=""
-# SSH="no"
-# VERB="no"
-# echo_default
-# }
+# Core
+variables
+color
+catch_errors
-# function update_script() {
-# header_info
-# if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-# msg_info "Updating $APP LXC"
-# apt-get update &>/dev/null
-# apt-get -y upgrade &>/dev/null
-# msg_ok "Updated $APP LXC"
-# exit
-# }
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
+}
-# start
-# build_container
-# description
+start
+build_container
+description
-# msg_ok "Completed Successfully!\n"
-# echo -e "${APP} should be reachable by going to the following URL.
-# ${BL}http://${IP}:8084${CL} \n"
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8084${CL}"
\ No newline at end of file
diff --git a/ct/dashy.sh b/ct/dashy.sh
index 55f006027..edce87ed0 100644
--- a/ct/dashy.sh
+++ b/ct/dashy.sh
@@ -1,103 +1,80 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://dashy.to/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \____ ______/ /_ __ __
- / / / / __ / ___/ __ \/ / / /
- / /_/ / /_/ (__ ) / / / /_/ /
-/_____/\__,_/____/_/ /_/\__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Dashy"
-var_disk="6"
+var_tags="dashboard"
var_cpu="2"
var_ram="2048"
+var_disk="6"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/dashy/public/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-
-RELEASE=$(curl -sL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
-if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop dashy
- msg_ok "Stopped ${APP}"
-
- msg_info "Backing up conf.yml"
- cd ~
- if [[ -f /opt/dashy/public/conf.yml ]]; then
- cp -R /opt/dashy/public/conf.yml conf.yml
- else
- cp -R /opt/dashy/user-data/conf.yml conf.yml
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/dashy/public/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
fi
- msg_ok "Backed up conf.yml"
- msg_info "Updating ${APP} to ${RELEASE}"
- rm -rf /opt/dashy
- mkdir -p /opt/dashy
- wget -qO- https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz | tar -xz -C /opt/dashy --strip-components=1
- cd /opt/dashy
- npm install
- npm run build
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
+ RELEASE=$(curl -sL https://api.github.com/repos/Lissy93/dashy/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop dashy
+ msg_ok "Stopped ${APP}"
- msg_info "Restoring conf.yml"
- cd ~
- cp -R conf.yml /opt/dashy/user-data
- msg_ok "Restored conf.yml"
+ msg_info "Backing up conf.yml"
+ cd ~
+ if [[ -f /opt/dashy/public/conf.yml ]]; then
+ cp -R /opt/dashy/public/conf.yml conf.yml
+ else
+ cp -R /opt/dashy/user-data/conf.yml conf.yml
+ fi
+ msg_ok "Backed up conf.yml"
- msg_info "Cleaning"
- rm -rf conf.yml /opt/dashy/public/conf.yml
- msg_ok "Cleaned"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ rm -rf /opt/dashy
+ mkdir -p /opt/dashy
+ wget -qO- https://github.com/Lissy93/dashy/archive/refs/tags/${RELEASE}.tar.gz | tar -xz -C /opt/dashy --strip-components=1
+ cd /opt/dashy
+ npm install
+ npm run build
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
- msg_info "Starting Dashy"
- systemctl start dashy
- msg_ok "Started Dashy"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Restoring conf.yml"
+ cd ~
+ cp -R conf.yml /opt/dashy/user-data
+ msg_ok "Restored conf.yml"
+
+ msg_info "Cleaning"
+ rm -rf conf.yml /opt/dashy/public/conf.yml
+ msg_ok "Cleaned"
+
+ msg_info "Starting Dashy"
+ systemctl start dashy
+ msg_ok "Started Dashy"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -105,5 +82,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:4000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4000${CL}"
\ No newline at end of file
diff --git a/ct/debian.sh b/ct/debian.sh
index 98b2b3990..be9e3aa9d 100644
--- a/ct/debian.sh
+++ b/ct/debian.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.debian.org/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ _
- / __ \___ / /_ (_)___ ____
- / / / / _ \/ __ \/ / __ `/ __ \
- / /_/ / __/ /_/ / / /_/ / / / /
-/_____/\___/_.___/_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Debian"
-var_disk="2"
+var_tags="os"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,3 +44,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/deconz.sh b/ct/deconz.sh
index 09f6f6d33..49f06c81a 100644
--- a/ct/deconz.sh
+++ b/ct/deconz.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.phoscon.de/en/conbee2/software#deconz
-function header_info {
-clear
-cat <<"EOF"
- __ __________ _ _______
- ____/ /__ / ____/ __ \/ | / /__ /
- / __ / _ \/ / / / / / |/ / / /
-/ /_/ / __/ /___/ /_/ / /| / / /__
-\__,_/\___/\____/\____/_/ |_/ /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="deCONZ"
-var_disk="4"
+var_tags="zigbee"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/deconz.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/deconz.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/deluge.sh b/ct/deluge.sh
index b46f385ef..be944b694 100644
--- a/ct/deluge.sh
+++ b/ct/deluge.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.deluge-torrent.org/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \___ / /_ ______ ____
- / / / / _ \/ / / / / __ `/ _ \
- / /_/ / __/ / /_/ / /_/ / __/
-/_____/\___/_/\__,_/\__, /\___/
- /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Deluge"
-var_disk="4"
+var_tags="torrent"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/deluged.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-pip3 install deluge[all] --upgrade
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/deluged.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ pip3 install deluge[all] --upgrade
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8112${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8112${CL}"
\ No newline at end of file
diff --git a/ct/docker.sh b/ct/docker.sh
index f5541ec22..fed85f34d 100644
--- a/ct/docker.sh
+++ b/ct/docker.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.docker.com/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \____ _____/ /_ __ _____
- / / / / __ \/ ___/ //_/ _ \/ ___/
- / /_/ / /_/ / /__/ ,< / __/ /
-/_____/\____/\___/_/|_|\___/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Docker"
-var_disk="4"
+var_tags="docker"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated ${APP} LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
}
start
@@ -67,3 +44,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/dockge.sh b/ct/dockge.sh
index 2de514ba4..45e3d2278 100644
--- a/ct/dockge.sh
+++ b/ct/dockge.sh
@@ -1,66 +1,43 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://dockge.kuma.pet/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \____ _____/ /______ ____
- / / / / __ \/ ___/ //_/ __ `/ _ \
- / /_/ / /_/ / /__/ ,< / /_/ / __/
-/_____/\____/\___/_/|_|\__, /\___/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Dockge"
-var_disk="18"
+var_tags="docker"
var_cpu="2"
var_ram="2048"
+var_disk="18"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/dockge ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-cd /opt/dockge
-docker compose pull
-docker compose up -d
-msg_ok "Updated ${APP}"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/dockge ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ cd /opt/dockge
+ docker compose pull
+ docker compose up -d
+ msg_ok "Updated ${APP}"
+ exit
}
start
@@ -68,5 +45,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5001${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5001${CL}"
\ No newline at end of file
diff --git a/ct/emby.sh b/ct/emby.sh
index 64bac5051..91e04bee4 100644
--- a/ct/emby.sh
+++ b/ct/emby.sh
@@ -1,76 +1,53 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://emby.media/
-function header_info {
-clear
-cat <<"EOF"
- ______ __
- / ____/___ ___ / /_ __ __
- / __/ / __ __ \/ __ \/ / / /
- / /___/ / / / / / /_/ / /_/ /
-/_____/_/ /_/ /_/_.___/\__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Emby"
-var_disk="8"
+var_tags="media"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="ubuntu"
var_version="22.04"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/emby-server ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-LATEST=$(curl -sL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
-msg_info "Stopping ${APP}"
-systemctl stop emby-server
-msg_ok "Stopped ${APP}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/emby-server ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ LATEST=$(curl -sL https://api.github.com/repos/MediaBrowser/Emby.Releases/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
+ msg_info "Stopping ${APP}"
+ systemctl stop emby-server
+ msg_ok "Stopped ${APP}"
-msg_info "Updating ${APP}"
-wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_arm64.deb &>/dev/null
-dpkg -i emby-server-deb_${LATEST}_arm64.deb &>/dev/null
-rm emby-server-deb_${LATEST}_arm64.deb
-msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP}"
+ wget https://github.com/MediaBrowser/Emby.Releases/releases/download/${LATEST}/emby-server-deb_${LATEST}_amd64.deb &>/dev/null
+ dpkg -i emby-server-deb_${LATEST}_amd64.deb &>/dev/null
+ rm emby-server-deb_${LATEST}_amd64.deb
+ msg_ok "Updated ${APP}"
-msg_info "Starting ${APP}"
-systemctl start emby-server
-msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ${APP}"
+ systemctl start emby-server
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -78,5 +55,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8096${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8096${CL}"
diff --git a/ct/emqx.sh b/ct/emqx.sh
index 6d4229c67..300ac95b7 100644
--- a/ct/emqx.sh
+++ b/ct/emqx.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.emqx.com/en
-function header_info {
-clear
-cat <<"EOF"
- ________ _______ _ __
- / ____/ |/ / __ \ | |/ /
- / __/ / /|_/ / / / / | /
- / /___/ / / / /_/ / / |
-/_____/_/ /_/\___\_\/_/|_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="EMQX"
-var_disk="4"
+var_tags="mqtt"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:18083${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:18083${CL}"
diff --git a/ct/ersatztv.sh b/ct/ersatztv.sh
index e2f52dba0..3b9d9fe9b 100644
--- a/ct/ersatztv.sh
+++ b/ct/ersatztv.sh
@@ -1,83 +1,57 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
-# Source: https://github.com/ErsatzTV/ErsatzTV/
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://ersatztv.org/
-
-function header_info {
-clear
-cat <<"EOF"
- ______ __ _______ __
- / ____/_____________ _/ /_____/_ __/ | / /
- / __/ / ___/ ___/ __ `/ __/_ / / / | | / /
- / /___/ / (__ ) /_/ / /_ / /_/ / | |/ /
-/_____/_/ /____/\__,_/\__/ /___/_/ |___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="ErsatzTV"
-var_disk="5"
+var_tags="iptv"
var_cpu="1"
var_ram="1024"
+var_disk="5"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
function update_script() {
-header_info
-if [[ ! -d /opt/ErsatzTV ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/ErsatzTV ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
-msg_info "Stopping ErsatzTV"
-systemctl stop ersatzTV
-msg_ok "Stopped ErsatzTV"
+ msg_info "Stopping ErsatzTV"
+ systemctl stop ersatzTV
+ msg_ok "Stopped ErsatzTV"
-msg_info "Updating ErsatzTV"
-RELEASE=$(curl -s https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
-cp -R /opt/ErsatzTV/ ErsatzTV-backup
-rm ErsatzTV-backup/ErsatzTV
-rm -rf /opt/ErsatzTV
-wget -qO- "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-arm64.tar.gz" | tar -xz -C /opt
-mv "/opt/ErsatzTV-${RELEASE}-linux-arm64" /opt/ErsatzTV
-cp -R ErsatzTV-backup/* /opt/ErsatzTV/
-rm -rf ErsatzTV-backup
-msg_ok "Updated ErsatzTV"
+ msg_info "Updating ErsatzTV"
+ RELEASE=$(curl -s https://api.github.com/repos/ErsatzTV/ErsatzTV/releases | grep -oP '"tag_name": "\K[^"]+' | head -n 1)
+ cp -R /opt/ErsatzTV/ ErsatzTV-backup
+ rm ErsatzTV-backup/ErsatzTV
+ rm -rf /opt/ErsatzTV
+ wget -qO- "https://github.com/ErsatzTV/ErsatzTV/releases/download/${RELEASE}/ErsatzTV-${RELEASE}-linux-x64.tar.gz" | tar -xz -C /opt
+ mv "/opt/ErsatzTV-${RELEASE}-linux-x64" /opt/ErsatzTV
+ cp -R ErsatzTV-backup/* /opt/ErsatzTV/
+ rm -rf ErsatzTV-backup
+ msg_ok "Updated ErsatzTV"
-msg_info "Starting ErsatzTV"
-systemctl start ersatzTV
-msg_ok "Started ErsatzTV"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ErsatzTV"
+ systemctl start ersatzTV
+ msg_ok "Started ErsatzTV"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -85,5 +59,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8409${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8409${CL}"
\ No newline at end of file
diff --git a/ct/esphome.sh b/ct/esphome.sh
index e86d11c8d..d28c43f27 100644
--- a/ct/esphome.sh
+++ b/ct/esphome.sh
@@ -1,76 +1,53 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://esphome.io/
-function header_info {
-clear
-cat <<"EOF"
- ___________ ____ __ __
- / ____/ ___// __ \/ / / /___ ____ ___ ___
- / __/ \__ \/ /_/ / /_/ / __ \/ __ `__ \/ _ \
- / /___ ___/ / ____/ __ / /_/ / / / / / / __/
-/_____//____/_/ /_/ /_/\____/_/ /_/ /_/\___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="ESPHome"
-var_disk="4"
+var_tags="automation"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Stopping ESPHome"
-systemctl stop esphomeDashboard
-msg_ok "Stopped ESPHome"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/esphomeDashboard.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ESPHome"
+ systemctl stop esphomeDashboard
+ msg_ok "Stopped ESPHome"
-msg_info "Updating ESPHome"
-if [[ -d /srv/esphome ]]; then
- source /srv/esphome/bin/activate &>/dev/null
-fi
-pip3 install -U esphome &>/dev/null
-msg_ok "Updated ESPHome"
+ msg_info "Updating ESPHome"
+ if [[ -d /srv/esphome ]]; then
+ source /srv/esphome/bin/activate &>/dev/null
+ fi
+ pip3 install -U esphome &>/dev/null
+ msg_ok "Updated ESPHome"
-msg_info "Starting ESPHome"
-systemctl start esphomeDashboard
-msg_ok "Started ESPHome"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ESPHome"
+ systemctl start esphomeDashboard
+ msg_ok "Started ESPHome"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -78,5 +55,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:6052${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6052${CL}"
\ No newline at end of file
diff --git a/ct/evcc.sh b/ct/evcc.sh
index d7aa048ee..a1fedac10 100644
--- a/ct/evcc.sh
+++ b/ct/evcc.sh
@@ -1,64 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://evcc.io/en/
-function header_info {
-clear
-cat <<"EOF"
- ___ _ ____________
- / _ \ | / / ___/ ___/
-/ __/ |/ / /__/ /__
-\___/|___/\___/\___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="evcc"
-var_disk="4"
+var_tags="solar;ev;automation"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/evcc-stable.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating evcc LXC"
-apt update &>/dev/null
-apt --only-upgrade install -y evcc &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/evcc-stable.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating evcc LXC"
+ apt update &>/dev/null
+ apt --only-upgrade install -y evcc &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -66,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:7070${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7070${CL}"
\ No newline at end of file
diff --git a/ct/fenrus.sh b/ct/fenrus.sh
index c0764dd2f..45b91696b 100644
--- a/ct/fenrus.sh
+++ b/ct/fenrus.sh
@@ -1,87 +1,67 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# Co-Author: Scorpoon
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck (tteckster) | Co-Author: Scorpoon
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/revenz/Fenrus
-function header_info {
-clear
-cat <<"EOF"
- ______
- / ____/__ ____ _______ _______
- / /_ / _ \/ __ \/ ___/ / / / ___/
- / __/ / __/ / / / / / /_/ (__ )
-/_/ \___/_/ /_/_/ \__,_/____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Fenrus"
-var_disk="4"
+var_tags="dashboard"
var_cpu="1"
var_ram="512"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/${APP} ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
-msg_info "Updating ${APP}"
-systemctl stop ${APP}
-git clone https://github.com/revenz/Fenrus.git
-cd Fenrus || exit
-gitVersionNumber=$(git rev-parse HEAD)
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/${APP} ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
+ msg_info "Updating ${APP}"
+ systemctl stop ${APP}
+ git clone https://github.com/revenz/Fenrus.git
+ cd Fenrus || exit
+ gitVersionNumber=$(git rev-parse HEAD)
-if [[ "${gitVersionNumber}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- mkdir /opt/fenrus-data-backup
- cp -r "/opt/${APP}/data/" /opt/fenrus-data-backup/data
- if [[ ! -d /opt/fenrus-data-backup/data ]]; then msg_error "Backup of data folder failed! exiting..."; rm -r /opt/fenrus-data-backup/; exit; fi
- export DOTNET_CLI_TELEMETRY_OPTOUT=1
- dotnet publish -c Release -o "/opt/${APP}/" Fenrus.csproj
- cp -r /opt/fenrus-data-backup/data/ "/opt/${APP}/"
- echo "${gitVersionNumber}" >"/opt/${APP}_version.txt"
- rm -r /opt/fenrus-data-backup/
- msg_ok "Updated $APP"
-else
- msg_ok "No update required. ${APP} is already up to date"
-fi
-cd ..
-rm -r Fenrus/
+ if [[ "${gitVersionNumber}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ mkdir /opt/fenrus-data-backup
+ cp -r "/opt/${APP}/data/" /opt/fenrus-data-backup/data
+ if [[ ! -d /opt/fenrus-data-backup/data ]]; then
+ msg_error "Backup of data folder failed! exiting..."
+ rm -r /opt/fenrus-data-backup/
+ exit
+ fi
+ export DOTNET_CLI_TELEMETRY_OPTOUT=1
+ dotnet publish -c Release -o "/opt/${APP}/" Fenrus.csproj
+ cp -r /opt/fenrus-data-backup/data/ "/opt/${APP}/"
+ echo "${gitVersionNumber}" >"/opt/${APP}_version.txt"
+ rm -r /opt/fenrus-data-backup/
+ msg_ok "Updated $APP"
+ else
+ msg_ok "No update required. ${APP} is already up to date"
+ fi
+ cd ..
+ rm -r Fenrus/
-systemctl start ${APP}
-exit
+ systemctl start ${APP}
+ exit
}
start
@@ -89,5 +69,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
diff --git a/ct/fhem.sh b/ct/fhem.sh
index dcc3359a9..976bef551 100644
--- a/ct/fhem.sh
+++ b/ct/fhem.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://fhem.de/
-function header_info {
-clear
-cat <<"EOF"
- ________
- / ____/ /_ ___ ____ ___
- / /_ / __ \/ _ \/ __ `__ \
- / __/ / / / / __/ / / / / /
-/_/ /_/ /_/\___/_/ /_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
-APP="Fhem"
-var_disk="8"
+# App Default Values
+APP="FHEM"
+var_tags="automation"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/fhem.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/fhem.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8083${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"
\ No newline at end of file
diff --git a/ct/flaresolverr.sh b/ct/flaresolverr.sh
index f816efe01..4db31142e 100644
--- a/ct/flaresolverr.sh
+++ b/ct/flaresolverr.sh
@@ -1,70 +1,50 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# Co-Author: remz1337
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck (tteckster) | Co-Author: remz1337
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/FlareSolverr/FlareSolverr
-function header_info {
-clear
-cat <<"EOF"
- ________ _____ __
- / ____/ /___ _________ / ___/____ / / _____ __________
- / /_ / / __ `/ ___/ _ \\__ \/ __ \/ / | / / _ \/ ___/ ___/
- / __/ / / /_/ / / / __/__/ / /_/ / /| |/ / __/ / / /
-/_/ /_/\__,_/_/ \___/____/\____/_/ |___/\___/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="FlareSolverr"
-var_disk="4"
+var_tags="proxy"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
header_info
- if [[ ! -f /etc/systemd/system/flaresolverr.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
- whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/flaresolverr.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
RELEASE=$(wget -q https://github.com/FlareSolverr/FlareSolverr/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
- if [[ ! -d /opt/flaresolverr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
- msg_info "Updating $APP LXC"
- systemctl stop flaresolverr
- cd /opt/flaresolverr
- git pull
- systemctl start flaresolverr
- msg_ok "Updated $APP LXC"
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Updating $APP LXC"
+ systemctl stop flaresolverr
+ wget -q https://github.com/FlareSolverr/FlareSolverr/releases/download/$RELEASE/flaresolverr_linux_x64.tar.gz
+ tar -xzf flaresolverr_linux_x64.tar.gz -C /opt
+ rm flaresolverr_linux_x64.tar.gz
+ systemctl start flaresolverr
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP LXC"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
exit
}
@@ -72,10 +52,7 @@ start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 512
-pct set $CTID -cores 1
-msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8191${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8191${CL}"
\ No newline at end of file
diff --git a/ct/flowiseai.sh b/ct/flowiseai.sh
index 11dbb2831..c83da8216 100644
--- a/ct/flowiseai.sh
+++ b/ct/flowiseai.sh
@@ -1,77 +1,50 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://flowiseai.com/
-function header_info {
-clear
-cat <<"EOF"
- ________ _ ___ ____
- / ____/ /___ _ __(_)_______ / | / _/
- / /_ / / __ \ | /| / / / ___/ _ \/ /| | / /
- / __/ / / /_/ / |/ |/ / (__ ) __/ ___ |_/ /
-/_/ /_/\____/|__/|__/_/____/\___/_/ |_/___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="FlowiseAI"
+var_tags="low-code"
var_disk="10"
var_cpu="4"
var_ram="4096"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/flowise.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
-msg_info "Updating ${APP}"
-systemctl stop flowise
-npm install -g flowise --upgrade
-systemctl start flowise
-msg_ok "Updated ${APP}"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/flowise.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ systemctl stop flowise
+ npm install -g flowise --upgrade
+ systemctl start flowise
+ msg_ok "Updated ${APP}"
+ exit
}
start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 2048
-pct set $CTID -cores 2
-msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/forgejo.sh b/ct/forgejo.sh
index a5ad32e21..1b5b43e1c 100644
--- a/ct/forgejo.sh
+++ b/ct/forgejo.sh
@@ -1,83 +1,59 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://forgejo.org/
-function header_info {
- clear
- cat <<"EOF"
- ______ _
- / ____/___ _________ ___ (_)___
- / /_ / __ \/ ___/ __ `/ _ \ / / __ \
- / __/ / /_/ / / / /_/ / __/ / / /_/ /
-/_/ \____/_/ \__, /\___/_/ /\____/
- /____/ /___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Forgejo"
-var_disk="10"
+var_tags="git"
var_cpu="2"
var_ram="2048"
+var_disk="10"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/forgejo ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Stopping ${APP}"
-systemctl stop forgejo
-msg_ok "Stopped ${APP}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/forgejo ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop forgejo
+ msg_ok "Stopped ${APP}"
-msg_info "Updating ${APP}"
-RELEASE=$(curl -s https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//')
-wget -qO forgejo-$RELEASE-linux-amd64 "https://codeberg.org/forgejo/forgejo/releases/download/v${RELEASE}/forgejo-${RELEASE}-linux-arm64"
-rm -rf /opt/forgejo/*
-cp -r forgejo-$RELEASE-linux-arm64 /opt/forgejo/forgejo-$RELEASE-linux-arm64
-chmod +x /opt/forgejo/forgejo-$RELEASE-linux-arm64
-ln -sf /opt/forgejo/forgejo-$RELEASE-linux-arm64 /usr/local/bin/forgejo
-msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP}"
+ RELEASE=$(curl -s https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//')
+ wget -qO forgejo-$RELEASE-linux-amd64 "https://codeberg.org/forgejo/forgejo/releases/download/v${RELEASE}/forgejo-${RELEASE}-linux-amd64"
+ rm -rf /opt/forgejo/*
+ cp -r forgejo-$RELEASE-linux-amd64 /opt/forgejo/forgejo-$RELEASE-linux-amd64
+ chmod +x /opt/forgejo/forgejo-$RELEASE-linux-amd64
+ ln -sf /opt/forgejo/forgejo-$RELEASE-linux-amd64 /usr/local/bin/forgejo
+ msg_ok "Updated ${APP}"
-msg_info "Cleaning"
-rm -rf forgejo-$RELEASE-linux-arm64
-msg_ok "Cleaned"
+ msg_info "Cleaning"
+ rm -rf forgejo-$RELEASE-linux-amd64
+ msg_ok "Cleaned"
-msg_info "Starting ${APP}"
-systemctl start forgejo
-msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ${APP}"
+ systemctl start forgejo
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -85,5 +61,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/frigate.sh b/ct/frigate.sh
index d2b7c2fd0..e40014701 100644
--- a/ct/frigate.sh
+++ b/ct/frigate.sh
@@ -1,78 +1,46 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Authors: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://frigate.video/
-function header_info {
- clear
- cat <<"EOF"
- ______ _ __
- / ____/____(_)___ _____ _/ /____
- / /_ / ___/ / __ `/ __ `/ __/ _ \
- / __/ / / / / /_/ / /_/ / /_/ __/
-/_/ /_/ /_/\__, /\__,_/\__/\___/
- /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Frigate"
-var_disk="20"
+var_tags="nvr"
var_cpu="4"
var_ram="4096"
+var_disk="20"
var_os="debian"
var_version="11"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
- if [[ ! -f /etc/systemd/system/frigate.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/frigate.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
msg_error "To update Frigate, create a new container and transfer your configuration."
- exit
+ exit
}
start
build_container
description
-msg_info "Setting Container to Normal Resources"
-STATUS=$(pct status $CTID | grep -oP '(?<=status: ).*')
-if [ "$STATUS" == "running" ]; then
- pct set $CTID -memory 1024
-else
- echo -e " ⚠️ ${RD}Container is not running. Will need to change memory to 1024MB manually.${CL}"
-fi
-msg_ok "Set Normal Resources"
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5000${CL} \n"
-echo -e "go2rtc should be reachable by going to the following URL.
- ${BL}http://${IP}:1984${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
\ No newline at end of file
diff --git a/ct/gitea.sh b/ct/gitea.sh
index 87400ccd8..18561c61c 100644
--- a/ct/gitea.sh
+++ b/ct/gitea.sh
@@ -1,71 +1,47 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# Co-author: Rogue-King
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck (tteckster) | Co-Author: Rogue-King
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://about.gitea.com/
-function header_info {
-clear
-cat <<"EOF"
- ______ _ __
- / ____/(_)/ /____ ____ _
- / / __// // __/ _ \/ __ /
-/ /_/ // // /_/ __/ /_/ /
-\____//_/ \__/\___/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Gitea"
-var_disk="8"
+var_tags="git"
var_cpu="1"
var_ram="1024"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /usr/local/bin/gitea ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(wget -q https://github.com/go-gitea/gitea/releases/latest -O - | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
-msg_info "Updating $APP to ${RELEASE}"
-wget -q https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-arm64
-systemctl stop gitea
-rm -rf /usr/local/bin/gitea
-mv gitea* /usr/local/bin/gitea
-chmod +x /usr/local/bin/gitea
-systemctl start gitea
-msg_ok "Updated $APP Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /usr/local/bin/gitea ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(wget -q https://github.com/go-gitea/gitea/releases/latest -O - | grep "title>Release" | cut -d " " -f 4 | sed 's/^v//')
+ msg_info "Updating $APP to ${RELEASE}"
+ wget -q https://github.com/go-gitea/gitea/releases/download/v$RELEASE/gitea-$RELEASE-linux-amd64
+ systemctl stop gitea
+ rm -rf /usr/local/bin/gitea
+ mv gitea* /usr/local/bin/gitea
+ chmod +x /usr/local/bin/gitea
+ systemctl start gitea
+ msg_ok "Updated $APP Successfully"
+ exit
}
start
@@ -73,5 +49,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/glance.sh b/ct/glance.sh
new file mode 100644
index 000000000..7cf8dc36f
--- /dev/null
+++ b/ct/glance.sh
@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: kristocopani
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/glanceapp/glance
+
+# App Default Values
+APP="Glance"
+var_tags="dashboard"
+var_cpu="1"
+var_ram="512"
+var_disk="2"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+
+ if [[ ! -f /etc/systemd/system/glance.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ RELEASE=$(curl -s https://api.github.com/repos/glanceapp/glance/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop glance
+ msg_ok "Stopped Service"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ cd /opt
+ wget -q https://github.com/glanceapp/glance/releases/download/v${RELEASE}/glance-linux-amd64.tar.gz
+ rm -rf /opt/glance/glance
+ tar -xzf glance-linux-amd64.tar.gz -C /opt/glance
+ echo "${RELEASE}" >"/opt/${APP}_version.txt"
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting Service"
+ systemctl start glance
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -rf /opt/glance-linux-amd64.tar.gz
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}."
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
\ No newline at end of file
diff --git a/ct/go2rtc.sh b/ct/go2rtc.sh
index 58506b617..b6278d9d7 100644
--- a/ct/go2rtc.sh
+++ b/ct/go2rtc.sh
@@ -1,70 +1,46 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/AlexxIT/go2rtc
-function header_info {
-clear
-cat <<"EOF"
- ___ __
- ____ _____ |__ \ _____/ /______
- / __ `/ __ \__/ // ___/ __/ ___/
- / /_/ / /_/ / __// / / /_/ /__
- \__, /\____/____/_/ \__/\___/
-/____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="go2rtc"
-var_disk="4"
+var_tags="recorder;video"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/go2rtc ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-systemctl stop go2rtc
-cd /opt/go2rtc
-rm go2rtc_linux_amd64
-wget -q https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_arm64
-chmod +x go2rtc_linux_arm64
-systemctl start go2rtc
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/go2rtc ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ systemctl stop go2rtc
+ cd /opt/go2rtc
+ rm go2rtc_linux_amd64
+ wget -q https://github.com/AlexxIT/go2rtc/releases/latest/download/go2rtc_linux_amd64
+ chmod +x go2rtc_linux_amd64
+ systemctl start go2rtc
+ msg_ok "Updated $APP"
+ exit
}
start
@@ -72,5 +48,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:1984${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:1984${CL}"
\ No newline at end of file
diff --git a/ct/gokapi.sh b/ct/gokapi.sh
index 138748436..7f81581bd 100644
--- a/ct/gokapi.sh
+++ b/ct/gokapi.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/Forceu/Gokapi
-function header_info {
-clear
-cat <<"EOF"
- ______ __ _
- / ____/___ / /______ _____ (_)
- / / __/ __ \/ //_/ __ `/ __ \/ /
-/ /_/ / /_/ / ,< / /_/ / /_/ / /
-\____/\____/_/|_|\__,_/ .___/_/
- /_/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Gokapi"
-var_disk="4"
+var_tags="file;sharing"
var_cpu="1"
var_ram="512"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/gokapi ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/gokapi ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -64,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:53842/setup${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:53842/setup${CL}"
\ No newline at end of file
diff --git a/ct/gotify.sh b/ct/gotify.sh
index 89eda7515..bf1875f6e 100644
--- a/ct/gotify.sh
+++ b/ct/gotify.sh
@@ -1,84 +1,61 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://gotify.net/
-function header_info {
-clear
-cat <<"EOF"
- ______ __ _ ____
- / ____/___ / /_(_) __/_ __
- / / __/ __ \/ __/ / /_/ / / /
-/ /_/ / /_/ / /_/ / __/ /_/ /
-\____/\____/\__/_/_/ \__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Gotify"
-var_disk="2"
+var_tags="notification"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/gotify ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/gotify ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
-RELEASE=$(curl -s https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop gotify
- msg_ok "Stopped ${APP}"
+ RELEASE=$(curl -s https://api.github.com/repos/gotify/server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop gotify
+ msg_ok "Stopped ${APP}"
- msg_info "Updating ${APP} to ${RELEASE}"
- cd /opt/gotify
- wget -q https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip
- unzip -oq gotify-linux-amd64.zip
- rm -rf gotify-linux-amd64.zip
- chmod +x gotify-linux-amd64
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt/gotify
+ wget -q https://github.com/gotify/server/releases/download/v${RELEASE}/gotify-linux-amd64.zip
+ unzip -oq gotify-linux-amd64.zip
+ rm -rf gotify-linux-amd64.zip
+ chmod +x gotify-linux-amd64
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
- msg_info "Starting ${APP}"
- systemctl start gotify
- msg_ok "Started ${APP}"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Starting ${APP}"
+ systemctl start gotify
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -86,5 +63,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP} ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
diff --git a/ct/grafana.sh b/ct/grafana.sh
index 8673256f3..b8edc7741 100644
--- a/ct/grafana.sh
+++ b/ct/grafana.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://grafana.com/
-function header_info {
-clear
-cat <<"EOF"
- ______ ____
- / ____/________ _/ __/___ _____ ____ _
- / / __/ ___/ __ / /_/ __ / __ \/ __ /
-/ /_/ / / / /_/ / __/ /_/ / / / / /_/ /
-\____/_/ \__,_/_/ \__,_/_/ /_/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Grafana"
-var_disk="2"
+var_tags="monitoring;visualization"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/grafana.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/grafana.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/grist.sh b/ct/grist.sh
new file mode 100644
index 000000000..154e3ff5e
--- /dev/null
+++ b/ct/grist.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Source: https://github.com/gristlabs/grist-core
+
+# App Default Values
+APP="Grist"
+var_tags="database;spreadsheet"
+var_cpu="1"
+var_ram="2048"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+
+ if [[ ! -d /opt/grist ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ RELEASE=$(curl -s https://api.github.com/repos/gristlabs/grist-core/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+
+ msg_info "Stopping ${APP} Service"
+ systemctl stop grist
+ msg_ok "Stopped ${APP} Service"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ cd /opt
+ rm -rf grist_bak
+ mv grist grist_bak
+ wget -q https://github.com/gristlabs/grist-core/archive/refs/tags/v${RELEASE}.zip
+ unzip -q v$RELEASE.zip
+ mv grist-core-${RELEASE} grist
+ cp -n /opt/grist_bak/.env /opt/grist/.env
+ cd grist
+ yarn install >/dev/null 2>&1
+ yarn run build:prod >/dev/null 2>&1
+ yarn run install:python >/dev/null 2>&1
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting ${APP} Service"
+ systemctl start grist
+ msg_ok "Started ${APP} Service"
+
+ msg_info "Cleaning up"
+ rm -rf /opt/v$RELEASE.zip
+ msg_ok "Cleaned"
+
+ msg_ok "Updated Successfully!\n"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}Grist: http://${IP}:8484${CL}"
diff --git a/ct/grocy.sh b/ct/grocy.sh
index 1bc9e4665..b95386726 100644
--- a/ct/grocy.sh
+++ b/ct/grocy.sh
@@ -1,75 +1,52 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://grocy.info/
-function header_info {
-clear
-cat <<"EOF"
- ____ __________ _______ __
- / __ / ___/ __ \/ ___/ / / /
- / /_/ / / / /_/ / /__/ /_/ /
- \__, /_/ \____/\___/\__, /
-/____/ /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="grocy"
-var_disk="2"
+var_tags="grocery;household"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apache2/sites-available/grocy.conf ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-php_version=$(php -v | head -n 1 | awk '{print $2}')
-if [[ ! $php_version == "8.3"* ]]; then
- msg_info "Updating PHP"
- curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
- echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list
- apt-get update
- apt-get install -y php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl,sqlite3,fpm,gd,zip,xml}
- systemctl reload apache2
- apt autoremove
- msg_ok "Updated PHP"
-fi
-msg_info "Updating ${APP}"
-bash /var/www/html/update.sh
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apache2/sites-available/grocy.conf ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ php_version=$(php -v | head -n 1 | awk '{print $2}')
+ if [[ ! $php_version == "8.3"* ]]; then
+ msg_info "Updating PHP"
+ curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
+ echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ bookworm main" >/etc/apt/sources.list.d/php.list
+ apt-get update
+ apt-get install -y php8.3 php8.3-cli php8.3-{bz2,curl,mbstring,intl,sqlite3,fpm,gd,zip,xml}
+ systemctl reload apache2
+ apt autoremove
+ msg_ok "Updated PHP"
+ fi
+ msg_info "Updating ${APP}"
+ bash /var/www/html/update.sh
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -77,5 +54,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/headscale.sh b/ct/headscale.sh
index 9f2b7d6ce..cfa1ec13d 100644
--- a/ct/headscale.sh
+++ b/ct/headscale.sh
@@ -1,82 +1,58 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/juanfont/headscale
-function header_info {
-clear
-cat <<"EOF"
- __ __ __ __
- / / / /__ ____ _____/ /_____________ _/ /__
- / /_/ / _ \/ __ `/ __ / ___/ ___/ __ `/ / _ \
- / __ / __/ /_/ / /_/ (__ ) /__/ /_/ / / __/
-/_/ /_/\___/\__,_/\__,_/____/\___/\__,_/_/\___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Headscale"
-var_disk="2"
+var_tags="tailscale"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /etc/headscale ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/headscale ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop headscale
+ msg_ok "Stopped ${APP}"
-RELEASE=$(curl -s https://api.github.com/repos/juanfont/headscale/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop headscale
- msg_ok "Stopped ${APP}"
+ msg_info "Updating $APP to v${RELEASE}"
+ wget -q https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_amd64.deb
+ dpkg -i headscale_${RELEASE}_linux_amd64.deb
+ rm headscale_${RELEASE}_linux_amd64.deb
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP to ${RELEASE}"
- msg_info "Updating $APP to v${RELEASE}"
- wget -q https://github.com/juanfont/headscale/releases/download/v${RELEASE}/headscale_${RELEASE}_linux_arm64.deb
- dpkg -i headscale_${RELEASE}_linux_arm64.deb
- rm headscale_${RELEASE}_linux_arm64.deb
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated $APP to ${RELEASE}"
-
- msg_info "Starting ${APP}"
- systemctl start headscale
- msg_ok "Started ${APP}"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Starting ${APP}"
+ systemctl start headscale
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -84,3 +60,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/heimdall-dashboard.sh b/ct/heimdall-dashboard.sh
index 6f8a163e6..8e5f6fdc3 100644
--- a/ct/heimdall-dashboard.sh
+++ b/ct/heimdall-dashboard.sh
@@ -1,105 +1,77 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://heimdall.site/
-function header_info {
-clear
-cat <<"EOF"
- _ _ _ _ ___ _ _ _
- /\ /\___(_)_ __ ___ __| | __ _| | | / \__ _ ___| |__ | |__ ___ __ _ _ __ __| |
- / /_/ / _ \ | '_ ` _ \ / _` |/ _` | | | / /\ / _` / __| '_ \| '_ \ / _ \ / _` | '__/ _` |
-/ __ / __/ | | | | | | (_| | (_| | | | / /_// (_| \__ \ | | | |_) | (_) | (_| | | | (_| |
-\/ /_/ \___|_|_| |_| |_|\__,_|\__,_|_|_| /___,' \__,_|___/_| |_|_.__/ \___/ \__,_|_| \__,_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Heimdall-Dashboard"
-var_disk="2"
+var_tags="dashboard"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/Heimdall ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]')
-if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop heimdall
- sleep 1
- msg_ok "Stopped ${APP}"
-
- msg_info "Backing up Data"
- cp -R /opt/Heimdall/database database-backup
- cp -R /opt/Heimdall/public public-backup
- sleep 1
- msg_ok "Backed up Data"
-
- msg_info "Updating Heimdall Dashboard to ${RELEASE}"
- wget -q https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz
- tar xzf ${RELEASE}.tar.gz
- VER=$(curl -s https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
- cp -R Heimdall-${VER}/* /opt/Heimdall
- cd /opt/Heimdall
- apt-get install -y composer &>/dev/null
- COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated Heimdall Dashboard to ${RELEASE}"
-
- msg_info "Restoring Data"
- cd ~
- cp -R database-backup/* /opt/Heimdall/database
- cp -R public-backup/* /opt/Heimdall/public
- sleep 1
- msg_ok "Restored Data"
-
- msg_info "Cleanup"
- rm -rf {${RELEASE}.tar.gz,Heimdall-${VER},public-backup,database-backup,Heimdall}
- sleep 1
- msg_ok "Cleaned"
-
- msg_info "Starting ${APP}"
- systemctl start heimdall.service
- sleep 2
- msg_ok "Started ${APP}"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}."
-fi
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/Heimdall ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/Heimdall/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]')
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop heimdall
+ sleep 1
+ msg_ok "Stopped ${APP}"
+ msg_info "Backing up Data"
+ cp -R /opt/Heimdall/database database-backup
+ cp -R /opt/Heimdall/public public-backup
+ sleep 1
+ msg_ok "Backed up Data"
+ msg_info "Updating Heimdall Dashboard to ${RELEASE}"
+ wget -q https://github.com/linuxserver/Heimdall/archive/${RELEASE}.tar.gz
+ tar xzf ${RELEASE}.tar.gz
+ VER=$(curl -s https://api.github.com/repos/linuxserver/Heimdall/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ cp -R Heimdall-${VER}/* /opt/Heimdall
+ cd /opt/Heimdall
+ apt-get install -y composer &>/dev/null
+ COMPOSER_ALLOW_SUPERUSER=1 composer dump-autoload &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated Heimdall Dashboard to ${RELEASE}"
+ msg_info "Restoring Data"
+ cd ~
+ cp -R database-backup/* /opt/Heimdall/database
+ cp -R public-backup/* /opt/Heimdall/public
+ sleep 1
+ msg_ok "Restored Data"
+ msg_info "Cleanup"
+ rm -rf {${RELEASE}.tar.gz,Heimdall-${VER},public-backup,database-backup,Heimdall}
+ sleep 1
+ msg_ok "Cleaned"
+ msg_info "Starting ${APP}"
+ systemctl start heimdall.service
+ sleep 2
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}."
+ fi
+ exit
}
start
@@ -107,5 +79,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:7990${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7990${CL}"
\ No newline at end of file
diff --git a/ct/hivemq.sh b/ct/hivemq.sh
index ed2b55c5b..6f055f1dc 100644
--- a/ct/hivemq.sh
+++ b/ct/hivemq.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.hivemq.com/
-function header_info {
-clear
-cat <<"EOF"
- __ ___ __ _______ ____________
- / / / (_) _____ / |/ / __ \ / ____/ ____/
- / /_/ / / | / / _ \/ /|_/ / / / / / / / __/
- / __ / /| |/ / __/ / / / /_/ / / /___/ /___
-/_/ /_/_/ |___/\___/_/ /_/\___\_\ \____/_____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="HiveMQ"
-var_disk="4"
+var_tags="mqtt"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -64,3 +41,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/hoarder.sh b/ct/hoarder.sh
new file mode 100644
index 000000000..6c66c24c5
--- /dev/null
+++ b/ct/hoarder.sh
@@ -0,0 +1,82 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 tteck
+# Author: MickLesk (Canbiz) & vhsdream
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://hoarder.app/
+
+# App Default Values
+APP="Hoarder"
+var_tags="bookmark"
+var_cpu="2"
+var_ram="4096"
+var_disk="8"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/hoarder ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/hoarder-app/hoarder/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ PREV_RELEASE=$(cat /opt/${APP}_version.txt)
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "${PREV_RELEASE}" ]]; then
+ msg_info "Stopping Services"
+ systemctl stop hoarder-web hoarder-workers hoarder-browser
+ msg_ok "Stopped Services"
+ msg_info "Updating ${APP} to v${RELEASE}"
+ cd /opt
+ mv /opt/hoarder/.env /opt/.env
+ rm -rf /opt/hoarder
+ wget -q "https://github.com/hoarder-app/hoarder/archive/refs/tags/v${RELEASE}.zip"
+ unzip -q v${RELEASE}.zip
+ mv hoarder-${RELEASE} /opt/hoarder
+ cd /opt/hoarder/apps/web
+ pnpm install --frozen-lockfile &>/dev/null
+ pnpm exec next build --experimental-build-mode compile &>/dev/null
+ cp -r /opt/hoarder/apps/web/.next/standalone/apps/web/server.js /opt/hoarder/apps/web
+ cd /opt/hoarder/apps/workers
+ pnpm install --frozen-lockfile &>/dev/null
+ export DATA_DIR=/opt/hoarder_data
+ cd /opt/hoarder/packages/db
+ pnpm migrate &>/dev/null
+ mv /opt/.env /opt/hoarder/.env
+ sed -i "s/SERVER_VERSION=${PREV_RELEASE}/SERVER_VERSION=${RELEASE}/" /opt/hoarder/.env
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting Services"
+ systemctl start hoarder-browser hoarder-workers hoarder-web
+ msg_ok "Started Services"
+ msg_info "Cleaning up"
+ rm -R /opt/v${RELEASE}.zip
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}."
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/homarr.sh b/ct/homarr.sh
index 315b893bb..a3c24270e 100644
--- a/ct/homarr.sh
+++ b/ct/homarr.sh
@@ -1,74 +1,79 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://homarr.dev/
-function header_info {
-clear
-cat <<"EOF"
- __ __
- / / / /___ ____ ___ ____ ___________
- / /_/ / __ \/ __ `__ \/ __ `/ ___/ ___/
- / __ / /_/ / / / / / / /_/ / / / /
-/_/ /_/\____/_/ /_/ /_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Homarr"
-var_disk="8"
+var_tags="arr;dashboard"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/homarr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP (Patience)"
-systemctl stop homarr
-cd /opt/homarr
-if ! git pull; then
- echo "Already up to date."
- systemctl start homarr
- echo "No update required."
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/homarr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/ajnart/homarr/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Services"
+ systemctl stop homarr
+ msg_ok "Services Stopped"
+
+ msg_info "Backing up Data"
+ mkdir -p /opt/homarr-data-backup
+ cp /opt/homarr/.env /opt/homarr-data-backup/.env
+ cp /opt/homarr/database/db.sqlite /opt/homarr-data-backup/db.sqlite
+ cp -r /opt/homarr/data/configs /opt/homarr-data-backup/configs
+ msg_ok "Backed up Data"
+
+ msg_info "Updating ${APP} to ${RELEASE}"
+ wget -q "https://github.com/ajnart/homarr/archive/refs/tags/v${RELEASE}.zip"
+ unzip -q v${RELEASE}.zip
+ rm -rf v${RELEASE}.zip
+ rm -rf /opt/homarr
+ mv homarr-${RELEASE} /opt/homarr
+ mv /opt/homarr-data-backup/.env /opt/homarr/.env
+ cd /opt/homarr
+ yarn install &>/dev/null
+ yarn build &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP}"
+
+ msg_info "Restoring Data"
+ rm -rf /opt/homarr/data/configs
+ mv /opt/homarr-data-backup/configs /opt/homarr/data/configs
+ mv /opt/homarr-data-backup/db.sqlite /opt/homarr/database/db.sqlite
+ yarn db:migrate &>/dev/null
+ rm -rf /opt/homarr-data-backup
+ msg_ok "Restored Data"
+
+ msg_info "Starting Services"
+ systemctl start homarr
+ msg_ok "Started Services"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
exit
-fi
-yarn install
-yarn build
-systemctl start homarr
-msg_ok "Updated $APP"
-exit
}
start
@@ -76,5 +81,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/homeassistant-core.sh b/ct/homeassistant-core.sh
index 560767a5b..733489b27 100644
--- a/ct/homeassistant-core.sh
+++ b/ct/homeassistant-core.sh
@@ -1,58 +1,33 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.home-assistant.io/
-function header_info {
- clear
- cat <<"EOF"
- _ _ _ _ ___
- /\ /\___ _ __ ___ ___ /_\ ___ ___(_)___| |_ __ _ _ __ | |_ / __\___ _ __ ___
- / /_/ / _ \| '_ ` _ \ / _ \ //_\\/ __/ __| / __| __/ _` | '_ \| __| / / / _ \| '__/ _ \
-/ __ / (_) | | | | | | __/ / _ \__ \__ \ \__ \ || (_| | | | | |_ / /__| (_) | | | __/
-\/ /_/ \___/|_| |_| |_|\___| \_/ \_/___/___/_|___/\__\__,_|_| |_|\__| \____/\___/|_| \___|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Home Assistant-Core"
-var_disk="8"
+var_tags="automation;smarthome"
var_cpu="2"
var_ram="1024"
+var_disk="8"
var_os="ubuntu"
var_version="24.04"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
if [[ ! -d /srv/homeassistant ]]; then
msg_error "No ${APP} Installation Found!"
exit
@@ -64,7 +39,6 @@ function update_script() {
"2" "Install HACS" OFF \
"3" "Install FileBrowser" OFF \
3>&1 1>&2 2>&3)
- header_info
if [ "$UPD" == "1" ]; then
if (whiptail --backtitle "Proxmox VE Helper Scripts" --defaultno --title "SELECT BRANCH" --yesno "Use Beta Branch?" 10 58); then
clear
@@ -111,13 +85,13 @@ function update_script() {
read -r -p "Would you like to use No Authentication? " prompt
msg_info "Installing FileBrowser"
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
- curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-arm64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
+ curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/$RELEASE/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then
filebrowser config init -a '0.0.0.0' &>/dev/null
filebrowser config set -a '0.0.0.0' &>/dev/null
filebrowser config set --auth.method=noauth &>/dev/null
- filebrowser users add ID 1 --perm.admin &>/dev/null
+ filebrowser users add ID 1 --perm.admin &>/dev/null
else
filebrowser config init -a '0.0.0.0' &>/dev/null
filebrowser config set -a '0.0.0.0' &>/dev/null
@@ -152,5 +126,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8123${CL}"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
diff --git a/ct/homeassistant.sh b/ct/homeassistant.sh
index 0c3ccf1aa..9df12ee63 100644
--- a/ct/homeassistant.sh
+++ b/ct/homeassistant.sh
@@ -1,58 +1,33 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.home-assistant.io/
-function header_info {
- clear
- cat <<"EOF"
- __ __ ___ _ __ __
- / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_
- / /_/ / __ \/ __ __ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ / __ \/ __/
- / __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_
-/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Home Assistant"
-var_disk="16"
+var_tags="automation;smarthome"
var_cpu="2"
var_ram="2048"
+var_disk="16"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
if [[ ! -d /var/lib/docker/volumes/hass_config/_data ]]; then
msg_error "No ${APP} Installation Found!"
exit
@@ -63,7 +38,7 @@ function update_script() {
"3" "Install HACS" OFF \
"4" "Install FileBrowser" OFF \
3>&1 1>&2 2>&3)
- header_info
+
if [ "$UPD" == "1" ]; then
msg_info "Updating All Containers"
CONTAINER_LIST="${1:-$(docker ps -q)}"
@@ -102,7 +77,7 @@ function update_script() {
IP=$(hostname -I | awk '{print $1}')
msg_info "Installing FileBrowser"
RELEASE=$(curl -fsSL https://api.github.com/repos/filebrowser/filebrowser/releases/latest | grep -o '"tag_name": ".*"' | sed 's/"//g' | sed 's/tag_name: //g')
- curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-arm64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
+ curl -fsSL https://github.com/filebrowser/filebrowser/releases/download/v2.23.0/linux-amd64-filebrowser.tar.gz | tar -xzv -C /usr/local/bin &>/dev/null
filebrowser config init -a '0.0.0.0' &>/dev/null
filebrowser config set -a '0.0.0.0' &>/dev/null
filebrowser users add admin helper-scripts.com --perm.admin &>/dev/null
@@ -135,7 +110,7 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8123${CL}
-Portainer should be reachable by going to the following URL.
- ${BL}https://${IP}:9443${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}HA: http://${IP}:8123${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}Portainer: http://${IP}:9443${CL}"
\ No newline at end of file
diff --git a/ct/homebox.sh b/ct/homebox.sh
index 65dcffc35..a697366d6 100644
--- a/ct/homebox.sh
+++ b/ct/homebox.sh
@@ -1,88 +1,60 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck | Co-Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://homebox.software/en/
-function header_info {
-clear
-cat <<"EOF"
- __ __ ____
- / / / /___ ____ ___ ___ / __ )____ _ __
- / /_/ / __ \/ __ `__ \/ _ \/ __ / __ \| |/_/
- / __ / /_/ / / / / / / __/ /_/ / /_/ /> <
-/_/ /_/\____/_/ /_/ /_/\___/_____/\____/_/|_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="HomeBox"
-var_disk="4"
+var_tags="inventory;household"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
function update_script() {
-header_info
-if [[ ! -f /opt/homebox ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-RELEASE=$(curl -s https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop homebox
- msg_ok "${APP} Stopped"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /opt/homebox ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/sysadminsmedia/homebox/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop homebox
+ msg_ok "${APP} Stopped"
- msg_info "Updating ${APP} to ${RELEASE}"
- cd /opt
- rm -rf homebox_bak
- mv homebox homebox_bak
- wget -qO- https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_x86_64.tar.gz | tar -xzf - -C /opt
- chmod +x /opt/homebox
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated Homebox"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt
+ rm -rf homebox_bak
+ mv homebox homebox_bak
+ wget -qO- https://github.com/sysadminsmedia/homebox/releases/download/${RELEASE}/homebox_Linux_x86_64.tar.gz | tar -xzf - -C /opt
+ chmod +x /opt/homebox
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated Homebox"
- msg_info "Starting ${APP}"
- systemctl start homebox
- msg_ok "Started ${APP}"
+ msg_info "Starting ${APP}"
+ systemctl start homebox
+ msg_ok "Started ${APP}"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -90,5 +62,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:7745${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7745${CL}"
\ No newline at end of file
diff --git a/ct/homebridge.sh b/ct/homebridge.sh
index 7c1593e22..007bfc411 100644
--- a/ct/homebridge.sh
+++ b/ct/homebridge.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://homebridge.io/
-function header_info {
-clear
-cat <<"EOF"
- __ ______ __ _____________ ____ ________ ____________
- / / / / __ \/ |/ / ____/ __ )/ __ \/ _/ __ \/ ____/ ____/
- / /_/ / / / / /|_/ / __/ / __ / /_/ // // / / / / __/ __/
- / __ / /_/ / / / / /___/ /_/ / _, _// // /_/ / /_/ / /___
-/_/ /_/\____/_/ /_/_____/_____/_/ |_/___/_____/\____/_____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Homebridge"
-var_disk="4"
+var_tags="smarthome;homekit"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/homebridge.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get install -y homebridge &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/homebridge.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get install -y homebridge &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8581${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8581${CL}"
\ No newline at end of file
diff --git a/ct/homepage.sh b/ct/homepage.sh
index 8250d56d1..d2f913a2d 100644
--- a/ct/homepage.sh
+++ b/ct/homepage.sh
@@ -1,88 +1,67 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://gethomepage.dev/
-function header_info {
-clear
-cat <<"EOF"
- __ __
- / / / /___ ____ ___ ___ ____ ____ _____ ____
- / /_/ / __ \/ __ `__ \/ _ \/ __ \/ __ `/ __ `/ _ \
- / __ / /_/ / / / / / / __/ /_/ / /_/ / /_/ / __/
-/_/ /_/\____/_/ /_/ /_/\___/ .___/\__,_/\__, /\___/
- /_/ /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Homepage"
-var_disk="3"
+var_tags="dashboard"
var_cpu="2"
var_ram="1024"
+var_disk="3"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/homepage ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
- if ! command -v npm >/dev/null 2>&1; then
- echo "Installing NPM..."
- apt-get install -y npm >/dev/null 2>&1
- npm install -g pnpm >/dev/null 2>&1
- echo "Installed NPM..."
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/homepage ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
fi
-fi
-RELEASE=$(curl -s https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Updating Homepage to v${RELEASE} (Patience)"
- systemctl stop homepage
- wget -q https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz
- tar -xzf v${RELEASE}.tar.gz
- rm -rf v${RELEASE}.tar.gz
- cp -r homepage-${RELEASE}/* /opt/homepage/
- rm -rf homepage-${RELEASE}
- cd /opt/homepage
- npx update-browserslist-db@latest
- pnpm install
- pnpm build
- systemctl start homepage
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated Homepage to v${RELEASE}"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
+ if ! command -v npm >/dev/null 2>&1; then
+ echo "Installing NPM..."
+ apt-get install -y npm >/dev/null 2>&1
+ npm install -g pnpm >/dev/null 2>&1
+ echo "Installed NPM..."
+ fi
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/gethomepage/homepage/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Updating Homepage to v${RELEASE} (Patience)"
+ systemctl stop homepage
+ wget -q https://github.com/gethomepage/homepage/archive/refs/tags/v${RELEASE}.tar.gz
+ tar -xzf v${RELEASE}.tar.gz
+ rm -rf v${RELEASE}.tar.gz
+ cp -r homepage-${RELEASE}/* /opt/homepage/
+ rm -rf homepage-${RELEASE}
+ cd /opt/homepage
+ npx update-browserslist-db@latest
+ pnpm install
+ export NEXT_PUBLIC_VERSION=v$RELEASE
+ export NEXT_PUBLIC_REVISION='source'
+ pnpm build
+ systemctl start homepage
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated Homepage to v${RELEASE}"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -90,5 +69,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
diff --git a/ct/homer.sh b/ct/homer.sh
index b2e7e767c..7b410241f 100644
--- a/ct/homer.sh
+++ b/ct/homer.sh
@@ -1,91 +1,68 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/bastienwirtz/homer
-function header_info {
-clear
-cat <<"EOF"
- __ __
- / / / /___ ____ ___ ___ _____
- / /_/ / __ \/ __ `__ \/ _ \/ ___/
- / __ / /_/ / / / / / / __/ /
-/_/ /_/\____/_/ /_/ /_/\___/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Homer"
-var_disk="2"
+var_tags="dashboard"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/homer ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Stopping ${APP}"
-systemctl stop homer
-msg_ok "Stopped ${APP}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/homer ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop homer
+ msg_ok "Stopped ${APP}"
-msg_info "Backing up assets directory"
-cd ~
-mkdir -p assets-backup
-cp -R /opt/homer/assets/. assets-backup
-msg_ok "Backed up assets directory"
+ msg_info "Backing up assets directory"
+ cd ~
+ mkdir -p assets-backup
+ cp -R /opt/homer/assets/. assets-backup
+ msg_ok "Backed up assets directory"
-msg_info "Updating ${APP}"
-rm -rf /opt/homer/*
-cd /opt/homer
-wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip
-unzip homer.zip &>/dev/null
-msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP}"
+ rm -rf /opt/homer/*
+ cd /opt/homer
+ wget -q https://github.com/bastienwirtz/homer/releases/latest/download/homer.zip
+ unzip homer.zip &>/dev/null
+ msg_ok "Updated ${APP}"
-msg_info "Restoring assets directory"
-cd ~
-cp -Rf assets-backup/. /opt/homer/assets/
-msg_ok "Restored assets directory"
+ msg_info "Restoring assets directory"
+ cd ~
+ cp -Rf assets-backup/. /opt/homer/assets/
+ msg_ok "Restored assets directory"
-msg_info "Cleaning"
-rm -rf assets-backup /opt/homer/homer.zip
-msg_ok "Cleaned"
+ msg_info "Cleaning"
+ rm -rf assets-backup /opt/homer/homer.zip
+ msg_ok "Cleaned"
-msg_info "Starting ${APP}"
-systemctl start homer
-msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ${APP}"
+ systemctl start homer
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -93,5 +70,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8010${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8010${CL}"
\ No newline at end of file
diff --git a/ct/hyperhdr.sh b/ct/hyperhdr.sh
index aff319d4d..64a4ca866 100644
--- a/ct/hyperhdr.sh
+++ b/ct/hyperhdr.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.hyperhdr.eu/
-function header_info {
-clear
-cat <<"EOF"
- __ __ __ ______ ____
- / / / /_ ______ ___ _____/ / / / __ \/ __ \
- / /_/ / / / / __ \/ _ \/ ___/ /_/ / / / / /_/ /
- / __ / /_/ / /_/ / __/ / / __ / /_/ / _, _/
-/_/ /_/\__, / .___/\___/_/ /_/ /_/_____/_/ |_|
- /____/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="HyperHDR"
-var_disk="4"
+var_tags="ambient lightning"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8090${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
\ No newline at end of file
diff --git a/ct/hyperion.sh b/ct/hyperion.sh
index 957e65c93..d862196ee 100644
--- a/ct/hyperion.sh
+++ b/ct/hyperion.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://hyperion-project.org/forum/
-function header_info {
-clear
-cat <<"EOF"
- __ __ _
- / / / /_ ______ ___ _____(_)___ ____
- / /_/ / / / / __ \/ _ \/ ___/ / __ \/ __ \
- / __ / /_/ / /_/ / __/ / / / /_/ / / / /
-/_/ /_/\__, / .___/\___/_/ /_/\____/_/ /_/
- /____/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Hyperion"
-var_disk="2"
+var_tags="ambient-lightning"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/hyperion.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get install -y hyperion &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/hyperion.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get install -y hyperion &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8090${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
\ No newline at end of file
diff --git a/ct/influxdb.sh b/ct/influxdb.sh
index 59a09ddfb..8d0e3cfd5 100644
--- a/ct/influxdb.sh
+++ b/ct/influxdb.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.influxdata.com/
-function header_info {
-clear
-cat <<"EOF"
- ____ ______ ____ ____
- / _/___ / __/ /_ ___ __/ __ \/ __ )
- / // __ \/ /_/ / / / / |/_/ / / / __ |
- _/ // / / / __/ / /_/ /> /_/ / /_/ /
-/___/_/ /_/_/ /_/\__,_/_/|_/_____/_____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="InfluxDB"
-var_disk="8"
+var_tags="database"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/influxdata.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/influxdata.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,3 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8086${CL}"
\ No newline at end of file
diff --git a/ct/inspircd.sh b/ct/inspircd.sh
new file mode 100644
index 000000000..15bd26cdb
--- /dev/null
+++ b/ct/inspircd.sh
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: kristocopani
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.inspircd.org/
+
+# App Default Values
+APP="InspIRCd"
+var_tags="IRC"
+var_cpu="1"
+var_ram="512"
+var_disk="2"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+
+ if [[ ! -f /lib/systemd/system/inspircd.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/inspircd/inspircd/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop inspircd
+ msg_ok "Stopped Service"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ cd /opt
+ wget -q https://github.com/inspircd/inspircd/releases/download/v${RELEASE}/inspircd_${RELEASE}.deb12u1_amd64.deb
+ apt-get install "./inspircd_${RELEASE}.deb12u1_amd64.deb" -y &>/dev/nul
+ echo "${RELEASE}" >"/opt/${APP}_version.txt"
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting Service"
+ systemctl start inspircd
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -rf /opt/inspircd_${RELEASE}.deb12u1_amd64.deb
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}."
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Server-Acces it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}${IP}:6667${CL}"
\ No newline at end of file
diff --git a/ct/iobroker.sh b/ct/iobroker.sh
index cd207d842..5e9f47b39 100644
--- a/ct/iobroker.sh
+++ b/ct/iobroker.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.iobroker.net/#en/intro
-function header_info {
-clear
-cat <<"EOF"
- _ ____ __
- (_)___ / __ )_________ / /_____ _____
- / / __ \/ __ / ___/ __ \/ //_/ _ \/ ___/
- / / /_/ / /_/ / / / /_/ / ,< / __/ /
-/_/\____/_____/_/ \____/_/|_|\___/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="ioBroker"
-var_disk="8"
+var_tags="automtation"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/iobroker ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/iobroker ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8081${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081${CL}"
\ No newline at end of file
diff --git a/ct/iventoy.sh b/ct/iventoy.sh
index 85bb36424..88da21121 100644
--- a/ct/iventoy.sh
+++ b/ct/iventoy.sh
@@ -1,61 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.iventoy.com/en/index.html
-function header_info {
-clear
-cat <<"EOF"
- _ _ __ __
- (_) | / /__ ____ / /_____ __ __
- / /| | / / _ \/ __ \/ __/ __ \/ / / /
- / / | |/ / __/ / / / /_/ /_/ / /_/ /
-/_/ |___/\___/_/ /_/\__/\____/\__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="iVentoy"
+var_tags="pxe-tool"
var_disk="2"
var_cpu="1"
var_ram="512"
var_os="debian"
var_version="12"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-if [[ ! -d /opt/iventoy ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/iventoy ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -63,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:26000/ ${CL} \n"
\ No newline at end of file
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:26000${CL}"
\ No newline at end of file
diff --git a/ct/jackett.sh b/ct/jackett.sh
index 0f4ffb853..d55e53619 100644
--- a/ct/jackett.sh
+++ b/ct/jackett.sh
@@ -1,75 +1,52 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/Jackett/Jackett
-function header_info {
-clear
-cat <<"EOF"
- __ __ __ __
- / /___ ______/ /_____ / /_/ /_
- __ / / __ `/ ___/ //_/ _ \/ __/ __/
-/ /_/ / /_/ / /__/ ,< / __/ /_/ /_
-\____/\__,_/\___/_/|_|\___/\__/\__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Jackett"
-var_disk="2"
+var_tags="torrent"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/jackett.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(wget -q https://github.com/Jackett/Jackett/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Updating ${APP}"
- wget -q https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz
- systemctl stop jackett
- rm -rf /opt/Jackett
- tar -xzf Jackett.Binaries.LinuxAMDx64.tar.gz -C /opt
- rm -rf Jackett.Binaries.LinuxAMDx64.tar.gz
- systemctl start jackett
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/jackett.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(wget -q https://github.com/Jackett/Jackett/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Updating ${APP}"
+ wget -q https://github.com/Jackett/Jackett/releases/download/$RELEASE/Jackett.Binaries.LinuxAMDx64.tar.gz
+ systemctl stop jackett
+ rm -rf /opt/Jackett
+ tar -xzf Jackett.Binaries.LinuxAMDx64.tar.gz -C /opt
+ rm -rf Jackett.Binaries.LinuxAMDx64.tar.gz
+ systemctl start jackett
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -77,5 +54,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:9117${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9117${CL}"
diff --git a/ct/jellyfin.sh b/ct/jellyfin.sh
index dcc04c70a..bc5ec5400 100644
--- a/ct/jellyfin.sh
+++ b/ct/jellyfin.sh
@@ -1,66 +1,43 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://jellyfin.org/
-function header_info {
-clear
-cat <<"EOF"
- __ ____ _____
- / /__ / / /_ __/ __(_)___
- __ / / _ \/ / / / / / /_/ / __ \
-/ /_/ / __/ / / /_/ / __/ / / / /
-\____/\___/_/_/\__, /_/ /_/_/ /_/
- /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Jellyfin"
-var_disk="8"
+var_tags="media"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="ubuntu"
var_version="22.04"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /usr/lib/jellyfin ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated ${APP} LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /usr/lib/jellyfin ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ apt-get --with-new-pkgs upgrade jellyfin jellyfin-server &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
}
start
@@ -68,5 +45,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8096${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8096${CL}"
diff --git a/ct/jellyseerr.sh b/ct/jellyseerr.sh
index 5b751ed27..018384f85 100644
--- a/ct/jellyseerr.sh
+++ b/ct/jellyseerr.sh
@@ -1,85 +1,63 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://docs.jellyseerr.dev/
-function header_info {
-clear
-cat <<"EOF"
- __ ____
- / /__ / / /_ __________ ___ __________
- __ / / _ \/ / / / / / ___/ _ \/ _ \/ ___/ ___/
-/ /_/ / __/ / / /_/ (__ ) __/ __/ / / /
-\____/\___/_/_/\__, /____/\___/\___/_/ /_/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Jellyseerr"
-var_disk="8"
+var_tags="media"
var_cpu="4"
var_ram="4096"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/jellyseerr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your Jellyseerr LXC to 4vcpu and 4096RAM for the build process before continuing" 10 75
-if ! command -v pnpm &> /dev/null; then
- msg_error "pnpm not found. Installing..."
- npm install -g pnpm &>/dev/null
-else
- msg_ok "pnpm is already installed."
-fi
-msg_info "Updating $APP"
-cd /opt/jellyseerr
-output=$(git pull --no-rebase)
-if echo "$output" | grep -q "Already up to date."
-then
- msg_ok "$APP is already up to date."
- exit
-fi
-systemctl stop jellyseerr
-export CYPRESS_INSTALL_BINARY=0
-pnpm install --frozen-lockfile &>/dev/null
-export NODE_OPTIONS="--max-old-space-size=3072"
-pnpm build &>/dev/null
-cat </etc/systemd/system/jellyseerr.service
+ header_info
+ check_container_storage
+ check_container_resources
+
+ if [[ ! -d /opt/jellyseerr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ if ! command -v pnpm &> /dev/null; then
+ msg_error "pnpm not found. Installing..."
+ npm install -g pnpm &>/dev/null
+ else
+ msg_ok "pnpm is already installed."
+ fi
+
+ msg_info "Updating $APP"
+ cd /opt/jellyseerr
+ output=$(git pull --no-rebase)
+
+ if echo "$output" | grep -q "Already up to date."; then
+ msg_ok "$APP is already up to date."
+ exit
+ fi
+
+ systemctl stop jellyseerr
+ rm -rf dist .next node_modules
+ export CYPRESS_INSTALL_BINARY=0
+ pnpm install --frozen-lockfile &>/dev/null
+ export NODE_OPTIONS="--max-old-space-size=3072"
+ pnpm build &>/dev/null
+
+ cat </etc/systemd/system/jellyseerr.service
[Unit]
Description=jellyseerr Service
After=network.target
@@ -94,21 +72,18 @@ ExecStart=/usr/bin/node dist/index.js
[Install]
WantedBy=multi-user.target
EOF
-systemctl daemon-reload
-systemctl start jellyseerr
-msg_ok "Updated $APP"
-exit
+
+ systemctl daemon-reload
+ systemctl start jellyseerr
+ msg_ok "Updated $APP"
+ exit
}
start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 2048
-pct set $CTID -cores 2
-msg_ok "Set Container to Normal Resources"
-
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5055${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
\ No newline at end of file
diff --git a/ct/jenkins.sh b/ct/jenkins.sh
new file mode 100644
index 000000000..235c43c8c
--- /dev/null
+++ b/ct/jenkins.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: kristocopani
+# License: MIT
+# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.jenkins.io/
+
+# App Default Values
+APP="Jenkins"
+var_tags="automation"
+var_cpu="2"
+var_ram="1024"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var/lib/jenkins ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
diff --git a/ct/kavita.sh b/ct/kavita.sh
index 94410c656..cb44ee221 100644
--- a/ct/kavita.sh
+++ b/ct/kavita.sh
@@ -1,70 +1,47 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.kavitareader.com/
-function header_info {
-clear
-cat <<"EOF"
- __ __ _ __
- / //_/___ __ __(_) /_____ _
- / ,< / __ `/ | / / / __/ __ `/
- / /| / /_/ /| |/ / / /_/ /_/ /
-/_/ |_\__,_/ |___/_/\__/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Kavita"
-var_disk="8"
+var_tags="reader"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/Kavita ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-systemctl stop kavita
-RELEASE=$(curl -s https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-arm64.tar.gz) --no-same-owner &>/dev/null
-rm -rf Kavita/config
-cp -r Kavita/* /opt/Kavita
-rm -rf Kavita
-systemctl start kavita
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/Kavita ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ systemctl stop kavita
+ RELEASE=$(curl -s https://api.github.com/repos/Kareadita/Kavita/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ tar -xvzf <(curl -fsSL https://github.com/Kareadita/Kavita/releases/download/$RELEASE/kavita-linux-x64.tar.gz) --no-same-owner &>/dev/null
+ rm -rf Kavita/config
+ cp -r Kavita/* /opt/Kavita
+ rm -rf Kavita
+ systemctl start kavita
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -72,5 +49,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
\ No newline at end of file
diff --git a/ct/keycloak.sh b/ct/keycloak.sh
index fe590eb4a..26d214f0d 100644
--- a/ct/keycloak.sh
+++ b/ct/keycloak.sh
@@ -1,90 +1,62 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.keycloak.org/
-function header_info {
-clear
-cat <<"EOF"
- __ __ __ __
- / //_/__ __ _______/ /___ ____ _/ /__
- / ,< / _ \/ / / / ___/ / __ \/ __ / //_/
- / /| / __/ /_/ / /__/ / /_/ / /_/ / ,<
-/_/ |_\___/\__, /\___/_/\____/\__,_/_/|_|
- /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Keycloak"
-var_disk="4"
+var_tags="access-management"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/keycloak.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/keycloak.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
-msg_info "Updating packages"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
+ msg_info "Updating packages"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
-RELEASE=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-msg_info "Downloading Keycloak v$RELEASE"
-cd /opt
-wget -q https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz
-$STD tar -xvf keycloak-$RELEASE.tar.gz
+ RELEASE=$(curl -s https://api.github.com/repos/keycloak/keycloak/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ msg_info "Updating Keycloak to v$RELEASE"
+ cd /opt
+ wget -q https://github.com/keycloak/keycloak/releases/download/$RELEASE/keycloak-$RELEASE.tar.gz
+ mv keycloak keycloak.old
+ tar -xzf keycloak-$RELEASE.tar.gz
+ cp -r keycloak.old/conf keycloak-$RELEASE
+ cp -r keycloak.old/providers keycloak-$RELEASE
+ cp -r keycloak.old/themes keycloak-$RELEASE
+ mv keycloak-$RELEASE keycloak
-msg_info "Merging configuration files"
-cp -r keycloak/conf keycloak-$RELEASE
-cp -r keycloak/providers keycloak-$RELEASE
-cp -r keycloak/themes keycloak-$RELEASE
+ msg_info "Delete temporary installation files"
+ rm keycloak-$RELEASE.tar.gz
+ rm -rf keycloak.old
-msg_info "Updating Keycloak"
-mv keycloak keycloak.old
-mv keycloak-$RELEASE keycloak
-
-msg_info "Delete temporary installation files"
-rm keycloak-$RELEASE.tar.gz
-rm -rf keycloak.old
-
-msg_info "Restating Keycloak"
-systemctl restart keycloak
-msg_ok "Updated Successfully"
-exit
+ msg_info "Restating Keycloak"
+ systemctl restart keycloak
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -92,5 +64,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080/admin${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/admin${CL}"
diff --git a/ct/kimai.sh b/ct/kimai.sh
new file mode 100644
index 000000000..3d499a733
--- /dev/null
+++ b/ct/kimai.sh
@@ -0,0 +1,80 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.kimai.org/
+
+# App Default Values
+APP="Kimai"
+var_tags="time-tracking"
+var_cpu="2"
+var_ram="2048"
+var_disk="7"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/kimai ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/kimai/kimai/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Apache2"
+ systemctl stop apache2
+ msg_ok "Stopped Apache2"
+
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cp /opt/kimai/.env /opt/.env
+ rm -rf /opt/kimai
+ wget -q "https://github.com/kimai/kimai/archive/refs/tags/${RELEASE}.zip"
+ unzip -q ${RELEASE}.zip
+ mv kimai-${RELEASE} /opt/kimai
+ mv /opt/.env /opt/kimai/.env
+ cd /opt/kimai
+ composer install --no-dev --optimize-autoloader &>/dev/null
+ bin/console kimai:update &>/dev/null
+ chown -R :www-data .
+ chmod -R g+r .
+ chmod -R g+rw var/
+ sudo chown -R www-data:www-data /opt/kimai
+ sudo chmod -R 755 /opt/kimai
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
+
+ msg_info "Starting Apache2"
+ systemctl start apache2
+ msg_ok "Started Apache2"
+
+ msg_info "Cleaning Up"
+ rm -rf ${RELEASE}.zip
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/komga.sh b/ct/komga.sh
new file mode 100644
index 000000000..05ece8a67
--- /dev/null
+++ b/ct/komga.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: madelyn (DysfunctionalProgramming)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://komga.org/
+
+# App Default Values
+APP="Komga"
+var_tags="media;eBook;comic"
+var_cpu="1"
+var_ram="2048"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /opt/komga/komga.jar ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ RELEASE=$(curl -s https://api.github.com/repos/gotson/komga/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop komga
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP} to ${RELEASE}"
+ wget -q "https://github.com/gotson/komga/releases/download/${RELEASE}/komga-${RELEASE}.jar"
+ rm -rf /opt/komga/komga.jar
+ mv -f komga-${RELEASE}.jar /opt/komga/komga.jar
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
+
+ msg_info "Starting ${APP}"
+ systemctl start komga
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}."
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:25600${CL}"
diff --git a/ct/kubo.sh b/ct/kubo.sh
index 3eafbb54b..414a6e929 100644
--- a/ct/kubo.sh
+++ b/ct/kubo.sh
@@ -1,74 +1,52 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck (tteckster) | Co-Author: ulmentflam
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/ipfs/kubo
-function header_info {
-clear
-cat <<"EOF"
- __ __ __
- / //_/_ __/ /_ ____
- / ,< / / / / __ \/ __ \
- / /| / /_/ / /_/ / /_/ /
-/_/ |_\__,_/_.___/\____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Kubo"
-var_disk="4"
+var_tags="sharing"
var_cpu="2"
var_ram="4096"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /usr/local/kubo ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(wget -q https://github.com/ipfs/kubo/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
-if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Updating $APP LXC"
- apt-get update &>/dev/null
- apt-get -y upgrade &>/dev/null
- wget -q "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-arm64.tar.gz"
- tar -xzf "kubo_${RELEASE}_linux-arm64.tar.gz" -C /usr/local
- systemctl restart ipfs.service
- echo "${RELEASE}" >/opt/${APP}_version.txt
- rm "kubo_${RELEASE}_linux-arm64.tar.gz"
- msg_ok "Updated $APP LXC"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /usr/local/kubo ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(wget -q https://github.com/ipfs/kubo/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ wget -q "https://github.com/ipfs/kubo/releases/download/${RELEASE}/kubo_${RELEASE}_linux-amd64.tar.gz"
+ tar -xzf "kubo_${RELEASE}_linux-amd64.tar.gz" -C /usr/local
+ systemctl restart ipfs.service
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ rm "kubo_${RELEASE}_linux-amd64.tar.gz"
+ msg_ok "Updated $APP LXC"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -76,5 +54,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5001/webui ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5001/webui${CL}"
\ No newline at end of file
diff --git a/ct/lazylibrarian.sh b/ct/lazylibrarian.sh
index c37e9d2fd..954bbb599 100644
--- a/ct/lazylibrarian.sh
+++ b/ct/lazylibrarian.sh
@@ -1,75 +1,51 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MountyMapleSyrup (MountyMapleSyrup)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck | Co-Author: MountyMapleSyrup (MountyMapleSyrup)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://gitlab.com/LazyLibrarian/LazyLibrarian
-function header_info {
-clear
-cat <<"EOF"
- __ __ _ __ _
- / / ____ _____ __ __/ / (_) /_ _________ ______(_)___ _____
- / / / __ `/_ / / / / / / / / __ \/ ___/ __ `/ ___/ / __ `/ __ \
- / /___/ /_/ / / /_/ /_/ / /___/ / /_/ / / / /_/ / / / / /_/ / / / /
-/_____/\__,_/ /___/\__, /_____/_/_.___/_/ \__,_/_/ /_/\__,_/_/ /_/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="LazyLibrarian"
-var_disk="4"
+var_tags="eBook"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/LazyLibrarian/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Stopping LazyLibrarian"
-systemctl stop lazylibrarian
-msg_ok "LazyLibrarian Stopped"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/LazyLibrarian/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping LazyLibrarian"
+ systemctl stop lazylibrarian
+ msg_ok "LazyLibrarian Stopped"
-msg_info "Updating $APP LXC"
-git -C /opt/LazyLibrarian pull origin master &>/dev/null
-msg_ok "Updated $APP LXC"
+ msg_info "Updating $APP LXC"
+ git -C /opt/LazyLibrarian pull origin master &>/dev/null
+ msg_ok "Updated $APP LXC"
-msg_info "Starting LazyLibrarian"
-systemctl start lazylibrarian
-msg_ok "Started LazyLibrarian"
+ msg_info "Starting LazyLibrarian"
+ systemctl start lazylibrarian
+ msg_ok "Started LazyLibrarian"
-msg_ok "Updated Successfully"
-exit
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -77,5 +53,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5299${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5299${CL}"
\ No newline at end of file
diff --git a/ct/lidarr.sh b/ct/lidarr.sh
index cf6e6dafb..4ce867560 100644
--- a/ct/lidarr.sh
+++ b/ct/lidarr.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://lidarr.audio/
-function header_info {
-clear
-cat <<"EOF"
- __ _ __
- / / (_)___/ /___ __________
- / / / / __ / __ `/ ___/ ___/
- / /___/ / /_/ / /_/ / / / /
-/_____/_/\__,_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Lidarr"
-var_disk="4"
+var_tags="arr;torrent;usenet"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var/lib/lidarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var/lib/lidarr/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8686${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8686${CL}"
\ No newline at end of file
diff --git a/ct/linkwarden.sh b/ct/linkwarden.sh
index f6b5fc68d..196bc52d3 100644
--- a/ct/linkwarden.sh
+++ b/ct/linkwarden.sh
@@ -1,87 +1,71 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://linkwarden.app/
-function header_info {
-clear
-cat <<"EOF"
- __ _ __ __
- / / (_)___ / /___ ______ __________/ /__ ____
- / / / / __ \/ //_/ | /| / / __ `/ ___/ __ / _ \/ __ \
- / /___/ / / / / ,< | |/ |/ / /_/ / / / /_/ / __/ / / /
-/_____/_/_/ /_/_/|_| |__/|__/\__,_/_/ \__,_/\___/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Linkwarden"
-var_disk="8"
+var_tags="bookmark"
var_cpu="2"
var_ram="2048"
+var_disk="12"
var_os="ubuntu"
var_version="22.04"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/linkwarden ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/linkwarden ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop linkwarden
+ msg_ok "Stopped ${APP}"
-RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop linkwarden
- msg_ok "Stopped ${APP}"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt
+ mv /opt/linkwarden/.env /opt/.env
+ RELEASE=$(curl -s https://api.github.com/repos/linkwarden/linkwarden/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ wget -q "https://github.com/linkwarden/linkwarden/archive/refs/tags/${RELEASE}.zip"
+ unzip -q ${RELEASE}.zip
+ mv linkwarden-${RELEASE:1} /opt/linkwarden
+ cd /opt/linkwarden
+ yarn &>/dev/null
+ npx playwright install-deps &>/dev/null
+ yarn playwright install &>/dev/null
+ cp /opt/.env /opt/linkwarden/.env
+ yarn build &>/dev/null
+ yarn prisma migrate deploy &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
- msg_info "Updating ${APP} to ${RELEASE}"
- cd /opt/linkwarden
- git pull
- yarn
- npx playwright install-deps
- yarn playwright install
- yarn prisma generate
- yarn build
- yarn prisma migrate deploy
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
-
- msg_info "Starting ${APP}"
- systemctl start linkwarden
- msg_ok "Started ${APP}"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}."
-fi
-exit
+ msg_info "Starting ${APP}"
+ systemctl start linkwarden
+ msg_ok "Started ${APP}"
+ msg_info "Cleaning up"
+ rm -rf /opt/${RELEASE}.zip
+ rm -rf /opt/linkwarden_bak
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}."
+ fi
+ exit
}
start
@@ -89,5 +73,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP}${CL} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/listmonk.sh b/ct/listmonk.sh
new file mode 100644
index 000000000..a2ed4716a
--- /dev/null
+++ b/ct/listmonk.sh
@@ -0,0 +1,77 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: bvdberg01
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://listmonk.app/
+
+# App Default Values
+APP="listmonk"
+var_tags="newsletter"
+var_cpu="1"
+var_ram="512"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/listmonk.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ RELEASE=$(curl -s https://api.github.com/repos/knadh/listmonk/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop listmonk
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ cd /opt
+ mv /opt/listmonk/ /opt/listmonk-backup
+ mkdir /opt/listmonk/
+ wget -q "https://github.com/knadh/listmonk/releases/download/v${RELEASE}/listmonk_${RELEASE}_linux_amd64.tar.gz"
+ tar -xzf "listmonk_${RELEASE}_linux_amd64.tar.gz" -C /opt/listmonk
+ mv /opt/listmonk-backup/config.toml /opt/listmonk/config.toml
+ mv /opt/listmonk-backup/uploads /opt/listmonk/uploads
+ /opt/listmonk/listmonk --upgrade --yes --config /opt/listmonk/config.toml &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP to v${RELEASE}"
+
+ msg_info "Starting ${APP}"
+ systemctl start listmonk
+ msg_ok "Started ${APP}"
+
+ msg_info "Cleaning up"
+ rm -rf "/opt/listmonk_${RELEASE}_linux_amd64.tar.gz"
+ rm -rf /opt/listmonk-backup/
+ msg_ok "Cleaned"
+
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
\ No newline at end of file
diff --git a/ct/lldap.sh b/ct/lldap.sh
index 03d72348c..83fef1166 100644
--- a/ct/lldap.sh
+++ b/ct/lldap.sh
@@ -1,75 +1,49 @@
#!/usr/bin/env bash
-# source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
-# # Copyright (c) 2021-2024 tteck
-# # Author: tteck (tteckster)
-# # Co-Author: remz1337
-# # License: MIT
-# # https://github.com/tteck/Proxmox/raw/main/LICENSE
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 tteck
+# Author: tteck (tteckster) | Co-Author: remz1337
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/lldap/lldap
-echo "Unsupported."
+# App Default Values
+APP="lldap"
+var_tags="ldap"
+var_cpu="1"
+var_ram="512"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
-# function header_info {
-# clear
-# cat <<"EOF"
-# ____ __
-# / / /___/ /___ _____
-# / / / __ / __ `/ __ \
-# / / / /_/ / /_/ / /_/ /
-# /_/_/\__,_/\__,_/ .___/
-# /_/
-
-# EOF
-# }
-# header_info
-# echo -e "Loading..."
-# APP="lldap"
-# var_disk="4"
-# var_cpu="1"
-# var_ram="512"
-# var_os="debian"
-# var_version="12"
-# variables
-# color
-# catch_errors
+# App Output & Base Settings
+header_info "$APP"
+base_settings
-# function default_settings() {
-# CT_TYPE="1"
-# PW=""
-# CT_ID=$NEXTID
-# HN=$NSAPP
-# DISK_SIZE="$var_disk"
-# CORE_COUNT="$var_cpu"
-# RAM_SIZE="$var_ram"
-# BRG="vmbr0"
-# NET="dhcp"
-# GATE=""
-# APT_CACHER=""
-# APT_CACHER_IP=""
-# DISABLEIP6="no"
-# MTU=""
-# SD=""
-# NS=""
-# MAC=""
-# VLAN=""
-# SSH="no"
-# VERB="no"
-# echo_default
-# }
+# Core
+variables
+color
+catch_errors
-# function update_script() {
-# header_info
-# if [[ ! -f /etc/systemd/system/lldap.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-# msg_info "Updating $APP"
-# apt update
-# apt upgrade -y lldap
-# msg_ok "Updated $APP"
-# exit
-# }
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/lldap.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ apt update
+ apt upgrade -y lldap
+ msg_ok "Updated $APP"
+ exit
+}
-# start
-# build_container
-# description
+start
+build_container
+description
-# msg_ok "Completed Successfully!\n"
-# echo -e "${APP} should be reachable by going to the following URL.
-# ${BL}http://${IP}:17170${CL} \n"
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:17170${CL}"
\ No newline at end of file
diff --git a/ct/lubelogger.sh b/ct/lubelogger.sh
new file mode 100644
index 000000000..9bdfbe70c
--- /dev/null
+++ b/ct/lubelogger.sh
@@ -0,0 +1,74 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: kristocopani
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://lubelogger.com/
+
+# App Default Values
+APP="LubeLogger"
+var_tags="verhicle;car"
+var_cpu="1"
+var_ram="512"
+var_disk="2"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/lubelogger.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/hargata/lubelog/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ RELEASE_TRIMMED=$(echo "${RELEASE}" | tr -d ".")
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop lubelogger
+ msg_ok "Stopped Service"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ cd /opt
+ wget -q https://github.com/hargata/lubelog/releases/download/v${RELEASE}/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
+ cp /opt/lubelogger/appsettings.json /opt/appsettings.json
+ rm -rf /opt/lubelogger
+ unzip -qq LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip -d lubelogger
+ chmod 700 /opt/lubelogger/CarCareTracker
+ mv -f /opt/appsettings.json /opt/lubelogger/appsettings.json
+ echo "${RELEASE}" >"/opt/${APP}_version.txt"
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting Service"
+ systemctl start lubelogger
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -rf /opt/LubeLogger_v${RELEASE_TRIMMED}_linux_x64.zip
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}."
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
\ No newline at end of file
diff --git a/ct/mafl.sh b/ct/mafl.sh
index 74d42f9a2..5f0bb0030 100644
--- a/ct/mafl.sh
+++ b/ct/mafl.sh
@@ -1,61 +1,37 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://mafl.hywax.space/
-function header_info {
- clear
- cat <<"EOF"
- __ ___ ______
- / |/ /___ _/ __/ /
- / /|_/ / __ `/ /_/ /
- / / / / /_/ / __/ /
-/_/ /_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Mafl"
-var_disk="6"
+var_tags="dashboard"
var_cpu="2"
var_ram="2048"
+var_disk="6"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
header_info
- if [[ ! -d /opt/mafl ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
- whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/mafl ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
RELEASE=$(curl -s https://api.github.com/repos/hywax/mafl/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
msg_info "Updating Mafl to v${RELEASE} (Patience)"
systemctl stop mafl
@@ -75,11 +51,7 @@ start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 1024
-pct set $CTID -cores 1
-msg_ok "Set Container to Normal Resources"
-
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/magicmirror.sh b/ct/magicmirror.sh
index e3cb250c5..dd068fea3 100644
--- a/ct/magicmirror.sh
+++ b/ct/magicmirror.sh
@@ -1,61 +1,37 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://magicmirror.builders/
-function header_info {
-clear
-cat <<"EOF"
- __ ___ _ __ ____
- / |/ /___ _____ _(_)____/ |/ (_)_____________ _____
- / /|_/ / __ / __ / / ___/ /|_/ / / ___/ ___/ __ \/ ___/
- / / / / /_/ / /_/ / / /__/ / / / / / / / / /_/ / /
-/_/ /_/\__,_/\__, /_/\___/_/ /_/_/_/ /_/ \____/_/
- /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="MagicMirror"
-var_disk="3"
+var_tags="smarthome"
var_cpu="1"
var_ram="512"
+var_disk="3"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/magicmirror ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/magicmirror ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..."
@@ -63,12 +39,12 @@ if [[ ! -d /opt/magicmirror ]]; then msg_error "No ${APP} Installation Found!";
echo "Installed NPM..."
fi
fi
-msg_info "Updating ${APP} LXC"
-cd /opt/magicmirror
-git pull &>/dev/null
-npm install --only=prod --omit=dev &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ msg_info "Updating ${APP} LXC"
+ cd /opt/magicmirror
+ git pull &>/dev/null
+ npm install --only=prod --omit=dev &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -76,5 +52,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
\ No newline at end of file
diff --git a/ct/mariadb.sh b/ct/mariadb.sh
index 4d34acc14..83446e94b 100644
--- a/ct/mariadb.sh
+++ b/ct/mariadb.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://mariadb.org/
-function header_info {
-clear
-cat <<"EOF"
- __ ___ _ ____ ____
- / |/ /___ ______(_)___ _/ __ \/ __ )
- / /|_/ / __ / ___/ / __ / / / / __ |
- / / / / /_/ / / / / /_/ / /_/ / /_/ /
-/_/ /_/\__,_/_/ /_/\__,_/_____/_____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="MariaDB"
-var_disk="4"
+var_tags="database"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/mariadb.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/mysql/mariadb.conf.d ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,3 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following IP:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}"
\ No newline at end of file
diff --git a/ct/matterbridge.sh b/ct/matterbridge.sh
index 53fe389c4..103898a91 100644
--- a/ct/matterbridge.sh
+++ b/ct/matterbridge.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/Luligu/matterbridge
-function header_info {
-clear
-cat <<"EOF"
- __ ___ __ __ __ _ __
- / |/ /___ _/ /_/ /____ _____/ /_ _____(_)___/ /___ ____
- / /|_/ / __ `/ __/ __/ _ \/ ___/ __ \/ ___/ / __ / __ `/ _ \
- / / / / /_/ / /_/ /_/ __/ / / /_/ / / / / /_/ / /_/ / __/
-/_/ /_/\__,_/\__/\__/\___/_/ /_.___/_/ /_/\__,_/\__, /\___/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Matterbridge"
-var_disk="4"
+var_tags="matter;smarthome"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /root/Matterbridge ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "Update via the Matterbridge UI"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /root/Matterbridge ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "Update via the Matterbridge UI"
+ exit
}
start
@@ -64,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8283${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8283${CL}"
\ No newline at end of file
diff --git a/ct/mediamtx.sh b/ct/mediamtx.sh
index fc1ef05b3..a823ef2a8 100644
--- a/ct/mediamtx.sh
+++ b/ct/mediamtx.sh
@@ -1,64 +1,40 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/bluenviron/mediamtx
-function header_info {
-clear
-cat <<"EOF"
- __ ___ ___ __ __________ __
- / |/ /__ ____/ (_)___ _/ |/ /_ __/ |/ /
- / /|_/ / _ \/ __ / / __ `/ /|_/ / / / | /
- / / / / __/ /_/ / / /_/ / / / / / / / |
-/_/ /_/\___/\__,_/_/\__,_/_/ /_/ /_/ /_/|_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="MediaMTX"
-var_disk="4"
+var_tags="media"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/mediamtx/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/mediamtx/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -66,3 +42,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/medusa.sh b/ct/medusa.sh
index 06b42f7cf..397881228 100644
--- a/ct/medusa.sh
+++ b/ct/medusa.sh
@@ -1,67 +1,54 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/pymedusa/Medusa.git
-function header_info {
-clear
-cat <<"EOF"
- __ ___ __
- / |/ /__ ____/ /_ ___________ _
- / /|_/ / _ \/ __ / / / / ___/ __ `/
- / / / / __/ /_/ / /_/ (__ ) /_/ /
-/_/ /_/\___/\__,_/\__,_/____/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Medusa"
-var_disk="6"
+var_tags="media"
var_cpu="2"
var_ram="1024"
+var_disk="6"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/medusa ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-systemctl stop medusa.service
-/opt/medusa
-git pull
-systemctl start medusa.service
-msg_ok "Successfully Updated ${APP}"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/medusa ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop medusa
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP}"
+ cd /opt/medusa
+ output=$(git pull --no-rebase)
+ if echo "$output" | grep -q "Already up to date."; then
+ msg_ok "$APP is already up to date."
+ exit
+ fi
+ msg_ok "Updated Successfully"
+
+ msg_info "Starting ${APP}"
+ systemctl start medusa
+ msg_ok "Started ${APP}"
+ exit
}
start
@@ -69,5 +56,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8081${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081${CL}"
\ No newline at end of file
diff --git a/ct/memos.sh b/ct/memos.sh
index ceb1fd913..50dba0580 100644
--- a/ct/memos.sh
+++ b/ct/memos.sh
@@ -1,88 +1,63 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.usememos.com/
-function header_info {
-clear
-cat <<"EOF"
- __ ___
- / |/ /__ ____ ___ ____ _____
- / /|_/ / _ \/ __ `__ \/ __ \/ ___/
- / / / / __/ / / / / / /_/ (__ )
-/_/ /_/\___/_/ /_/ /_/\____/____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Memos"
-var_disk="7"
+var_tags="notes"
var_cpu="2"
var_ram="2048"
+var_disk="7"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/memos ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP (Patience)"
-cd /opt/memos
-output=$(git pull --no-rebase)
-if echo "$output" | grep -q "Already up to date."
-then
- msg_ok "$APP is already up to date."
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/memos ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP (Patience)"
+ cd /opt/memos
+ output=$(git pull --no-rebase)
+ if echo "$output" | grep -q "Already up to date."; then
+ msg_ok "$APP is already up to date."
+ exit
+ fi
+ systemctl stop memos
+ cd /opt/memos/web
+ pnpm i --frozen-lockfile &>/dev/null
+ pnpm build &>/dev/null
+ cd /opt/memos
+ mkdir -p /opt/memos/server/dist
+ cp -r web/dist/* /opt/memos/server/dist/
+ cp -r web/dist/* /opt/memos/server/router/frontend/dist/
+ go build -o /opt/memos/memos -tags=embed bin/memos/main.go &>/dev/null
+ systemctl start memos
+ msg_ok "Updated $APP"
exit
-fi
-systemctl stop memos
-cd /opt/memos/web
-pnpm i --frozen-lockfile &>/dev/null
-pnpm build &>/dev/null
-cd /opt/memos
-mkdir -p /opt/memos/server/dist
-cp -r web/dist/* /opt/memos/server/dist/
-cp -r web/dist/* /opt/memos/server/router/frontend/dist/
-go build -o /opt/memos/memos -tags=embed bin/memos/main.go &>/dev/null
-systemctl start memos
-msg_ok "Updated $APP"
-exit
}
-
start
build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:9030${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9030${CL}"
\ No newline at end of file
diff --git a/ct/meshcentral.sh b/ct/meshcentral.sh
index 100e4db40..1545d004c 100644
--- a/ct/meshcentral.sh
+++ b/ct/meshcentral.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://meshcentral.com/
-function header_info {
-clear
-cat <<"EOF"
- __ ___ __ ______ __ __
- / |/ /__ _____/ /_ / ____/__ ____ / /__________ _/ /
- / /|_/ / _ \/ ___/ __ \/ / / _ \/ __ \/ __/ ___/ __ / /
- / / / / __(__ ) / / / /___/ __/ / / / /_/ / / /_/ / /
-/_/ /_/\___/____/_/ /_/\____/\___/_/ /_/\__/_/ \__,_/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="MeshCentral"
-var_disk="2"
+var_tags="remote-management"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/meshcentral ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/meshcentral ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/metube.sh b/ct/metube.sh
index 92a63e099..61642a8d9 100644
--- a/ct/metube.sh
+++ b/ct/metube.sh
@@ -1,94 +1,67 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/alexta69/metube
-function header_info {
-clear
-cat <<"EOF"
- __ ___ ______ __
- / |/ /__/_ __/_ __/ /_ ___
- / /|_/ / _ \/ / / / / / __ \/ _ \
- / / / / __/ / / /_/ / /_/ / __/
-/_/ /_/\___/_/ \__,_/_.___/\___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="MeTube"
-var_disk="10"
+var_tags="media;youtube"
var_cpu="1"
var_ram="1024"
+var_disk="10"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/metube ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-msg_info "Stopping ${APP} Service"
-systemctl stop metube
-msg_ok "Stopped ${APP} Service"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/metube ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP} Service"
+ systemctl stop metube
+ msg_ok "Stopped ${APP} Service"
-msg_info "Updating ${APP} to latest Git"
-cd /opt
-if [ -d metube_bak ]; then
- rm -rf metube_bak
-fi
-mv metube metube_bak
-git clone https://github.com/alexta69/metube /opt/metube >/dev/null 2>&1
-cd /opt/metube/ui
-npm install >/dev/null 2>&1
-node_modules/.bin/ng build >/dev/null 2>&1
-cd /opt/metube
-cp /opt/metube_bak/.env /opt/metube/
-pip3 install pipenv >/dev/null 2>&1
-pipenv install >/dev/null 2>&1
+ msg_info "Updating ${APP} to latest Git"
+ cd /opt
+ if [ -d metube_bak ]; then
+ rm -rf metube_bak
+ fi
+ mv metube metube_bak
+ git clone https://github.com/alexta69/metube /opt/metube >/dev/null 2>&1
+ cd /opt/metube/ui
+ npm install >/dev/null 2>&1
+ node_modules/.bin/ng build >/dev/null 2>&1
+ cd /opt/metube
+ cp /opt/metube_bak/.env /opt/metube/
+ pip3 install pipenv >/dev/null 2>&1
+ pipenv install >/dev/null 2>&1
-if [ -d "/opt/metube_bak" ]; then
-rm -rf /opt/metube_bak
-fi
-msg_ok "Updated ${APP} to latest Git"
+ if [ -d "/opt/metube_bak" ]; then
+ rm -rf /opt/metube_bak
+ fi
+ msg_ok "Updated ${APP} to latest Git"
-msg_info "Starting ${APP} Service"
-systemctl start metube
-sleep 1
-msg_ok "Started ${APP} Service"
-msg_ok "Updated Successfully!\n"
-exit
+ msg_info "Starting ${APP} Service"
+ systemctl start metube
+ sleep 1
+ msg_ok "Started ${APP} Service"
+ msg_ok "Updated Successfully!\n"
+ exit
}
start
@@ -96,5 +69,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8081${CL} \n"
\ No newline at end of file
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8081${CL}"
\ No newline at end of file
diff --git a/ct/mongodb.sh b/ct/mongodb.sh
index a79c8c320..2dcaae321 100644
--- a/ct/mongodb.sh
+++ b/ct/mongodb.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.mongodb.com/de-de
-function header_info {
-clear
-cat <<"EOF"
- __ ___ ____ ____
- / |/ /___ ____ ____ _____ / __ \/ __ )
- / /|_/ / __ \/ __ \/ __ `/ __ \/ / / / __ |
- / / / / /_/ / / / / /_/ / /_/ / /_/ / /_/ /
-/_/ /_/\____/_/ /_/\__, /\____/_____/_____/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="MongoDB"
-var_disk="4"
+var_tags="database"
var_cpu="1"
var_ram="512"
-var_os="ubuntu"
-var_version="22.04"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/mongodb-org-7.0.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/mongodb-org-7.0.list && ! -f /etc/apt/sources.list.d/mongodb-org-8.0.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,3 +44,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
diff --git a/ct/motioneye.sh b/ct/motioneye.sh
index e3ce709a9..5eab31d38 100644
--- a/ct/motioneye.sh
+++ b/ct/motioneye.sh
@@ -1,64 +1,41 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/motioneye-project/motioneye
-function header_info {
-clear
-cat <<"EOF"
- __ ___ __ _
- / |/ /___ / /_(_)___ ____ ___ __ _____
- / /|_/ / __ \/ __/ / __ \/ __ \/ _ \/ / / / _ \
- / / / / /_/ / /_/ / /_/ / / / / __/ /_/ / __/
-/_/ /_/\____/\__/_/\____/_/ /_/\___/\__, /\___/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Motioneye"
-var_disk="8"
+var_tags="nvr"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/motioneye.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-pip install motioneye --upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/motioneye.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ pip install motioneye --upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -66,5 +43,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8765${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8765${CL}"
\ No newline at end of file
diff --git a/ct/mqtt.sh b/ct/mqtt.sh
index 86aa3c871..335d25742 100644
--- a/ct/mqtt.sh
+++ b/ct/mqtt.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://mosquitto.org/
-function header_info {
-clear
-cat <<"EOF"
- __ ___ ____ _ ____________
- / |/ /___ _____/ __ \__ __(_)_ __/_ __/___
- / /|_/ / __ \/ ___/ / / / / / / / / / / / / __ \
- / / / / /_/ (__ ) /_/ / /_/ / / / / / / / /_/ /
-/_/ /_/\____/____/\___\_\__,_/_/ /_/ /_/ \____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="MQTT"
-var_disk="2"
+var_tags="mqtt"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/mosquitto/conf.d/default.conf ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/mosquitto/conf.d/default.conf ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,3 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following IP:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}${IP}:1883${CL}"
\ No newline at end of file
diff --git a/ct/mylar3.sh b/ct/mylar3.sh
new file mode 100644
index 000000000..88816bf4c
--- /dev/null
+++ b/ct/mylar3.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: davalanche
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/mylar3/mylar3
+
+# App Default Values
+APP="Mylar3"
+var_tags="torrent;downloader;comic"
+var_cpu="1"
+var_ram="512"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ if [[ ! -d /opt/mylar3 ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/mylar3/mylar3/releases/latest | jq -r '.tag_name')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Updating ${APP} to ${RELEASE}"
+ rm -rf /opt/mylar3/* /opt/mylar3/.*
+ wget -qO- https://github.com/mylar3/mylar3/archive/refs/tags/${RELEASE}.tar.gz | tar -xz --strip-components=1 -C /opt/mylar3
+ systemctl restart mylar3
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
\ No newline at end of file
diff --git a/ct/myspeed.sh b/ct/myspeed.sh
index eaf8d3b6a..69de5d148 100644
--- a/ct/myspeed.sh
+++ b/ct/myspeed.sh
@@ -1,96 +1,68 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck (tteckster) | Co-Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://myspeed.dev/
-function header_info {
-clear
-cat <<"EOF"
- __ ___ _____ __
- / |/ /_ __/ ___/____ ___ ___ ____/ /
- / /|_/ / / / /\__ \/ __ \/ _ \/ _ \/ __ /
- / / / / /_/ /___/ / /_/ / __/ __/ /_/ /
-/_/ /_/\__, //____/ .___/\___/\___/\__,_/
- /____/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="MySpeed"
-var_disk="4"
+var_tags="tracking"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/myspeed ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-RELEASE=$(wget -q https://github.com/gnmyt/myspeed/releases/latest -O - | grep "title>Release" | cut -d " " -f 5)
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/myspeed ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(wget -q https://github.com/gnmyt/myspeed/releases/latest -O - | grep "title>Release" | cut -d " " -f 5)
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping ${APP} Service"
- systemctl stop myspeed
- msg_ok "Stopped ${APP} Service"
+ msg_info "Stopping ${APP} Service"
+ systemctl stop myspeed
+ msg_ok "Stopped ${APP} Service"
- msg_info "Updating ${APP} to ${RELEASE}"
- cd /opt
- rm -rf myspeed_bak
- mv myspeed myspeed_bak
- wget -q https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip
- unzip -q MySpeed-$RELEASE.zip -d myspeed
- cd myspeed
- npm install >/dev/null 2>&1
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt
+ rm -rf myspeed_bak
+ mv myspeed myspeed_bak
+ wget -q https://github.com/gnmyt/myspeed/releases/download/v$RELEASE/MySpeed-$RELEASE.zip
+ unzip -q MySpeed-$RELEASE.zip -d myspeed
+ cd myspeed
+ npm install >/dev/null 2>&1
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
- msg_info "Starting ${APP} Service"
- systemctl start myspeed
- msg_ok "Started ${APP} Service"
+ msg_info "Starting ${APP} Service"
+ systemctl start myspeed
+ msg_ok "Started ${APP} Service"
- msg_info "Cleaning up"
- rm -rf MySpeed-$RELEASE.zip
- msg_ok "Cleaned"
+ msg_info "Cleaning up"
+ rm -rf MySpeed-$RELEASE.zip
+ msg_ok "Cleaned"
- msg_ok "Updated Successfully!\n"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_ok "Updated Successfully!\n"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -98,5 +70,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:5216${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5216${CL}"
\ No newline at end of file
diff --git a/ct/mysql.sh b/ct/mysql.sh
index 17fe996b2..9c43b59e6 100644
--- a/ct/mysql.sh
+++ b/ct/mysql.sh
@@ -1,72 +1,49 @@
#!/usr/bin/env bash
-# source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
-# # Copyright (c) 2021-2024 tteck
-# # Author: tteck
-# # Co-Author: MickLesk (Canbiz)
-# # License: MIT
-# # https://github.com/tteck/Proxmox/raw/main/LICENSE
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 tteck
+# Author: tteck | Co-Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.mysql.com/
-echo "Unsupported."
+# App Default Values
+APP="MySQL"
+var_tags="database"
+var_cpu="1"
+var_ram="1024"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
-# function header_info {
-# clear
-# cat <<"EOF"
-# __ ___ _____ ____ __
-# / |/ /_ __/ ___// __ \ / /
-# / /|_/ / / / /\__ \/ / / / / /
-# / / / / /_/ /___/ / /_/ / / /___
-# /_/ /_/\__, //____/\___\_\/_____/
-# /____/
-# EOF
-# }
-# header_info
-# echo -e "Loading..."
-# APP="MySQL"
-# var_disk="4"
-# var_cpu="1"
-# var_ram="1024"
-# var_os="debian"
-# var_version="12"
-# variables
-# color
-# catch_errors
+# App Output & Base Settings
+header_info "$APP"
+base_settings
-# function default_settings() {
-# CT_TYPE="1"
-# PW=""
-# CT_ID=$NEXTID
-# HN=$NSAPP
-# DISK_SIZE="$var_disk"
-# CORE_COUNT="$var_cpu"
-# RAM_SIZE="$var_ram"
-# BRG="vmbr0"
-# NET="dhcp"
-# GATE=""
-# APT_CACHER=""
-# APT_CACHER_IP=""
-# DISABLEIP6="no"
-# MTU=""
-# SD=""
-# NS=""
-# MAC=""
-# VLAN=""
-# SSH="no"
-# VERB="no"
-# echo_default
-# }
+# Core
+variables
+color
+catch_errors
-# function update_script() {
-# header_info
-# if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-# msg_info "Updating ${APP} LXC"
-# apt-get update &>/dev/null
-# apt-get -y upgrade &>/dev/null
-# msg_ok "Updated Successfully"
-# exit
-# }
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /usr/share/keyrings/mysql.gpg ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
+}
-# start
-# build_container
-# description
+start
+build_container
+description
-# msg_ok "Completed Successfully!\n"
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following IP:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}${IP}:3306${CL}"
diff --git a/ct/n8n.sh b/ct/n8n.sh
index a2fc922e0..e12caecd7 100644
--- a/ct/n8n.sh
+++ b/ct/n8n.sh
@@ -1,61 +1,37 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://n8n.io/
-function header_info {
-clear
-cat <<"EOF"
- ___
- / _ \
- _ __ | (_) |____
- | _ \ > _ <| _ \
- | | | | (_) | | | |
- |_| |_|\___/|_| |_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="n8n"
-var_disk="6"
+var_tags="automation"
var_cpu="2"
var_ram="2048"
+var_disk="6"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/n8n.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/n8n.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..."
@@ -63,11 +39,11 @@ if [[ ! -f /etc/systemd/system/n8n.service ]]; then msg_error "No ${APP} Install
echo "Installed NPM..."
fi
fi
-msg_info "Updating ${APP} LXC"
-npm update -g n8n &>/dev/null
-systemctl restart n8n
-msg_ok "Updated Successfully"
-exit
+ msg_info "Updating ${APP} LXC"
+ npm update -g n8n &>/dev/null
+ systemctl restart n8n
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -75,5 +51,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5678${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5678${CL}"
\ No newline at end of file
diff --git a/ct/navidrome.sh b/ct/navidrome.sh
index de84e241f..3c606f687 100644
--- a/ct/navidrome.sh
+++ b/ct/navidrome.sh
@@ -1,76 +1,55 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.navidrome.org/
-function header_info {
-clear
-cat <<"EOF"
- _ __ _ __
- / | / /___ __ __(_)___/ /________ ____ ___ ___
- / |/ / __ / | / / / __ / ___/ __ \/ __ __ \/ _ \
- / /| / /_/ /| |/ / / /_/ / / / /_/ / / / / / / __/
-/_/ |_/\__,_/ |___/_/\__,_/_/ \____/_/ /_/ /_/\___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Navidrome"
-var_disk="4"
+var_tags="music"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/navidrome ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -s https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-msg_info "Stopping ${APP}"
-systemctl stop navidrome.service
-msg_ok "Stopped Navidrome"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/navidrome ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/navidrome/navidrome/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ msg_info "Stopping ${APP}"
+ systemctl stop navidrome
+ msg_ok "Stopped Navidrome"
-msg_info "Updating to v${RELEASE}"
-wget https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_arm64.tar.gz -O Navidrome.tar.gz &>/dev/null
-tar -xvzf Navidrome.tar.gz -C /opt/navidrome/ &>/dev/null
-msg_ok "Updated ${APP}"
-rm Navidrome.tar.gz
+ msg_info "Updating to v${RELEASE}"
+ cd /opt
+ wget -q https://github.com/navidrome/navidrome/releases/download/v${RELEASE}/navidrome_${RELEASE}_linux_amd64.tar.gz -O Navidrome.tar.gz
+ tar -xvzf Navidrome.tar.gz -C /opt/navidrome/ &>/dev/null
+ chmod +x /opt/navidrome/navidrome
+ msg_ok "Updated ${APP}"
+ rm -rf /opt/Navidrome.tar.gz
-msg_info "${GN} Starting ${APP}"
-systemctl start navidrome.service
-msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ${APP}"
+ systemctl start navidrome.service
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -78,5 +57,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:4533${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:4533${CL}"
diff --git a/ct/neo4j.sh b/ct/neo4j.sh
index 39f9cc2d4..aa37e39ac 100644
--- a/ct/neo4j.sh
+++ b/ct/neo4j.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: havardthom
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck | Co-Author: havardthom
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://neo4j.com/product/neo4j-graph-database/
-function header_info {
-clear
-cat <<"EOF"
- _ __ __ __ _
- / | / /__ ____ / // / (_)
- / |/ / _ \/ __ \/ // /_/ /
- / /| / __/ /_/ /__ __/ /
-/_/ |_/\___/\____/ /_/_/ /
- /___/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Neo4j"
-var_disk="4"
+var_tags="database"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /etc/neo4j ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/neo4j ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Browser should be reachable by going to the following URL.
- ${BL}http://${IP}:7474${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7474${CL}"
\ No newline at end of file
diff --git a/ct/netbox.sh b/ct/netbox.sh
new file mode 100644
index 000000000..bfa96d3f7
--- /dev/null
+++ b/ct/netbox.sh
@@ -0,0 +1,90 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: bvdberg01
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://netboxlabs.com/
+
+# App Default Values
+APP="NetBox"
+var_tags="network"
+var_cpu="2"
+var_ram="2048"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/netbox.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ RELEASE=$(curl -s https://api.github.com/repos/netbox-community/netbox/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+
+ msg_info "Stopping ${APP}"
+ systemctl stop netbox netbox-rq
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating $APP to v${RELEASE}"
+ mv /opt/netbox/ /opt/netbox-backup
+ cd /opt
+ wget -q "https://github.com/netbox-community/netbox/archive/refs/tags/v${RELEASE}.zip"
+ unzip -q "v${RELEASE}.zip"
+ mv /opt/netbox-${RELEASE}/ /opt/netbox/
+
+ cp -r /opt/netbox-backup/netbox/netbox/configuration.py /opt/netbox/netbox/netbox/
+ cp -r /opt/netbox-backup/netbox/media/ /opt/netbox/netbox/
+ cp -r /opt/netbox-backup/netbox/scripts /opt/netbox/netbox/
+ cp -r /opt/netbox-backup/netbox/reports /opt/netbox/netbox/
+ cp -r /opt/netbox-backup/gunicorn.py /opt/netbox/
+
+ if [ -f /opt/netbox-backup/local_requirements.txt ]; then
+ cp -r /opt/netbox-backup/local_requirements.txt /opt/netbox/
+ fi
+
+ if [ -f /opt/netbox-backup/netbox/netbox/ldap_config.py ]; then
+ cp -r /opt/netbox-backup/netbox/netbox/ldap_config.py /opt/netbox/netbox/netbox/
+ fi
+
+ /opt/netbox/upgrade.sh &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP to v${RELEASE}"
+
+ msg_info "Starting ${APP}"
+ systemctl start netbox netbox-rq
+ msg_ok "Started ${APP}"
+
+ msg_info "Cleaning up"
+ rm -r "/opt/v${RELEASE}.zip"
+ rm -r /opt/netbox-backup
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/nextcloudpi.sh b/ct/nextcloudpi.sh
index 64844a20b..6aa98306d 100644
--- a/ct/nextcloudpi.sh
+++ b/ct/nextcloudpi.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.turnkeylinux.org/nextcloud
-function header_info {
-clear
-cat <<"EOF"
- _ __ __ ________ ______ _
- / | / /__ _ __/ /_/ ____/ /___ __ ______/ / __ \(_)
- / |/ / _ \| |/_/ __/ / / / __ \/ / / / __ / /_/ / /
- / /| / __/> /_/ /___/ / /_/ / /_/ / /_/ / ____/ /
-/_/ |_/\___/_/|_|\__/\____/_/\____/\__,_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="NextCloudPi"
-var_disk="8"
+var_tags="cloud"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /lib/systemd/system/nextcloud-domain.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /lib/systemd/system/nextcloud-domain.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}https://${IP}/${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/nextpvr.sh b/ct/nextpvr.sh
new file mode 100644
index 000000000..52ef0d31a
--- /dev/null
+++ b/ct/nextpvr.sh
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: MickLesk (Canbiz)
+# License: MIT
+# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Source: https://nextpvr.com/
+
+# App Default Values
+APP="NextPVR"
+var_tags="pvr"
+var_cpu="1"
+var_ram="1024"
+var_disk="5"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/nextpvr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop nextpvr-server
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating LXC packages"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated LXC packages"
+
+ msg_info "Updating ${APP}"
+ cd /opt
+ wget -q https://nextpvr.com/nextpvr-helper.deb
+ dpkg -i nextpvr-helper.deb &>/dev/null
+ msg_ok "Updated ${APP}"
+
+ msg_info "Starting ${APP}"
+ systemctl start nextpvr-server
+ msg_ok "Started ${APP}"
+
+ msg_info "Cleaning Up"
+ rm -rf /opt/nextpvr-helper.deb
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8866${CL}"
\ No newline at end of file
diff --git a/ct/nginxproxymanager.sh b/ct/nginxproxymanager.sh
index 44121774b..179da1740 100644
--- a/ct/nginxproxymanager.sh
+++ b/ct/nginxproxymanager.sh
@@ -1,60 +1,33 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://nginxproxymanager.com/
-function header_info {
- clear
- cat <<"EOF"
- _ __ _ ____ __ ___
- / | / /___ _(_)___ _ __ / __ \_________ __ ____ __ / |/ /___ _____ ____ _____ ____ _____
- / |/ / __ / / __ \| |/_/ / /_/ / ___/ __ \| |/_/ / / / / /|_/ / __ / __ \/ __ / __ / _ \/ ___/
- / /| / /_/ / / / / /> < / ____/ / / /_/ /> /_/ / / / / / /_/ / / / / /_/ / /_/ / __/ /
-/_/ |_/\__, /_/_/ /_/_/|_| /_/ /_/ \____/_/|_|\__, / /_/ /_/\__,_/_/ /_/\__,_/\__, /\___/_/
- /____/ /____/ /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Nginx Proxy Manager"
-var_disk="4"
+var_tags="proxy"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
header_info
+ check_container_storage
+ check_container_resources
if [[ ! -f /lib/systemd/system/npm.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
@@ -187,5 +160,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:81${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:81${CL}"
\ No newline at end of file
diff --git a/ct/nocodb.sh b/ct/nocodb.sh
index 193c59ce1..f5a5a616a 100644
--- a/ct/nocodb.sh
+++ b/ct/nocodb.sh
@@ -1,69 +1,46 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.nocodb.com/
-function header_info {
-clear
-cat <<"EOF"
- _ __ ____ ____
- / | / /___ ____ ___ / __ \/ __ )
- / |/ / __ \/ ___/ __ \/ / / / __ |
- / /| / /_/ / /__/ /_/ / /_/ / /_/ /
-/_/ |_/\____/\___/\____/_____/_____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="NocoDB"
-var_disk="4"
+var_tags="noCode"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/nocodb.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-systemctl stop nocodb.service
-cd /opt/nocodb
-rm -rf nocodb
-curl -s http://get.nocodb.com/linux-arm64 -o nocodb -L
-chmod +x nocodb
-systemctl start nocodb.service
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/nocodb.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ systemctl stop nocodb.service
+ cd /opt/nocodb
+ rm -rf nocodb
+ curl -s http://get.nocodb.com/linux-x64 -o nocodb -L
+ chmod +x nocodb
+ systemctl start nocodb.service
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -71,5 +48,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080/dashboard${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/dashboard${CL}"
\ No newline at end of file
diff --git a/ct/node-red.sh b/ct/node-red.sh
index f2c73789b..a9a615a95 100644
--- a/ct/node-red.sh
+++ b/ct/node-red.sh
@@ -1,123 +1,100 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://nodered.org/
-function header_info {
-clear
-cat <<"EOF"
- _ __ __ ____ __
- / | / /___ ____/ /__ / __ \___ ____/ /
- / |/ / __ \/ __ / _ \ / /_/ / _ \/ __ /
- / /| / /_/ / /_/ / __/ / _, _/ __/ /_/ /
-/_/ |_/\____/\__,_/\___/ /_/ |_|\___/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Node-Red"
-var_disk="4"
+var_tags="automation"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-if [[ ! -d /root/.node-red ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
- "1" "Update ${APP}" ON \
- "2" "Install Themes" OFF \
- 3>&1 1>&2 2>&3)
-header_info
-if [ "$UPD" == "1" ]; then
- if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
- if ! command -v npm >/dev/null 2>&1; then
- msg_info "Installing NPM"
- apt-get install -y npm >/dev/null 2>&1
- msg_ok "Installed NPM"
- fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /root/.node-red ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
fi
-msg_info "Stopping ${APP}"
-systemctl stop nodered
-msg_ok "Stopped ${APP}"
-
-msg_info "Updating ${APP}"
-npm install -g --unsafe-perm node-red &>/dev/null
-msg_ok "Updated ${APP}"
-
-msg_info "Starting ${APP}"
-systemctl start nodered
-msg_ok "Started ${APP}"
-msg_ok "Update Successful"
-exit
-fi
-if [ "$UPD" == "2" ]; then
-THEME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NODE-RED THEMES" --radiolist --cancel-button Exit-Script "Choose Theme" 15 58 6 \
- "aurora" "" OFF \
- "cobalt2" "" OFF \
- "dark" "" OFF \
- "dracula" "" OFF \
- "espresso-libre" "" OFF \
- "github-dark" "" OFF \
- "github-dark-default" "" OFF \
- "github-dark-dimmed" "" OFF \
- "midnight-red" "" ON \
- "monoindustrial" "" OFF \
- "monokai" "" OFF \
- "monokai-dimmed" "" OFF \
- "noctis" "" OFF \
- "oceanic-next" "" OFF \
- "oled" "" OFF \
- "one-dark-pro" "" OFF \
- "one-dark-pro-darker" "" OFF \
- "solarized-dark" "" OFF \
- "solarized-light" "" OFF \
- "tokyo-night" "" OFF \
- "tokyo-night-light" "" OFF \
- "tokyo-night-storm" "" OFF \
- "totallyinformation" "" OFF \
- "zenburn" "" OFF \
+ UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 2 \
+ "1" "Update ${APP}" ON \
+ "2" "Install Themes" OFF \
3>&1 1>&2 2>&3)
-header_info
-msg_info "Installing ${THEME} Theme"
-cd /root/.node-red
-sed -i 's|// theme: ".*",|theme: "",|g' /root/.node-red/settings.js
-npm install @node-red-contrib-themes/theme-collection &>/dev/null
-sed -i "{s/theme: ".*"/theme: '${THEME}',/g}" /root/.node-red/settings.js
-systemctl restart nodered
-msg_ok "Installed ${THEME} Theme"
-exit
-fi
+ if [ "$UPD" == "1" ]; then
+ if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
+ if ! command -v npm >/dev/null 2>&1; then
+ msg_info "Installing NPM"
+ apt-get install -y npm >/dev/null 2>&1
+ msg_ok "Installed NPM"
+ fi
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop nodered
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP}"
+ npm install -g --unsafe-perm node-red &>/dev/null
+ msg_ok "Updated ${APP}"
+
+ msg_info "Starting ${APP}"
+ systemctl start nodered
+ msg_ok "Started ${APP}"
+ msg_ok "Update Successful"
+ exit
+ fi
+ if [ "$UPD" == "2" ]; then
+ THEME=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "NODE-RED THEMES" --radiolist --cancel-button Exit-Script "Choose Theme" 15 58 6 \
+ "aurora" "" OFF \
+ "cobalt2" "" OFF \
+ "dark" "" OFF \
+ "dracula" "" OFF \
+ "espresso-libre" "" OFF \
+ "github-dark" "" OFF \
+ "github-dark-default" "" OFF \
+ "github-dark-dimmed" "" OFF \
+ "midnight-red" "" ON \
+ "monoindustrial" "" OFF \
+ "monokai" "" OFF \
+ "monokai-dimmed" "" OFF \
+ "noctis" "" OFF \
+ "oceanic-next" "" OFF \
+ "oled" "" OFF \
+ "one-dark-pro" "" OFF \
+ "one-dark-pro-darker" "" OFF \
+ "solarized-dark" "" OFF \
+ "solarized-light" "" OFF \
+ "tokyo-night" "" OFF \
+ "tokyo-night-light" "" OFF \
+ "tokyo-night-storm" "" OFF \
+ "totallyinformation" "" OFF \
+ "zenburn" "" OFF \
+ 3>&1 1>&2 2>&3)
+ header_info
+ msg_info "Installing ${THEME} Theme"
+ cd /root/.node-red
+ sed -i 's|// theme: ".*",|theme: "",|g' /root/.node-red/settings.js
+ npm install @node-red-contrib-themes/theme-collection &>/dev/null
+ sed -i "{s/theme: ".*"/theme: '${THEME}',/g}" /root/.node-red/settings.js
+ systemctl restart nodered
+ msg_ok "Installed ${THEME} Theme"
+ exit
+ fi
}
start
@@ -125,5 +102,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:1880${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:1880${CL}"
\ No newline at end of file
diff --git a/ct/notifiarr.sh b/ct/notifiarr.sh
index 587fc69d5..26a94e61e 100644
--- a/ct/notifiarr.sh
+++ b/ct/notifiarr.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://notifiarr.com/
-function header_info {
-clear
-cat <<"EOF"
- _ __ __ _ _____
- / | / /___ / /_(_) __(_)___ ___________
- / |/ / __ \/ __/ / /_/ / __ `/ ___/ ___/
- / /| / /_/ / /_/ / __/ / /_/ / / / /
-/_/ |_/\____/\__/_/_/ /_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Notifiarr"
-var_disk="2"
+var_tags="arr"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/golift.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/golift.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5454${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5454${CL}"
\ No newline at end of file
diff --git a/ct/ntfy.sh b/ct/ntfy.sh
index f319b483a..8be75ec3e 100644
--- a/ct/ntfy.sh
+++ b/ct/ntfy.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://ntfy.sh/
-function header_info {
-clear
-cat <<"EOF"
- __ ____
- ____ / /_/ __/_ __
- / __ \/ __/ /_/ / / /
- / / / / /_/ __/ /_/ /
-/_/ /_/\__/_/ \__, /
- /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="ntfy"
-var_disk="2"
+var_tags="notification"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/nzbget.sh b/ct/nzbget.sh
index d4caa8f60..352799aa7 100644
--- a/ct/nzbget.sh
+++ b/ct/nzbget.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: havardthom
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck | Co-Author: havardthom
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://nzbget.com/
-function header_info {
-clear
-cat <<"EOF"
- _ _______ ____ ______ __
- / | / /__ / / __ )/ ____/__ / /_
- / |/ / / / / __ / / __/ _ \/ __/
- / /| / / /__/ /_/ / /_/ / __/ /_
-/_/ |_/ /____/_____/\____/\___/\__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="NZBGet"
-var_disk="4"
+var_tags="usenet;downloader"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /lib/systemd/system/nzbget.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /lib/systemd/system/nzbget.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:6789${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6789${CL}"
\ No newline at end of file
diff --git a/ct/octoprint.sh b/ct/octoprint.sh
index 5365acd30..689cbe9d9 100644
--- a/ct/octoprint.sh
+++ b/ct/octoprint.sh
@@ -1,74 +1,51 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://octoprint.org/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ ____ _ __
- / __ \_____/ /_____ / __ \_____(_)___ / /_
- / / / / ___/ __/ __ \/ /_/ / ___/ / __ \/ __/
-/ /_/ / /__/ /_/ /_/ / ____/ / / / / / / /_
-\____/\___/\__/\____/_/ /_/ /_/_/ /_/\__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="OctoPrint"
-var_disk="4"
+var_tags="3d-printing"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/octoprint ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Stopping OctoPrint"
-systemctl stop octoprint
-msg_ok "Stopped OctoPrint"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/octoprint ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping OctoPrint"
+ systemctl stop octoprint
+ msg_ok "Stopped OctoPrint"
-msg_info "Updating OctoPrint"
-source /opt/octoprint/bin/activate
-pip3 install octoprint --upgrade &>/dev/null
-msg_ok "Updated OctoPrint"
+ msg_info "Updating OctoPrint"
+ source /opt/octoprint/bin/activate
+ pip3 install octoprint --upgrade &>/dev/null
+ msg_ok "Updated OctoPrint"
-msg_info "Starting OctoPrint"
-systemctl start octoprint
-msg_ok "Started OctoPrint"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting OctoPrint"
+ systemctl start octoprint
+ msg_ok "Started OctoPrint"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -76,5 +53,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
\ No newline at end of file
diff --git a/ct/ollama.sh b/ct/ollama.sh
index 1b275ab64..604552b78 100644
--- a/ct/ollama.sh
+++ b/ct/ollama.sh
@@ -1,66 +1,41 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: havardthom
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck | Co-Author: havardthom
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://ollama.com/
-function header_info {
-clear
-cat <<"EOF"
- ____ ____
- / __ \/ / /___ _____ ___ ____ _
- / / / / / / __ `/ __ `__ \/ __ `/
-/ /_/ / / / /_/ / / / / / / /_/ /
-\____/_/_/\__,_/_/ /_/ /_/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Ollama"
-var_disk="24"
+var_tags="ai"
var_cpu="4"
var_ram="4096"
+var_disk="24"
var_os="ubuntu"
var_version="22.04"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/ollama ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/ollama ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -68,5 +43,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:11434${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:14434${CL}"
\ No newline at end of file
diff --git a/ct/omada.sh b/ct/omada.sh
index 4d1810b92..0ef88d784 100644
--- a/ct/omada.sh
+++ b/ct/omada.sh
@@ -1,72 +1,51 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.tp-link.com/us/support/download/omada-software-controller/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \____ ___ ____ _____/ /___ _
- / / / / __ __ \/ __ / __ / __ /
-/ /_/ / / / / / / /_/ / /_/ / /_/ /
-\____/_/ /_/ /_/\__,_/\__,_/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Omada"
-var_disk="8"
+var_tags="tp-link;controller"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/tplink ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-latest_url=$(curl -fsSL "https://www.tp-link.com/en/support/download/omada-software-controller/" | grep -o 'https://.*x64.deb' | head -n1)
-latest_version=$(basename "${latest_url}")
-if [ -z "${latest_version}" ]; then
- msg_error "It seems that the server (tp-link.com) might be down. Please try again at a later time."
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/tplink ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ latest_url=$(curl -s "https://support.omadanetworks.com/en/product/omada-software-controller/?resourceType=download" | \
+ grep -o 'https://static\.tp-link\.com/upload/software/[^"]*linux_x64[^"]*\.deb' | \
+ head -n 1)
+ latest_version=$(basename "$latest_url")
+ if [ -z "${latest_version}" ]; then
+ msg_error "It seems that the server (tp-link.com) might be down. Please try again at a later time."
+ exit
+ fi
+ echo -e "Updating Omada Controller"
+ wget -qL ${latest_url}
+ dpkg -i ${latest_version}
+ rm -rf ${latest_version}
+ echo -e "Updated Omada Controller"
exit
-fi
-echo -e "Updating Omada Controller"
-wget -qL ${latest_url}
-dpkg -i --ignore-depends=jsvc,mongodb-server ${latest_version}
-rm -rf ${latest_version}
-echo -e "Updated Omada Controller"
-exit
}
start
@@ -74,5 +53,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}https://${IP}:8043${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8043${CL}"
diff --git a/ct/ombi.sh b/ct/ombi.sh
index 4b23c799c..a74a9707f 100644
--- a/ct/ombi.sh
+++ b/ct/ombi.sh
@@ -1,81 +1,58 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://ombi.io/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ _
- / __ \____ ___ / /_ (_)
- / / / / __ `__ \/ __ \/ /
-/ /_/ / / / / / / /_/ / /
-\____/_/ /_/ /_/_.___/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Ombi"
-var_disk="4"
+var_tags="media"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/ombi ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -sL https://api.github.com/repos/Ombi-app/Ombi/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
-if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop ombi
- msg_ok "Stopped ${APP}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/ombi ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -sL https://api.github.com/repos/Ombi-app/Ombi/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop ombi
+ msg_ok "Stopped ${APP}"
- msg_info "Updating ${APP} to ${RELEASE}"
- wget -q https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-arm64.tar.gz
- tar -xzf linux-arm64.tar.gz -C /opt/ombi
- rm -rf linux-arm64.tar.gz
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ wget -q https://github.com/Ombi-app/Ombi/releases/download/${RELEASE}/linux-x64.tar.gz
+ tar -xzf linux-x64.tar.gz -C /opt/ombi
+ rm -rf linux-x64.tar.gz
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
- msg_info "Starting ${APP}"
- systemctl start ombi
- msg_ok "Started ${APP}"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} ia already at ${RELEASE}."
-fi
-exit
+ msg_info "Starting ${APP}"
+ systemctl start ombi
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} ia already at ${RELEASE}."
+ fi
+ exit
}
start
@@ -83,5 +60,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
\ No newline at end of file
diff --git a/ct/omv.sh b/ct/omv.sh
index 565a7e349..ac1a70f85 100644
--- a/ct/omv.sh
+++ b/ct/omv.sh
@@ -1,71 +1,49 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.openmediavault.org/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ ___ ___ _ __ ____
- / __ \____ ___ ____ / |/ /__ ____/ (_)___ | | / /___ ___ __/ / /_
- / / / / __ \/ _ \/ __ \/ /|_/ / _ \/ __ / / __ `/ | / / __ `/ / / / / __/
-/ /_/ / /_/ / __/ / / / / / / __/ /_/ / / /_/ /| |/ / /_/ / /_/ / / /_
-\____/ .___/\___/_/ /_/_/ /_/\___/\__,_/_/\__,_/ |___/\__,_/\__,_/_/\__/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="OMV"
-var_disk="4"
+var_tags="media"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/openmediavault.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
build_container
description
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}${CL} \n"
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/onedev.sh b/ct/onedev.sh
new file mode 100644
index 000000000..568251b81
--- /dev/null
+++ b/ct/onedev.sh
@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: kristocopani
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://onedev.io/
+
+# App Default Values
+APP="OneDev"
+var_tags="git"
+var_cpu="2"
+var_ram="2048"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+
+ if [[ ! -f /etc/systemd/system/onedev.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ GITHUB_RELEASE=$(curl -s https://api.github.com/repos/theonedev/onedev/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${GITHUB_RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop onedev
+ msg_ok "Stopped Service"
+
+ msg_info "Updating ${APP} to v${GITHUB_RELEASE}"
+ cd /opt
+ wget -q https://code.onedev.io/onedev/server/~site/onedev-latest.tar.gz
+ tar -xzf onedev-latest.tar.gz
+ /opt/onedev-latest/bin/upgrade.sh /opt/onedev >/dev/null
+ RELEASE=$(cat /opt/onedev/release.properties | grep "version" | cut -d'=' -f2)
+ echo "${RELEASE}" >"/opt/${APP}_version.txt"
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting Service"
+ systemctl start onedev
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -rf /opt/onedev-latest
+ rm -rf /opt/onedev-latest.tar.gz
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}."
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6610${CL}"
\ No newline at end of file
diff --git a/ct/openhab.sh b/ct/openhab.sh
index a5dd7f7b0..9800efedf 100644
--- a/ct/openhab.sh
+++ b/ct/openhab.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.openhab.org/
-function header_info {
-clear
-cat <<"EOF"
- __ _____ ____
- ____ ____ ___ ____ / / / / | / __ )
- / __ \/ __ \/ _ \/ __ \/ /_/ / /| | / __ |
-/ /_/ / /_/ / __/ / / / __ / ___ |/ /_/ /
-\____/ .___/\___/_/ /_/_/ /_/_/ |_/_____/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="openHAB"
-var_disk="8"
+var_tags="automation"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/openhab.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/openhab.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
\ No newline at end of file
diff --git a/ct/openobserve.sh b/ct/openobserve.sh
index c7e400813..ae73a4ed1 100644
--- a/ct/openobserve.sh
+++ b/ct/openobserve.sh
@@ -1,69 +1,44 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://openobserve.ai/
-function header_info {
-clear
-cat <<"EOF"
-
- ____ ____ __
- / __ \____ ___ ____ / __ \/ /_ ________ ______ _____
- / / / / __ \/ _ \/ __ \/ / / / __ \/ ___/ _ \/ ___/ | / / _ \
-/ /_/ / /_/ / __/ / / / /_/ / /_/ (__ ) __/ / | |/ / __/
-\____/ .___/\___/_/ /_/\____/_.___/____/\___/_/ |___/\___/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="OpenObserve"
-var_disk="3"
+var_tags="monitoring"
var_cpu="1"
var_ram="512"
+var_disk="3"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/openobserve/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-systemctl stop openobserve
-LATEST=$(curl -sL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
-tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-arm64.tar.gz) -C /opt/openobserve
-systemctl start openobserve
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/openobserve/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ systemctl stop openobserve
+ LATEST=$(curl -sL https://api.github.com/repos/openobserve/openobserve/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
+ tar zxvf <(curl -fsSL https://github.com/openobserve/openobserve/releases/download/$LATEST/openobserve-${LATEST}-linux-amd64.tar.gz) -C /opt/openobserve
+ systemctl start openobserve
+ msg_ok "Updated $APP"
+ exit
}
start
@@ -71,5 +46,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5080${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5080${CL}"
\ No newline at end of file
diff --git a/ct/openwebui.sh b/ct/openwebui.sh
index daee783a0..7bac3e88a 100644
--- a/ct/openwebui.sh
+++ b/ct/openwebui.sh
@@ -1,79 +1,53 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: havardthom
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: havardthom
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://openwebui.com/
-function header_info {
-clear
-cat <<"EOF"
- ____ _ __ __ __ ______
- / __ \____ ___ ____ | | / /__ / /_ / / / / _/
- / / / / __ \/ _ \/ __ \ | | /| / / _ \/ __ \/ / / // /
-/ /_/ / /_/ / __/ / / / | |/ |/ / __/ /_/ / /_/ // /
-\____/ .___/\___/_/ /_/ |__/|__/\___/_.___/\____/___/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Open WebUI"
-var_disk="16"
+var_tags="ai;interface"
var_cpu="4"
var_ram="4096"
+var_disk="16"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/open-webui ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} (Patience)"
-cd /opt/open-webui
-output=$(git pull --no-rebase)
-if echo "$output" | grep -q "Already up to date."
-then
- msg_ok "$APP is already up to date."
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/open-webui ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} (Patience)"
+ cd /opt/open-webui
+ output=$(git pull --no-rebase)
+ if echo "$output" | grep -q "Already up to date."; then
+ msg_ok "$APP is already up to date."
+ exit
+ fi
+ systemctl stop open-webui.service
+ npm install &>/dev/null
+ export NODE_OPTIONS="--max-old-space-size=3584"
+ npm run build &>/dev/null
+ cd ./backend
+ pip install -r requirements.txt -U &>/dev/null
+ systemctl start open-webui.service
+ msg_ok "Updated Successfully"
exit
-fi
-systemctl stop open-webui.service
-npm install &>/dev/null
-export NODE_OPTIONS="--max-old-space-size=3584"
-npm run build &>/dev/null
-cd ./backend
-pip install -r requirements.txt -U &>/dev/null
-systemctl start open-webui.service
-msg_ok "Updated Successfully"
-exit
}
start
@@ -81,5 +55,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
\ No newline at end of file
diff --git a/ct/overseerr.sh b/ct/overseerr.sh
index 2660a2511..a7245a9db 100644
--- a/ct/overseerr.sh
+++ b/ct/overseerr.sh
@@ -1,76 +1,52 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://overseerr.dev/
-function header_info {
-clear
-cat <<"EOF"
- ____
- / __ \_ _____ _____________ ___ __________
- / / / / | / / _ \/ ___/ ___/ _ \/ _ \/ ___/ ___/
-/ /_/ /| |/ / __/ / (__ ) __/ __/ / / /
-\____/ |___/\___/_/ /____/\___/\___/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Overseerr"
-var_disk="8"
+var_tags="media"
var_cpu="2"
-var_ram="3072"
+var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/overseerr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-systemctl stop overseerr
-cd /opt/overseerr
-output=$(git pull)
-git pull &>/dev/null
-if echo "$output" | grep -q "Already up to date."
-then
- msg_ok " $APP is already up to date."
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/overseerr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ systemctl stop overseerr
+ cd /opt/overseerr
+ output=$(git pull)
+ git pull &>/dev/null
+ if echo "$output" | grep -q "Already up to date."; then
+ msg_ok " $APP is already up to date."
+ systemctl start overseerr
+ exit
+ fi
+ yarn install &>/dev/null
+ yarn build &>/dev/null
systemctl start overseerr
+ msg_ok "Updated $APP"
exit
-fi
-yarn install &>/dev/null
-yarn build &>/dev/null
-systemctl start overseerr
-msg_ok "Updated $APP"
-exit
}
start
@@ -78,5 +54,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5055${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5055${CL}"
\ No newline at end of file
diff --git a/ct/owncast.sh b/ct/owncast.sh
index 47eff116f..3b84d64f5 100644
--- a/ct/owncast.sh
+++ b/ct/owncast.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://owncast.online/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \_ ______ _________ ______/ /_
- / / / / | /| / / __ \/ ___/ __ `/ ___/ __/
-/ /_/ /| |/ |/ / / / / /__/ /_/ (__ ) /_
-\____/ |__/|__/_/ /_/\___/\__,_/____/\__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Owncast"
-var_disk="2"
+var_tags="broadcasting"
var_cpu="2"
var_ram="2048"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/owncast ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/owncast ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,6 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080${CL}
- ${BL}http://${IP}:8080/admin${CL} admin|abc123\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/admin${CL}"
\ No newline at end of file
diff --git a/ct/pairdrop.sh b/ct/pairdrop.sh
index 86c781d4a..b3f6f57a0 100644
--- a/ct/pairdrop.sh
+++ b/ct/pairdrop.sh
@@ -1,68 +1,45 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://pairdrop.net/
-function header_info {
-clear
-cat <<"EOF"
- ____ _ ____
- / __ \____ _(_)____/ __ \_________ ____
- / /_/ / __ `/ / ___/ / / / ___/ __ \/ __ \
- / ____/ /_/ / / / / /_/ / / / /_/ / /_/ /
-/_/ \__,_/_/_/ /_____/_/ \____/ .___/
- /_/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="PairDrop"
-var_disk="4"
+var_tags="sharing"
var_cpu="1"
var_ram="512"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/pairdrop ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-systemctl stop pairdrop
-cd /opt/pairdrop
-git pull
-npm install
-systemctl start pairdrop
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/pairdrop ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ systemctl stop pairdrop
+ cd /opt/pairdrop
+ git pull
+ npm install
+ systemctl start pairdrop
+ msg_ok "Updated $APP"
+ exit
}
start
@@ -70,5 +47,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/paperless-ngx.sh b/ct/paperless-ngx.sh
index a810b545d..3a641f3ef 100644
--- a/ct/paperless-ngx.sh
+++ b/ct/paperless-ngx.sh
@@ -1,58 +1,29 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://docs.paperless-ngx.com/
-function header_info {
- clear
- cat <<"EOF"
- ____ __
- / __ \____ _____ ___ _____/ /__ __________ ____ ____ __ __
- / /_/ / __ `/ __ \/ _ \/ ___/ / _ \/ ___/ ___/___/ __ \/ __ `/ |/_/
- / ____/ /_/ / /_/ / __/ / / / __(__ |__ )___/ / / / /_/ /> <
-/_/ \__,_/ .___/\___/_/ /_/\___/____/____/ /_/ /_/\__, /_/|_|
- /_/ /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Paperless-ngx"
-var_disk="10"
+var_tags="document;management"
var_cpu="2"
var_ram="2048"
+var_disk="10"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
if [[ ! -d /opt/paperless ]]; then
msg_error "No ${APP} Installation Found!"
@@ -65,10 +36,12 @@ function update_script() {
"2" "Paperless-ngx Credentials" OFF \
3>&1 1>&2 2>&3)
header_info
+ check_container_storage
+ check_container_resources
if [ "$UPD" == "1" ]; then
if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then
- msg_info "Updating Ghostscript"
+ if [[ "$(gs --version 2>/dev/null)" != "10.04.0" ]]; then
+ msg_info "Updating Ghostscript (Patience)"
cd /tmp
wget -q https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz
tar -xzf ghostscript-10.04.0.tar.gz
@@ -123,5 +96,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
\ No newline at end of file
diff --git a/ct/part-db.sh b/ct/part-db.sh
new file mode 100644
index 000000000..bf7217e20
--- /dev/null
+++ b/ct/part-db.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: bvdberg01
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://docs.part-db.de/
+
+# App Default Values
+APP="Part-DB"
+var_tags="inventory;parts"
+var_cpu="2"
+var_ram="1024"
+var_disk="8"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/partdb ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/Part-DB/Part-DB-server/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop apache2
+ msg_ok "Stopped Service"
+
+ msg_info "Updating $APP to v${RELEASE}"
+ cd /opt
+ mv /opt/partdb/ /opt/partdb-backup
+ wget -q "https://github.com/Part-DB/Part-DB-server/archive/refs/tags/v${RELEASE}.zip"
+ unzip -q "v${RELEASE}.zip"
+ mv /opt/Part-DB-server-${RELEASE}/ /opt/partdb
+
+ cd /opt/partdb/
+ cp -r "/opt/partdb-backup/.env.local" /opt/partdb/
+ cp -r "/opt/partdb-backup/public/media" /opt/partdb/public/
+ cp -r "/opt/partdb-backup/config/banner.md" /opt/partdb/config/
+
+ export COMPOSER_ALLOW_SUPERUSER=1
+ composer install --no-dev -o --no-interaction &>/dev/null
+ yarn install &>/dev/null
+ yarn build &>/dev/null
+ php bin/console cache:clear &>/dev/null
+ php bin/console doctrine:migrations:migrate -n &>/dev/null
+ chown -R www-data:www-data /opt/partdb
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP to v${RELEASE}"
+
+ msg_info "Starting Service"
+ systemctl start apache2
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -r "/opt/v${RELEASE}.zip"
+ rm -r /opt/partdb-backup
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
diff --git a/ct/pbs.sh b/ct/pbs.sh
index 1fab6a763..d392e1635 100644
--- a/ct/pbs.sh
+++ b/ct/pbs.sh
@@ -1,9 +1,8 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
function header_info {
clear
@@ -17,49 +16,33 @@ cat <<"EOF"
EOF
}
header_info
-echo -e "Loading..."
APP="PBS"
-var_disk="10"
+var_tags="backup"
var_cpu="2"
var_ram="2048"
+var_disk="10"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +50,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8007${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8007${CL}"
\ No newline at end of file
diff --git a/ct/peanut.sh b/ct/peanut.sh
index 67bc970cc..7dedccd78 100644
--- a/ct/peanut.sh
+++ b/ct/peanut.sh
@@ -1,61 +1,37 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck (tteckster) | Co-Author: remz1337
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/Brandawg93/PeaNUT/
-function header_info {
-clear
-cat <<"EOF"
- ____ _ ____ ________
- / __ \___ ____ _/ | / / / / /_ __/
- / /_/ / _ \/ __ `/ |/ / / / / / /
- / ____/ __/ /_/ / /| / /_/ / / /
-/_/ \___/\__,_/_/ |_/\____/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="PeaNUT"
-var_disk="4"
+var_tags="network;ups;"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
header_info
- if [[ ! -f /etc/systemd/system/peanut.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
- whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/peanut.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
RELEASE=$(curl -sL https://api.github.com/repos/Brandawg93/PeaNUT/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Updating $APP to ${RELEASE}"
@@ -82,10 +58,7 @@ start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 1024
-pct set $CTID -cores 1
-msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/petio.sh b/ct/petio.sh
index 6d4086108..13a729464 100644
--- a/ct/petio.sh
+++ b/ct/petio.sh
@@ -1,67 +1,43 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://petio.tv/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ _
- / __ \___ / /_(_)___
- / /_/ / _ \/ __/ / __ \
- / ____/ __/ /_/ / /_/ /
-/_/ \___/\__/_/\____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Petio"
-var_disk="4"
+var_tags="media"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="ubuntu"
var_version="20.04"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/Petio ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-systemctl stop petio.service
-wget https://petio.tv/releases/latest -O petio-latest.zip
-unzip petio-latest.zip -d /opt/Petio
-systemctl start petio.service
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/Petio ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ systemctl stop petio.service
+ wget https://petio.tv/releases/latest -O petio-latest.zip
+ unzip petio-latest.zip -d /opt/Petio
+ systemctl start petio.service
+ msg_ok "Updated $APP"
+ exit
}
start
@@ -69,5 +45,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:7777${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7777${CL}"
\ No newline at end of file
diff --git a/ct/photoprism.sh b/ct/photoprism.sh
index 644959852..4762fd83f 100644
--- a/ct/photoprism.sh
+++ b/ct/photoprism.sh
@@ -1,71 +1,44 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.photoprism.app/
-function header_info {
- clear
- cat <<"EOF"
- ____ __ ______ __________ ____ ____ _________ __ ___
- / __ \/ / / / __ \/_ __/ __ \/ __ \/ __ \/ _/ ___// |/ /
- / /_/ / /_/ / / / / / / / / / / /_/ / /_/ // / \__ \/ /|_/ /
- / ____/ __ / /_/ / / / / /_/ / ____/ _, _// / ___/ / / / /
-/_/ /_/ /_/\____/ /_/ \____/_/ /_/ |_/___//____/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="PhotoPrism"
-var_disk="8"
+var_tags="media;photo"
var_cpu="2"
-var_ram="2048"
+var_ram="3072"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
header_info
+ check_container_storage
+ check_container_resources
if [[ ! -d /opt/photoprism ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
- echo -e "\n ⚠️ Ensure you set 2vCPU & 3072MiB RAM MIMIMUM!!! \n"
msg_info "Stopping PhotoPrism"
sudo systemctl stop photoprism
msg_ok "Stopped PhotoPrism"
msg_info "Updating PhotoPrism"
apt-get install -y libvips42 &>/dev/null
- wget -q -cO - https://dl.photoprism.app/pkg/linux/arm64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1
+ wget -q -cO - https://dl.photoprism.app/pkg/linux/amd64.tar.gz | tar -xzf - -C /opt/photoprism --strip-components=1
msg_ok "Updated PhotoPrism"
msg_info "Starting PhotoPrism"
@@ -80,5 +53,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:2342${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:2342${CL}"
\ No newline at end of file
diff --git a/ct/pialert.sh b/ct/pialert.sh
index 261629cc7..ef6ebdd0b 100644
--- a/ct/pialert.sh
+++ b/ct/pialert.sh
@@ -1,63 +1,40 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/leiweibau/Pi.Alert/
-function header_info {
-clear
-cat <<"EOF"
- ____ _ ___ __ __
- / __ \(_) / | / /__ _____/ /_
- / /_/ / / / /| | / / _ \/ ___/ __/
- / ____/ / / ___ |/ / __/ / / /_
-/_/ /_(_)_/ |_/_/\___/_/ \__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="PiAlert"
-var_disk="3"
+var_tags="network"
var_cpu="1"
var_ram="512"
+var_disk="3"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/pialert ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-bash -c "$(wget -qLO - https://github.com/leiweibau/Pi.Alert/raw/main/install/pialert_update.sh)" -s --lxc
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/pialert ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ bash -c "$(wget -qLO - https://github.com/leiweibau/Pi.Alert/raw/main/install/pialert_update.sh)" -s --lxc
+ msg_ok "Updated $APP"
+ exit
}
start
@@ -65,5 +42,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}/pialert/${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/pialert${CL}"
\ No newline at end of file
diff --git a/ct/pihole.sh b/ct/pihole.sh
index 2e95c8e23..9947f8d87 100644
--- a/ct/pihole.sh
+++ b/ct/pihole.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://pi-hole.net/
-function header_info {
-clear
-cat <<"EOF"
- ____ ____ __ ______ __ ______
- / __ \/ _/ / / / / __ \/ / / ____/
- / /_/ // /___/ /_/ / / / / / / __/
- / ____// /___/ __ / /_/ / /___/ /___
-/_/ /___/ /_/ /_/\____/_____/_____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Pihole"
-var_disk="2"
+var_tags="adblock"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /etc/pihole ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-set +e
-pihole -up
-msg_ok "Updated ${APP}"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/pihole ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ set +e
+ pihole -up
+ msg_ok "Updated ${APP}"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}/admin${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/admin${CL}"
\ No newline at end of file
diff --git a/ct/pingvin.sh b/ct/pingvin.sh
index 56f53c162..53bd0aa22 100644
--- a/ct/pingvin.sh
+++ b/ct/pingvin.sh
@@ -1,82 +1,59 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://stonith404.github.io/pingvin-share/introduction
-function header_info {
-clear
-cat <<"EOF"
- ____ _ _ _____ __
- / __ \(_)___ ____ __ __(_)___ / ___// /_ ____ _________
- / /_/ / / __ \/ __ `/ | / / / __ \ \__ \/ __ \/ __ `/ ___/ _ \
- / ____/ / / / / /_/ /| |/ / / / / / ___/ / / / / /_/ / / / __/
-/_/ /_/_/ /_/\__, / |___/_/_/ /_/ /____/_/ /_/\__,_/_/ \___/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Pingvin"
-var_disk="8"
+var_tags="sharing"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/pingvin-share ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Stopping Pingvin Share"
-systemctl stop pm2-root.service
-msg_ok "Stopped Pingvin Share"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/pingvin-share ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping Pingvin Share"
+ systemctl stop pm2-root.service
+ msg_ok "Stopped Pingvin Share"
-msg_info "Updating Pingvin Share"
-cd /opt/pingvin-share
-git fetch --tags
-git checkout $(git describe --tags `git rev-list --tags --max-count=1`) &>/dev/null
-cd backend
-npm install &>/dev/null
-npm run build &>/dev/null
-cd ../frontend
-npm install &>/dev/null
-npm run build &>/dev/null
-msg_ok "Updated Pingvin Share"
+ msg_info "Updating Pingvin Share"
+ cd /opt/pingvin-share
+ git fetch --tags
+ git checkout $(git describe --tags $(git rev-list --tags --max-count=1)) &>/dev/null
+ cd backend
+ npm install &>/dev/null
+ npm run build &>/dev/null
+ cd ../frontend
+ npm install &>/dev/null
+ npm run build &>/dev/null
+ msg_ok "Updated Pingvin Share"
-msg_info "Starting Pingvin Share"
-systemctl start pm2-root.service
-msg_ok "Started Pingvin Share"
+ msg_info "Starting Pingvin Share"
+ systemctl start pm2-root.service
+ msg_ok "Started Pingvin Share"
-msg_ok "Updated Successfully"
-exit
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -84,5 +61,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000 ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/plex.sh b/ct/plex.sh
index fb0bbd471..0aebd688f 100644
--- a/ct/plex.sh
+++ b/ct/plex.sh
@@ -1,77 +1,53 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.plex.tv/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ __ ___ ___ _____
- / __ \/ /__ _ __ / |/ /__ ____/ (_)___ _ / ___/___ ______ _____ _____
- / /_/ / / _ \| |/_/ / /|_/ / _ \/ __ / / __ `/ \__ \/ _ \/ ___/ | / / _ \/ ___/
- / ____/ / __/> < / / / / __/ /_/ / / /_/ / ___/ / __/ / | |/ / __/ /
-/_/ /_/\___/_/|_| /_/ /_/\___/\__,_/_/\__,_/ /____/\___/_/ |___/\___/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Plex"
-var_disk="8"
+var_tags="media"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="ubuntu"
var_version="22.04"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select \nplexupdate info >> https://github.com/mrworf/plexupdate" 10 59 2 \
- "1" "Update LXC" ON \
- "2" "Install plexupdate" OFF \
- 3>&1 1>&2 2>&3)
-
-header_info
-if [ "$UPD" == "1" ]; then
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated ${APP} LXC"
-exit
-fi
-if [ "$UPD" == "2" ]; then
-set +e
-bash -c "$(wget -qO - https://raw.githubusercontent.com/mrworf/plexupdate/master/extras/installer.sh)"
-exit
-fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/plexmediaserver.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "SUPPORT" --radiolist --cancel-button Exit-Script "Spacebar = Select \nplexupdate info >> https://github.com/mrworf/plexupdate" 10 59 2 \
+ "1" "Update LXC" ON \
+ "2" "Install plexupdate" OFF \
+ 3>&1 1>&2 2>&3)
+ if [ "$UPD" == "1" ]; then
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
+ fi
+ if [ "$UPD" == "2" ]; then
+ set +e
+ bash -c "$(wget -qO - https://raw.githubusercontent.com/mrworf/plexupdate/master/extras/installer.sh)"
+ exit
+ fi
}
start
@@ -79,5 +55,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:32400/web${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:32400/web${CL}"
diff --git a/ct/pocketbase.sh b/ct/pocketbase.sh
index 0ed0ed940..986e20f69 100644
--- a/ct/pocketbase.sh
+++ b/ct/pocketbase.sh
@@ -1,55 +1,50 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://pocketbase.io/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ __ __
- / __ \____ _____/ /_____ / /_/ /_ ____ _________
- / /_/ / __ \/ ___/ //_/ _ \/ __/ __ \/ __ `/ ___/ _ \
- / ____/ /_/ / /__/ ,< / __/ /_/ /_/ / /_/ (__ ) __/
-/_/ \____/\___/_/|_|\___/\__/_.___/\__,_/____/\___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Pocketbase"
-var_disk="8"
+var_tags="database"
var_cpu="1"
var_ram="512"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/pocketbase.service || ! -x /opt/pocketbase/pocketbase ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop pocketbase
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP}"
+ /opt/pocketbase/pocketbase update
+ msg_ok "Updated ${APP}"
+
+ msg_info "Starting ${APP}"
+ systemctl start pocketbase
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -57,5 +52,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080/_${CL}"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/_${CL}"
diff --git a/ct/podman-homeassistant.sh b/ct/podman-homeassistant.sh
index 134875ade..05925edd6 100644
--- a/ct/podman-homeassistant.sh
+++ b/ct/podman-homeassistant.sh
@@ -1,62 +1,32 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \____ ____/ /___ ___ ____ _____
- / /_/ / __ \/ __ / __ __ \/ __ / __ \
- / ____/ /_/ / /_/ / / / / / / /_/ / / / /
- __ __ /_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/__ __
- / / / /___ ____ ___ ___ / | __________(_)____/ /_____ _____ / /_
- / /_/ / __ \/ __ __ \/ _ \ / /| | / ___/ ___/ / ___/ __/ __ / __ \/ __/
- / __ / /_/ / / / / / / __/ / ___ |(__ |__ ) (__ ) /_/ /_/ / / / / /_
-/_/ /_/\____/_/ /_/ /_/\___/ /_/ |_/____/____/_/____/\__/\__,_/_/ /_/\__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Podman-Home Assistant"
-var_disk="16"
+var_tags="podman;smarthome"
var_cpu="2"
var_ram="2048"
+var_disk="16"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
+header_info
+check_container_storage
+check_container_resources
if [[ ! -f /etc/systemd/system/homeassistant.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
UPD=$(whiptail --backtitle "Proxmox VE Helper Scripts" --title "UPDATE" --radiolist --cancel-button Exit-Script "Spacebar = Select" 11 58 4 \
"1" "Update system and containers" ON \
@@ -64,7 +34,7 @@ function update_script() {
"3" "Install FileBrowser" OFF \
"4" "Remove ALL Unused Images" OFF \
3>&1 1>&2 2>&3)
-header_info
+
if [ "$UPD" == "1" ]; then
msg_info "Updating ${APP} LXC"
apt-get update &>/dev/null
@@ -139,5 +109,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8123${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8123${CL}"
\ No newline at end of file
diff --git a/ct/podman.sh b/ct/podman.sh
index ce2113456..cdc63cd65 100644
--- a/ct/podman.sh
+++ b/ct/podman.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://podman.io/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \____ ____/ /___ ___ ____ _____
- / /_/ / __ \/ __ / __ `__ \/ __ `/ __ \
- / ____/ /_/ / /_/ / / / / / / /_/ / / / /
-/_/ \____/\__,_/_/ /_/ /_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Podman"
-var_disk="4"
+var_tags="container;kubernetes"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/containers/registries.conf ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/containers/registries.conf ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,3 +44,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/postgresql.sh b/ct/postgresql.sh
index 61c0d580f..72f567a14 100644
--- a/ct/postgresql.sh
+++ b/ct/postgresql.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.postgresql.org/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ _____ ____ __
- / __ \____ _____/ /_____ _________ / ___// __ \ / /
- / /_/ / __ \/ ___/ __/ __ / ___/ _ \\__ \/ / / / / /
- / ____/ /_/ (__ ) /_/ /_/ / / / __/__/ / /_/ / / /___
-/_/ \____/____/\__/\__, /_/ \___/____/\___\_\/_____/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="PostgreSQL"
-var_disk="4"
+var_tags="database"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/pgdg.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/pgdg.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,3 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following IP:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}${IP}:5432${CL}"
\ No newline at end of file
diff --git a/ct/prometheus.sh b/ct/prometheus.sh
index 8c4e96711..62c7cd3e0 100644
--- a/ct/prometheus.sh
+++ b/ct/prometheus.sh
@@ -1,84 +1,61 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://prometheus.io/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ __
- / __ \_________ ____ ___ ___ / /_/ /_ ___ __ _______
- / /_/ / ___/ __ \/ __ __ \/ _ \/ __/ __ \/ _ \/ / / / ___/
- / ____/ / / /_/ / / / / / / __/ /_/ / / / __/ /_/ (__ )
-/_/ /_/ \____/_/ /_/ /_/\___/\__/_/ /_/\___/\__,_/____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Prometheus"
-var_disk="4"
+var_tags="monitoring"
var_cpu="1"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/prometheus.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop prometheus
- msg_ok "Stopped ${APP}"
-
- msg_info "Updating ${APP} to ${RELEASE}"
- wget -q https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz
- tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz
- cd prometheus-${RELEASE}.linux-amd64
- cp -rf prometheus promtool /usr/local/bin/
- cd ~
- rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/prometheus.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/prometheus/prometheus/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop prometheus
+ msg_ok "Stopped ${APP}"
- msg_info "Starting ${APP}"
- systemctl start prometheus
- msg_ok "Started ${APP}"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Updating ${APP} to ${RELEASE}"
+ wget -q https://github.com/prometheus/prometheus/releases/download/v${RELEASE}/prometheus-${RELEASE}.linux-amd64.tar.gz
+ tar -xf prometheus-${RELEASE}.linux-amd64.tar.gz
+ cd prometheus-${RELEASE}.linux-amd64
+ cp -rf prometheus promtool /usr/local/bin/
+ cd ~
+ rm -rf prometheus-${RELEASE}.linux-amd64 prometheus-${RELEASE}.linux-amd64.tar.gz
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
+
+ msg_info "Starting ${APP}"
+ systemctl start prometheus
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -86,5 +63,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:9090${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9090${CL}"
\ No newline at end of file
diff --git a/ct/prowlarr.sh b/ct/prowlarr.sh
index df776f85c..a8b32963e 100644
--- a/ct/prowlarr.sh
+++ b/ct/prowlarr.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://prowlarr.com/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \_________ _ __/ /___ __________
- / /_/ / ___/ __ \ | /| / / / __ `/ ___/ ___/
- / ____/ / / /_/ / |/ |/ / / /_/ / / / /
-/_/ /_/ \____/|__/|__/_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Prowlarr"
-var_disk="4"
+var_tags="arr"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var/lib/prowlarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var/lib/prowlarr/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -64,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:9696${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9696${CL}"
\ No newline at end of file
diff --git a/ct/proxmox-datacenter-manager.sh b/ct/proxmox-datacenter-manager.sh
new file mode 100644
index 000000000..d254d6835
--- /dev/null
+++ b/ct/proxmox-datacenter-manager.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: CrazyWolf13
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: Proxmox Server Solution GmbH
+
+# App Default Values
+APP="proxmox-datacenter-manager"
+var_tags="datacenter"
+var_cpu="2"
+var_ram="2048"
+var_disk="10"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -e /usr/sbin/proxmox-datacenter-manager-admin ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:8443${CL}"
diff --git a/ct/qbittorrent.sh b/ct/qbittorrent.sh
index a80e88eb4..7b6d95d90 100644
--- a/ct/qbittorrent.sh
+++ b/ct/qbittorrent.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.qbittorrent.org/
-function header_info {
-clear
-cat <<"EOF"
- ____ _ __ __ __
- ____ _/ __ )(_) /_/ /_____ _____________ ____ / /_
- / __ `/ __ / / __/ __/ __ \/ ___/ ___/ _ \/ __ \/ __/
-/ /_/ / /_/ / / /_/ /_/ /_/ / / / / / __/ / / / /_
-\__, /_____/_/\__/\__/\____/_/ /_/ \___/_/ /_/\__/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="qBittorrent"
-var_disk="8"
+var_tags="torrent"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/qbittorrent-nox.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated ${APP} LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/qbittorrent-nox.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8090${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8090${CL}"
\ No newline at end of file
diff --git a/ct/rabbitmq.sh b/ct/rabbitmq.sh
index 0be6a2adb..70ab87423 100644
--- a/ct/rabbitmq.sh
+++ b/ct/rabbitmq.sh
@@ -1,78 +1,50 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: tteck | Co-Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.rabbitmq.com/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ __ _ __ __ _______
- / __ \____ _/ /_ / /_ (_) /_/ |/ / __ \
- / /_/ / __ `/ __ \/ __ \/ / __/ /|_/ / / / /
- / _, _/ /_/ / /_/ / /_/ / / /_/ / / / /_/ /
-/_/ |_|\__,_/_.___/_.___/_/\__/_/ /_/\___\_\
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="RabbitMQ"
-var_disk="4"
+var_tags="mqtt"
var_cpu="1"
var_ram="1024"
-var_os="ubuntu"
-var_version="22.04"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
-
function update_script() {
-header_info
-if [[ ! -d /etc/rabbitmq ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-msg_info "Stopping ${APP} Service"
-systemctl stop rabbitmq-server
-msg_ok "Stopped ${APP} Service"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/rabbitmq ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP} Service"
+ systemctl stop rabbitmq-server
+ msg_ok "Stopped ${APP} Service"
-msg_info "Updating..."
-apt install --only-upgrade rabbitmq-server &>/dev/null
-msg_ok "Update Successfully"
+ msg_info "Updating..."
+ apt install --only-upgrade rabbitmq-server &>/dev/null
+ msg_ok "Update Successfully"
-msg_info "Starting ${APP}"
-systemctl start rabbitmq-server
-msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ${APP}"
+ systemctl start rabbitmq-server
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -80,5 +52,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:15672${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:15672${CL}"
\ No newline at end of file
diff --git a/ct/radarr.sh b/ct/radarr.sh
index aaf94d44d..f4aa3b4c2 100644
--- a/ct/radarr.sh
+++ b/ct/radarr.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://radarr.video/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \____ _____/ /___ __________
- / /_/ / __ `/ __ / __ `/ ___/ ___/
- / _, _/ /_/ / /_/ / /_/ / / / /
-/_/ |_|\__,_/\__,_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Radarr"
-var_disk="4"
+var_tags="arr"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var/lib/radarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var/lib/radarr/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -64,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:7878${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7878${CL}"
\ No newline at end of file
diff --git a/ct/rdtclient.sh b/ct/rdtclient.sh
index 9627e4845..fa5be4856 100755
--- a/ct/rdtclient.sh
+++ b/ct/rdtclient.sh
@@ -1,71 +1,62 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/rogerfar/rdt-client
-function header_info {
-clear
-cat <<"EOF"
- ____ __ ____ __ _ __ ______ __ _________ __
- / __ \___ ____ / / / __ \___ / /_ _____(_)___/ / /_ __/___ _____________ ____ / /_ / ____/ (_)__ ____ / /_
- / /_/ / _ \/ __ `/ /___/ / / / _ \/ __ \/ ___/ / __ / / / / __ \/ ___/ ___/ _ \/ __ \/ __/ / / / / / _ \/ __ \/ __/
- / _, _/ __/ /_/ / /___/ /_/ / __/ /_/ / / / / /_/ / / / / /_/ / / / / / __/ / / / /_ / /___/ / / __/ / / / /_
-/_/ |_|\___/\__,_/_/ /_____/\___/_.___/_/ /_/\__,_/ /_/ \____/_/ /_/ \___/_/ /_/\__/ \____/_/_/\___/_/ /_/\__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="RDTClient"
-var_disk="4"
+var_tags="torrent"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/rdtc/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-systemctl stop rdtc
-mkdir -p rdtc-backup
-cp -R /opt/rdtc/appsettings.json rdtc-backup/
-wget -q https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip
-unzip -oqq RealDebridClient.zip -d /opt/rdtc
-cp -R rdtc-backup/appsettings.json /opt/rdtc/
-rm -rf rdtc-backup RealDebridClient.zip
-systemctl start rdtc
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/rdtc/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop rdtc
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP}"
+ if dpkg-query -W dotnet-sdk-8.0 >/dev/null 2>&1; then
+ apt-get remove --purge -y dotnet-sdk-8.0 &>/dev/null
+ apt-get install -y dotnet-sdk-9.0 &>/dev/null
+ fi
+ mkdir -p rdtc-backup
+ cp -R /opt/rdtc/appsettings.json rdtc-backup/
+ wget -q https://github.com/rogerfar/rdt-client/releases/latest/download/RealDebridClient.zip
+ unzip -oqq RealDebridClient.zip -d /opt/rdtc
+ cp -R rdtc-backup/appsettings.json /opt/rdtc/
+ msg_ok "Updated ${APP}"
+
+ msg_info "Starting ${APP}"
+ systemctl start rdtc
+ msg_ok "Started ${APP}"
+
+ msg_info "Cleaning Up"
+ rm -rf rdtc-backup RealDebridClient.zip
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -73,5 +64,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:6500${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6500${CL}"
\ No newline at end of file
diff --git a/ct/readarr.sh b/ct/readarr.sh
index 12ec110e8..96d625dcf 100644
--- a/ct/readarr.sh
+++ b/ct/readarr.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://readarr.com/
-function header_info {
-clear
-cat <<"EOF"
- ____ __
- / __ \___ ____ _____/ /___ __________
- / /_/ / _ \/ __ `/ __ / __ `/ ___/ ___/
- / _, _/ __/ /_/ / /_/ / /_/ / / / /
-/_/ |_|\___/\__,_/\__,_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Readarr"
-var_disk="4"
+var_tags="media;comic;eBook"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var/lib/readarr/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var/lib/readarr/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8787${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8787${CL}"
\ No newline at end of file
diff --git a/ct/readeck.sh b/ct/readeck.sh
index adb04dff8..69f29ba37 100644
--- a/ct/readeck.sh
+++ b/ct/readeck.sh
@@ -1,70 +1,47 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://readeck.org/en/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ __
- / __ \___ ____ _____/ /__ _____/ /__
- / /_/ / _ \/ __ `/ __ / _ \/ ___/ //_/
- / _, _/ __/ /_/ / /_/ / __/ /__/ ,<
-/_/ |_|\___/\__,_/\__,_/\___/\___/_/|_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Readeck"
-var_disk="2"
+var_tags="bookmark"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/readeck ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-LATEST=$(curl -s https://codeberg.org/readeck/readeck/releases/ | grep -oP '(?<=Version )\d+\.\d+\.\d+' | head -1)
-systemctl stop readeck.service
-rm -rf /opt/readeck/readeck
-cd /opt/readeck
-wget -q -O readeck https://codeberg.org/readeck/readeck/releases/download/${LATEST}/readeck-${LATEST}-linux-arm64
-chmod a+x readeck
-systemctl start readeck.service
-msg_ok "Updated ${APP}"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/readeck ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ LATEST=$(curl -s https://codeberg.org/readeck/readeck/releases/ | grep -oP '(?<=Version )\d+\.\d+\.\d+' | head -1)
+ systemctl stop readeck.service
+ rm -rf /opt/readeck/readeck
+ cd /opt/readeck
+ wget -q -O readeck https://codeberg.org/readeck/readeck/releases/download/${LATEST}/readeck-${LATEST}-linux-amd64
+ chmod a+x readeck
+ systemctl start readeck.service
+ msg_ok "Updated ${APP}"
+ exit
}
start
@@ -72,5 +49,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8000${CL}\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
\ No newline at end of file
diff --git a/ct/recyclarr.sh b/ct/recyclarr.sh
new file mode 100644
index 000000000..5063ec2fe
--- /dev/null
+++ b/ct/recyclarr.sh
@@ -0,0 +1,53 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: MrYadro
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://recyclarr.dev/wiki/
+
+# App Default Values
+APP="Recyclarr"
+var_tags="arr"
+var_cpu="1"
+var_ram="512"
+var_disk="2"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /root/.config/recyclarr/recyclarr.yml ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+
+ msg_info "Updating ${APP}"
+ wget -q $(curl -s https://api.github.com/repos/recyclarr/recyclarr/releases/latest | grep download | grep linux-x64 | cut -d\" -f4)
+ tar -C /usr/local/bin -xJf recyclarr*.tar.xz
+ rm -rf recyclarr*.tar.xz
+ msg_ok "Updated ${APP}"
+
+ msg_ok "Updated Successfully"
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following IP:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}${IP}${CL}"
\ No newline at end of file
diff --git a/ct/redis.sh b/ct/redis.sh
index a0731c023..6b64f9b7c 100644
--- a/ct/redis.sh
+++ b/ct/redis.sh
@@ -1,63 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://redis.io/
-function header_info {
-clear
-cat <<"EOF"
- ____ ___
- / __ \___ ____/ (_)____
- / /_/ / _ \/ __ / / ___/
- / _, _/ __/ /_/ / (__ )
-/_/ |_|\___/\__,_/_/____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Redis"
-var_disk="4"
+var_tags="database"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
-VERBOSE="yes"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /lib/systemd/system/redis-server.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /lib/systemd/system/redis-server.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
}
start
@@ -65,3 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following IP:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}${IP}:6379${CL}"
\ No newline at end of file
diff --git a/ct/rockylinux.sh b/ct/rockylinux.sh
deleted file mode 100644
index c3339c2a5..000000000
--- a/ct/rockylinux.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
-# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
-
-function header_info {
-clear
-cat <<"EOF"
- ____ __ __ _
- / __ \____ _____/ /____ __ / / (_)___ __ ___ __
- / /_/ / __ \/ ___/ //_/ / / / / / / / __ \/ / / / |/_/
- / _, _/ /_/ / /__/ ,< / /_/ / / /___/ / / / / /_/ /> <
-/_/ |_|\____/\___/_/|_|\__, / /_____/_/_/ /_/\__,_/_/|_|
- /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
-APP="Rocky Linux"
-var_disk="1"
-var_cpu="1"
-var_ram="512"
-var_os="rockylinux"
-var_version="9"
-variables
-color
-catch_errors
-
-function default_settings() {
- CT_TYPE="1"
- PW="-password rockylinux"
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
-function update_script() {
-header_info
-if [[ ! -d /etc/pacman.d ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-dnf -y update
-dnf -y upgrade
-msg_ok "Updated Successfully"
-exit
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
diff --git a/ct/rtsptoweb.sh b/ct/rtsptoweb.sh
index 3cad0103c..9b85efc41 100644
--- a/ct/rtsptoweb.sh
+++ b/ct/rtsptoweb.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/deepch/RTSPtoWeb
-function header_info {
-clear
-cat <<"EOF"
- ____ ___________ ____ __ _ __ __
- / __ \/_ __/ ___// __ \/ /_____| | / /__ / /_
- / /_/ / / / \__ \/ /_/ / __/ __ \ | /| / / _ \/ __ \
- / _, _/ / / ___/ / ____/ /_/ /_/ / |/ |/ / __/ /_/ /
-/_/ |_| /_/ /____/_/ \__/\____/|__/|__/\___/_.___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="RTSPtoWeb"
-var_disk="4"
+var_tags="media"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8083 ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8083${CL}"
\ No newline at end of file
diff --git a/ct/runtipi.sh b/ct/runtipi.sh
index e39d48e09..641c02362 100644
--- a/ct/runtipi.sh
+++ b/ct/runtipi.sh
@@ -1,62 +1,39 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://runtipi.io/
-function header_info {
-clear
-cat <<"EOF"
- ____ __ _ _
- / __ \__ ______ / /_(_)___ (_)
- / /_/ / / / / __ \/ __/ / __ \/ /
- / _, _/ /_/ / / / / /_/ / /_/ / /
-/_/ |_|\__,_/_/ /_/\__/_/ .___/_/
- /_/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Runtipi"
-var_disk="8"
+var_tags="os"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/runtipi ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-cd /opt/runtipi && ./runtipi-cli update latest
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/runtipi ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ cd /opt/runtipi && ./runtipi-cli update latest
+ exit
}
start
@@ -64,5 +41,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP} ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/sabnzbd.sh b/ct/sabnzbd.sh
index 90c1cbfb8..5f58c02c9 100644
--- a/ct/sabnzbd.sh
+++ b/ct/sabnzbd.sh
@@ -1,76 +1,53 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://sabnzbd.org/
-function header_info {
-clear
-cat <<"EOF"
- _____ ___ ____ __ __
- / ___// | / __ )____ ____ / /_ ____/ /
- \__ \/ /| | / __ / __ \/_ / / __ \/ __ /
- ___/ / ___ |/ /_/ / / / / / /_/ /_/ / /_/ /
-/____/_/ |_/_____/_/ /_/ /___/_.___/\__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="SABnzbd"
-var_disk="8"
+var_tags="downloader"
var_cpu="2"
-var_ram="2048"
+var_ram="4096"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/sabnzbd ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -s https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Updating $APP to ${RELEASE}"
- systemctl stop sabnzbd.service
- tar zxvf <(curl -fsSL https://github.com/sabnzbd/sabnzbd/releases/download/$RELEASE/SABnzbd-${RELEASE}-src.tar.gz) &>/dev/null
- \cp -r SABnzbd-${RELEASE}/* /opt/sabnzbd &>/dev/null
- rm -rf SABnzbd-${RELEASE}
- cd /opt/sabnzbd
- python3 -m pip install -r requirements.txt &>/dev/null
- echo "${RELEASE}" >/opt/${APP}_version.txt
- systemctl start sabnzbd.service
- msg_ok "Updated ${APP} to ${RELEASE}"
-else
- msg_info "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/sabnzbd ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Updating $APP to ${RELEASE}"
+ systemctl stop sabnzbd.service
+ tar zxvf <(curl -fsSL https://github.com/sabnzbd/sabnzbd/releases/download/$RELEASE/SABnzbd-${RELEASE}-src.tar.gz) &>/dev/null
+ \cp -r SABnzbd-${RELEASE}/* /opt/sabnzbd &>/dev/null
+ rm -rf SABnzbd-${RELEASE}
+ cd /opt/sabnzbd
+ python3 -m pip install -r requirements.txt &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ systemctl start sabnzbd.service
+ msg_ok "Updated ${APP} to ${RELEASE}"
+ else
+ msg_info "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -78,5 +55,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:7777${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7777${CL}"
diff --git a/ct/scrypted.sh b/ct/scrypted.sh
deleted file mode 100644
index d0cf24678..000000000
--- a/ct/scrypted.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
-# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
-
-function header_info {
-clear
-cat <<"EOF"
- _____ __ __
- / ___/____________ ______ / /____ ____/ /
- \__ \/ ___/ ___/ / / / __ \/ __/ _ \/ __ /
- ___/ / /__/ / / /_/ / /_/ / /_/ __/ /_/ /
-/____/\___/_/ \__, / .___/\__/\___/\__,_/
- /____/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
-APP="Scrypted"
-var_disk="8"
-var_cpu="2"
-var_ram="2048"
-var_os="debian"
-var_version="12"
-variables
-color
-catch_errors
-
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
-function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/scrypted.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
-}
-
-start
-build_container
-description
-
-msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}https://${IP}:10443${CL} \n"
diff --git a/ct/sftpgo.sh b/ct/sftpgo.sh
index 12f0d3324..3e9f7b14d 100644
--- a/ct/sftpgo.sh
+++ b/ct/sftpgo.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://sftpgo.com/
-function header_info {
-clear
-cat <<"EOF"
- _____ ________________ ______
- / ___// ____/_ __/ __ \/ ____/___
- \__ \/ /_ / / / /_/ / / __/ __ \
- ___/ / __/ / / / ____/ /_/ / /_/ /
-/____/_/ /_/ /_/ \____/\____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="SFTPGo"
-var_disk="4"
+var_tags="ftp;sftp"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080/web/admin ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/web/admin${CL}"
\ No newline at end of file
diff --git a/ct/shinobi.sh b/ct/shinobi.sh
index 49a15e17d..de34210a3 100644
--- a/ct/shinobi.sh
+++ b/ct/shinobi.sh
@@ -1,68 +1,45 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://shinobi.video/
-function header_info {
-clear
-cat <<"EOF"
- _____ __ _ __ _
- / ___// /_ (_)___ ____ / /_ (_)
- \__ \/ __ \/ / __ \/ __ \/ __ \/ /
- ___/ / / / / / / / / /_/ / /_/ / /
-/____/_/ /_/_/_/ /_/\____/_.___/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Shinobi"
-var_disk="8"
+var_tags="nvr"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="ubuntu"
var_version="22.04"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/Shinobi ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating Shinobi LXC"
-cd /opt/Shinobi
-sh UPDATE.sh
-pm2 flush
-pm2 restart camera
-pm2 restart cron
-msg_ok "Updated Shinobi LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/Shinobi ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating Shinobi LXC"
+ cd /opt/Shinobi
+ sh UPDATE.sh
+ pm2 flush
+ pm2 restart camera
+ pm2 restart cron
+ msg_ok "Updated Shinobi LXC"
+ exit
}
start
@@ -70,5 +47,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8080/super${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080/super${CL}"
\ No newline at end of file
diff --git a/ct/silverbullet.sh b/ct/silverbullet.sh
new file mode 100644
index 000000000..744379b5b
--- /dev/null
+++ b/ct/silverbullet.sh
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: Dominik Siebel (dsiebel)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://silverbullet.md
+
+# App default values
+APP="Silverbullet"
+var_tags="notes"
+var_cpu="1"
+var_disk="2"
+var_ram="512"
+var_os="debian"
+var_version="12"
+
+# App Output & Base Settings
+header_info "${APP}"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/silverbullet ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ RELEASE=$(curl -s https://api.github.com/repos/silverbulletmd/silverbullet/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ ! -f "/opt/${APP}_version.txt" || "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop silverbullet
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ wget -q https://github.com/silverbulletmd/silverbullet/releases/download/${RELEASE}/silverbullet-server-linux-x86_64.zip
+ unzip -q silverbullet-server-linux-x86_64.zip
+ mv silverbullet /opt/silverbullet/bin/
+ chmod +x /opt/silverbullet/bin/silverbullet
+ echo "${RELEASE}" >/opt/silverbullet/${APP}_version.txt
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting ${APP}"
+ systemctl start silverbullet
+ msg_ok "Started ${APP}"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
diff --git a/ct/smokeping.sh b/ct/smokeping.sh
index 9c669aea0..4e7473abb 100644
--- a/ct/smokeping.sh
+++ b/ct/smokeping.sh
@@ -1,67 +1,43 @@
#!/usr/bin/env bash
-
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://oss.oetiker.ch/smokeping/
-function header_info {
-clear
-cat <<"EOF"
- _____ __ ____ _
- / ___/____ ___ ____ / /_____ / __ \(_)___ ____ _
- \__ \/ __ `__ \/ __ \/ //_/ _ \/ /_/ / / __ \/ __ `/
- ___/ / / / / / / /_/ / ,< / __/ ____/ / / / / /_/ /
-/____/_/ /_/ /_/\____/_/|_|\___/_/ /_/_/ /_/\__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="SmokePing"
-var_disk="2"
+var_tags="network"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if ! command -v smokeping &> /dev/null; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if ! command -v smokeping &>/dev/null; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
-msg_info "Updating ${APP}"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ msg_info "Updating ${APP}"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -69,5 +45,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}/smokeping${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/smokeping${CL}"
\ No newline at end of file
diff --git a/ct/snipeit.sh b/ct/snipeit.sh
new file mode 100644
index 000000000..506e14cb1
--- /dev/null
+++ b/ct/snipeit.sh
@@ -0,0 +1,75 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: Michel Roegl-Brunner (michelroegl-brunner)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://snipeitapp.com/
+
+# App Default Values
+APP="SnipeIT"
+var_tags="assat-management;foss"
+var_cpu="2"
+var_ram="2048"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/snipe-it ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/snipe/snipe-it/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Updating ${APP} to v${RELEASE}"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ mv /opt/snipe-it /opt/snipe-it-backup
+ cd /opt
+ wget -q "https://github.com/snipe/snipe-it/archive/refs/tags/v${RELEASE}.zip" &>/dev/null
+ unzip -q v${RELEASE}.zip
+ mv snipe-it-${RELEASE} /opt/snipe-it
+ cp /opt/snipe-it-backup/.env /opt/snipe-it/.env
+ cp -r /opt/snipe-it-backup/public/uploads/ /opt/snipe-it/public/uploads/
+ cp -r /opt/snipe-it-backup/storage/private_uploads /opt/snipe-it/storage/private_uploads
+ cd /opt/snipe-it/
+ export COMPOSER_ALLOW_SUPERUSER=1
+ composer install --no-dev --prefer-source &>/dev/null
+ composer dump-autoload &>/dev/null
+ php artisan migrate --force &>/dev/null
+ php artisan config:clear &>/dev/null
+ php artisan route:clear &>/dev/null
+ php artisan cache:clear &>/dev/null
+ php artisan view:clear &>/dev/null
+ chown -R www-data: /opt/snipe-it
+ chmod -R 755 /opt/snipe-it
+ rm -rf /opt/v${RELEASE}.zip
+ rm -rf /opt/snipe-it-backup
+ msg_ok "Updated ${APP} LXC"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}."
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/sonarr.sh b/ct/sonarr.sh
index 907666e5e..80e3714bc 100644
--- a/ct/sonarr.sh
+++ b/ct/sonarr.sh
@@ -1,70 +1,47 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://sonarr.tv/
-function header_info {
-clear
-cat <<"EOF"
- _____
- / ___/____ ____ ____ __________
- \__ \/ __ \/ __ \/ __ `/ ___/ ___/
- ___/ / /_/ / / / / /_/ / / / /
-/____/\____/_/ /_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Sonarr"
-var_disk="4"
+var_tags="arr"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/Sonarr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP v4"
-systemctl stop sonarr.service
-wget -q -O SonarrV4.tar.gz 'https://services.sonarr.tv/v1/download/main/latest?version=4&os=linux&arch=arm64'
-tar -xzf SonarrV4.tar.gz
-rm -rf /opt/Sonarr
-mv Sonarr /opt
-rm -rf SonarrV4.tar.gz
-systemctl start sonarr.service
-msg_ok "Updated $APP v4"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var/lib/sonarr/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP v4"
+ systemctl stop sonarr.service
+ wget -q -O SonarrV4.tar.gz 'https://services.sonarr.tv/v1/download/main/latest?version=4&os=linux&arch=x64'
+ tar -xzf SonarrV4.tar.gz
+ rm -rf /opt/Sonarr
+ mv Sonarr /opt
+ rm -rf SonarrV4.tar.gz
+ systemctl start sonarr.service
+ msg_ok "Updated $APP v4"
+ exit
}
start
@@ -72,5 +49,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8989${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8989${CL}"
\ No newline at end of file
diff --git a/ct/spoolman.sh b/ct/spoolman.sh
index 20e479ffb..4ddf5a732 100644
--- a/ct/spoolman.sh
+++ b/ct/spoolman.sh
@@ -1,96 +1,69 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/Donkie/Spoolman
-function header_info {
-clear
-cat <<"EOF"
- _____ __
- / ___/____ ____ ____ / /___ ___ ____ _____
- \__ \/ __ \/ __ \/ __ \/ / __ `__ \/ __ `/ __ \
- ___/ / /_/ / /_/ / /_/ / / / / / / / /_/ / / / /
-/____/ .___/\____/\____/_/_/ /_/ /_/\__,_/_/ /_/
- /_/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Spoolman"
-var_disk="4"
+var_tags="3d-printing"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/spoolman ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-RELEASE=$(wget -q https://github.com/Donkie/Spoolman/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/spoolman ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(wget -q https://github.com/Donkie/Spoolman/releases/latest -O - | grep "title>Release" | cut -d " " -f 4)
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping ${APP} Service"
- systemctl stop spoolman
- msg_ok "Stopped ${APP} Service"
+ msg_info "Stopping ${APP} Service"
+ systemctl stop spoolman
+ msg_ok "Stopped ${APP} Service"
- msg_info "Updating ${APP} to ${RELEASE}"
- cd /opt
- rm -rf spoolman_bak
- mv spoolman spoolman_bak
- wget -q https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip
- unzip -q spoolman.zip -d spoolman
- cd spoolman
- pip3 install -r requirements.txt >/dev/null 2>&1
- wget -q https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example -O .env
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt
+ rm -rf spoolman_bak
+ mv spoolman spoolman_bak
+ wget -q https://github.com/Donkie/Spoolman/releases/download/${RELEASE}/spoolman.zip
+ unzip -q spoolman.zip -d spoolman
+ cd spoolman
+ pip3 install -r requirements.txt >/dev/null 2>&1
+ wget -q https://raw.githubusercontent.com/Donkie/Spoolman/master/.env.example -O .env
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
- msg_info "Starting ${APP} Service"
- systemctl start spoolman
- msg_ok "Started ${APP} Service"
+ msg_info "Starting ${APP} Service"
+ systemctl start spoolman
+ msg_ok "Started ${APP} Service"
- msg_info "Cleaning up"
- rm -rf /opt/spoolman.zip
- msg_ok "Cleaned"
+ msg_info "Cleaning up"
+ rm -rf /opt/spoolman.zip
+ msg_ok "Cleaned"
- msg_ok "Updated Successfully!\n"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_ok "Updated Successfully!\n"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -98,5 +71,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:7912${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:7912${CL}"
\ No newline at end of file
diff --git a/ct/stirling-pdf.sh b/ct/stirling-pdf.sh
index 4aa4be265..67acd496c 100644
--- a/ct/stirling-pdf.sh
+++ b/ct/stirling-pdf.sh
@@ -1,76 +1,57 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.stirlingpdf.com/
-function header_info {
-clear
-cat <<"EOF"
- _____ __ _ ___ ____ ____ ______
- / ___// /_(_)____/ (_)___ ____ _ / __ \/ __ \/ ____/
- \__ \/ __/ / ___/ / / __ \/ __ `/___/ /_/ / / / / /_
- ___/ / /_/ / / / / / / / / /_/ /___/ ____/ /_/ / __/
-/____/\__/_/_/ /_/_/_/ /_/\__, / /_/ /_____/_/
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Stirling-PDF"
-var_disk="8"
+var_tags="pdf-editor"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/Stirling-PDF ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-systemctl stop stirlingpdf
-RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz
-tar -xzf v$RELEASE.tar.gz
-cd Stirling-PDF-$RELEASE
-chmod +x ./gradlew
-./gradlew build &>/dev/null
-cp -r ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/
-cp -r scripts /opt/Stirling-PDF/
-cd ~
-rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
-ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
-systemctl start stirlingpdf
-msg_ok "Updated ${APP} to v$RELEASE"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/Stirling-PDF ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ systemctl stop stirlingpdf
+ if [[ -n $(dpkg -l | grep -w ocrmypdf) ]] && [[ -z $(dpkg -l | grep -w qpdf) ]]; then
+ apt-get remove -y ocrmypdf &>/dev/null
+ apt-get install -y qpdf &>/dev/null
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/Stirling-Tools/Stirling-PDF/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ wget -q https://github.com/Stirling-Tools/Stirling-PDF/archive/refs/tags/v$RELEASE.tar.gz
+ tar -xzf v$RELEASE.tar.gz
+ cd Stirling-PDF-$RELEASE
+ chmod +x ./gradlew
+ ./gradlew build &>/dev/null
+ cp -r ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/
+ cp -r scripts /opt/Stirling-PDF/
+ cd ~
+ rm -rf Stirling-PDF-$RELEASE v$RELEASE.tar.gz
+ ln -sf /opt/Stirling-PDF/Stirling-PDF-$RELEASE.jar /opt/Stirling-PDF/Stirling-PDF.jar
+ systemctl start stirlingpdf
+ msg_ok "Updated ${APP} to v$RELEASE"
+ exit
}
start
@@ -78,5 +59,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080 ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
\ No newline at end of file
diff --git a/ct/syncthing.sh b/ct/syncthing.sh
index a8cb898be..8a6856201 100644
--- a/ct/syncthing.sh
+++ b/ct/syncthing.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://syncthing.net/
-function header_info {
-clear
-cat <<"EOF"
- _____ __ __ _
- / ___/__ ______ _____/ /_/ /_ (_)___ ____ _
- \__ \/ / / / __ \/ ___/ __/ __ \/ / __ \/ __ `/
- ___/ / /_/ / / / / /__/ /_/ / / / / / / / /_/ /
-/____/\__, /_/ /_/\___/\__/_/ /_/_/_/ /_/\__, /
- /____/ /____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Syncthing"
-var_disk="8"
+var_tags="sync"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/sources.list.d/syncthing.list ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/sources.list.d/syncthing.list ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8384 ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8384${CL}"
\ No newline at end of file
diff --git a/ct/tandoor.sh b/ct/tandoor.sh
index 943b4c360..0a449c22d 100644
--- a/ct/tandoor.sh
+++ b/ct/tandoor.sh
@@ -1,61 +1,37 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://tandoor.dev/
-function header_info {
-clear
-cat <<"EOF"
- ______ __ ____ _
- /_ __/___ _____ ____/ /___ ____ _____ / __ \___ _____(_)___ ___ _____
- / / / __ `/ __ \/ __ / __ \/ __ \/ ___/ / /_/ / _ \/ ___/ / __ \/ _ \/ ___/
- / / / /_/ / / / / /_/ / /_/ / /_/ / / / _, _/ __/ /__/ / /_/ / __(__ )
-/_/ \__,_/_/ /_/\__,_/\____/\____/_/ /_/ |_|\___/\___/_/ .___/\___/____/
- /_/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Tandoor"
-var_disk="10"
+var_tags="recipes"
var_cpu="4"
var_ram="4096"
+var_disk="10"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
header_info
- if [[ ! -d /opt/tandoor ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/tandoor ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
if cd /opt/tandoor && git pull | grep -q 'Already up to date'; then
msg_ok "There is currently no update available."
else
@@ -79,11 +55,7 @@ start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 2048
-pct set $CTID -cores 2
-msg_ok "Set Container to Normal Resources"
-
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8002${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8002${CL}"
\ No newline at end of file
diff --git a/ct/tasmoadmin.sh b/ct/tasmoadmin.sh
index ea0f691f6..dae770946 100644
--- a/ct/tasmoadmin.sh
+++ b/ct/tasmoadmin.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/TasmoAdmin/TasmoAdmin
-function header_info {
-clear
-cat <<"EOF"
- ______ ___ __ _
- /_ __/___ __________ ___ ____ / | ____/ /___ ___ (_)___
- / / / __ `/ ___/ __ `__ \/ __ \/ /| |/ __ / __ `__ \/ / __ \
- / / / /_/ (__ ) / / / / / /_/ / ___ / /_/ / / / / / / / / / /
-/_/ \__,_/____/_/ /_/ /_/\____/_/ |_\__,_/_/ /_/ /_/_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="TasmoAdmin"
-var_disk="2"
+var_tags="tasmota;smarthome"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:9999${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9999${CL}"
\ No newline at end of file
diff --git a/ct/tautulli.sh b/ct/tautulli.sh
index 147df32b8..934131c98 100644
--- a/ct/tautulli.sh
+++ b/ct/tautulli.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://tautulli.com/
-function header_info {
-clear
-cat <<"EOF"
- ______ __ _____
- /_ __/___ ___ __/ /___ __/ / (_)
- / / / __ `/ / / / __/ / / / / / /
- / / / /_/ / /_/ / /_/ /_/ / / / /
-/_/ \__,_/\__,_/\__/\__,_/_/_/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Tautulli"
-var_disk="4"
+var_tags="media"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/Tautulli/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/Tautulli/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8181${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8181${CL}"
\ No newline at end of file
diff --git a/ct/tdarr.sh b/ct/tdarr.sh
index ab02db75e..c69f2281e 100644
--- a/ct/tdarr.sh
+++ b/ct/tdarr.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://home.tdarr.io/
-function header_info {
-clear
-cat <<"EOF"
- ______ __
- /_ __/___/ /___ __________
- / / / __ / __ `/ ___/ ___/
- / / / /_/ / /_/ / / / /
-/_/ \__,_/\__,_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Tdarr"
-var_disk="4"
+var_tags="arr"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/tdarr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/tdarr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8265${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8265${CL}"
\ No newline at end of file
diff --git a/ct/technitiumdns.sh b/ct/technitiumdns.sh
index f45f5964b..73920a2ee 100644
--- a/ct/technitiumdns.sh
+++ b/ct/technitiumdns.sh
@@ -1,70 +1,56 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://technitium.com/dns/
-function header_info {
-clear
-cat <<"EOF"
- ______ __ _ __ _ ____ _ _______
- /_ __/__ _____/ /_ ____ (_) /_(_)_ ______ ___ / __ \/ | / / ___/
- / / / _ \/ ___/ __ \/ __ \/ / __/ / / / / __ __ \ / / / / |/ /\__ \
- / / / __/ /__/ / / / / / / / /_/ / /_/ / / / / / / / /_/ / /| /___/ /
-/_/ \___/\___/_/ /_/_/ /_/_/\__/_/\__,_/_/ /_/ /_/ /_____/_/ |_//____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Technitium DNS"
-var_disk="2"
+var_tags="dns"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /etc/dns ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-bash <(curl -fsSL https://download.technitium.com/dns/install.sh) &>/dev/null
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/dns ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+
+ if ! dpkg -s aspnetcore-runtime-8.0 >/dev/null 2>&1; then
+ wget -q https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb
+ dpkg -i packages-microsoft-prod.deb &>/dev/null
+ apt-get update &>/dev/null
+ apt-get install -y aspnetcore-runtime-8.0 &>/dev/null
+ rm packages-microsoft-prod.deb
+ fi
+ bash <(curl -fsSL https://download.technitium.com/dns/install.sh) &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
build_container
description
-msg_ok "Completed Successfully!\n"a
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5380${CL} \n"
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5380${CL}"
\ No newline at end of file
diff --git a/ct/teddycloud.sh b/ct/teddycloud.sh
new file mode 100644
index 000000000..65e49f20b
--- /dev/null
+++ b/ct/teddycloud.sh
@@ -0,0 +1,70 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: Dominik Siebel (dsiebel)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/toniebox-reverse-engineering/teddycloud
+
+# App default values
+APP="TeddyCloud"
+var_tags="media"
+var_cpu="2"
+var_disk="8"
+var_ram="1024"
+var_os="debian"
+var_version="12"
+
+# App Output & Base Settings
+header_info "${APP}"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/teddycloud ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ RELEASE="$(curl -s https://api.github.com/repos/toniebox-reverse-engineering/teddycloud/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')"
+ VERSION="${RELEASE#tc_v}"
+ if [[ ! -f "/opt/${APP}_version.txt" || "${VERSION}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop teddycloud
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP} to v${VERSION}"
+ PREVIOUS_VERSION="$(readlink -f /opt/teddycloud)"
+ wget -q "https://github.com/toniebox-reverse-engineering/teddycloud/releases/download/${RELEASE}/teddycloud.amd64.release_v${VERSION}.zip"
+ unzip -q -d "/opt/teddycloud-${VERSION}" "teddycloud.amd64.release_v${VERSION}.zip"
+ ln -fns "/opt/teddycloud-${VERSION}" /opt/teddycloud
+ echo "${VERSION}" >"/opt/${APP}_version.txt"
+ cp -R "${PREVIOUS_VERSION}/certs" /opt/teddycloud
+ cp -R "${PREVIOUS_VERSION}/config" /opt/teddycloud
+ cp -R "${PREVIOUS_VERSION}/data" /opt/teddycloud
+ msg_ok "Updated ${APP} to v${VERSION}"
+
+ msg_info "Starting ${APP}"
+ systemctl start teddycloud
+ msg_ok "Started ${APP}"
+
+ msg_info "Cleaning up"
+ rm "teddycloud.amd64.release_v${VERSION}.zip"
+ rm -rf "${PREVIOUS_VERSION}"
+ msg_ok "Cleaned"
+ else
+ msg_ok "No update required. ${APP} is already at v${VERSION}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
diff --git a/ct/the-lounge.sh b/ct/the-lounge.sh
new file mode 100644
index 000000000..ea8547746
--- /dev/null
+++ b/ct/the-lounge.sh
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: kristocopani
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://thelounge.chat/
+
+# App Default Values
+APP="The-Lounge"
+var_tags="irc"
+var_cpu="2"
+var_ram="2048"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /usr/lib/systemd/system/thelounge.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/thelounge/thelounge-deb/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop thelounge
+ msg_ok "Stopped Service"
+
+ msg_info "Updating ${APP} to v${RELEASE}"
+ apt-get install --only-upgrade nodejs &>/dev/null
+ cd /opt
+ wget -q https://github.com/thelounge/thelounge-deb/releases/download/v${RELEASE}/thelounge_${RELEASE}_all.deb
+ dpkg -i ./thelounge_${RELEASE}_all.deb
+ msg_ok "Updated ${APP} to v${RELEASE}"
+
+ msg_info "Starting Service"
+ systemctl start thelounge
+ msg_ok "Started Service"
+
+ msg_info "Cleaning up"
+ rm -rf "/opt/thelounge_${RELEASE}_all.deb"
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at v${RELEASE}."
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
\ No newline at end of file
diff --git a/ct/threadfin.sh b/ct/threadfin.sh
index 1778ba3c0..bb3bc8941 100644
--- a/ct/threadfin.sh
+++ b/ct/threadfin.sh
@@ -1,67 +1,44 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/Threadfin/Threadfin
-function header_info {
-clear
-cat <<"EOF"
- ________ _______
- /_ __/ /_ ________ ____ _____/ / __(_)___
- / / / __ \/ ___/ _ \/ __ `/ __ / /_/ / __ \
- / / / / / / / / __/ /_/ / /_/ / __/ / / / /
-/_/ /_/ /_/_/ \___/\__,_/\__,_/_/ /_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Threadfin"
-var_disk="4"
+var_tags="media"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/threadfin ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-systemctl stop threadfin.service
-wget -q -O /opt/threadfin/threadfin 'https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_arm64'
-chmod +x /opt/threadfin/threadfin
-systemctl start threadfin.service
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/threadfin ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ systemctl stop threadfin.service
+ wget -q -O /opt/threadfin/threadfin 'https://github.com/Threadfin/Threadfin/releases/latest/download/Threadfin_linux_amd64'
+ chmod +x /opt/threadfin/threadfin
+ systemctl start threadfin.service
+ msg_ok "Updated $APP"
+ exit
}
start
@@ -69,5 +46,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:34400/web${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:34400/web${CL}"
\ No newline at end of file
diff --git a/ct/tianji.sh b/ct/tianji.sh
index 771781ad4..f2882924a 100644
--- a/ct/tianji.sh
+++ b/ct/tianji.sh
@@ -1,115 +1,82 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://tianji.msgbyte.com/
-function header_info {
-clear
-cat <<"EOF"
- _______ _ _
- /_ __(_)___ _____ (_|_)
- / / / / __ `/ __ \ / / /
- / / / / /_/ / / / / / / /
-/_/ /_/\__,_/_/ /_/_/ /_/
- /___/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Tianji"
-var_disk="12"
+var_tags="monitoring"
var_cpu="4"
var_ram="4096"
+var_disk="12"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
function update_script() {
-header_info
-if [[ ! -d /opt/tianji ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-RELEASE=$(curl -s https://api.github.com/repos/msgbyte/tianji/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
- msg_info "Stopping ${APP} Service"
- systemctl stop tianji
- msg_ok "Stopped ${APP} Service"
- msg_info "Updating ${APP} to ${RELEASE}"
- cd /opt
- cp /opt/tianji/src/server/.env /opt/.env
- mv /opt/tianji /opt/tianji_bak
- wget -q "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip"
- unzip -q v${RELEASE}.zip
- mv tianji-${RELEASE} /opt/tianji
- cd tianji
- pnpm install --filter @tianji/client... --config.dedupe-peer-dependents=false --frozen-lockfile >/dev/null 2>&1
- pnpm build:static >/dev/null 2>&1
- pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false >/dev/null 2>&1
- mkdir -p ./src/server/public >/dev/null 2>&1
- cp -r ./geo ./src/server/public >/dev/null 2>&1
- pnpm build:server >/dev/null 2>&1
- mv /opt/.env /opt/tianji/src/server/.env
- cd src/server
- pnpm db:migrate:apply >/dev/null 2>&1
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP} to ${RELEASE}"
- msg_info "Starting ${APP}"
- systemctl start tianji
- msg_ok "Started ${APP}"
- msg_info "Cleaning up"
- rm -R /opt/v${RELEASE}.zip
- rm -rf /opt/tianji_bak
- rm -rf /opt/tianji/src/client
- rm -rf /opt/tianji/website
- rm -rf /opt/tianji/reporter
- msg_ok "Cleaned"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}."
-fi
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/tianji ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/msgbyte/tianji/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP} Service"
+ systemctl stop tianji
+ msg_ok "Stopped ${APP} Service"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt
+ cp /opt/tianji/src/server/.env /opt/.env
+ mv /opt/tianji /opt/tianji_bak
+ wget -q "https://github.com/msgbyte/tianji/archive/refs/tags/v${RELEASE}.zip"
+ unzip -q v${RELEASE}.zip
+ mv tianji-${RELEASE} /opt/tianji
+ cd tianji
+ pnpm install --filter @tianji/client... --config.dedupe-peer-dependents=false --frozen-lockfile >/dev/null 2>&1
+ pnpm build:static >/dev/null 2>&1
+ pnpm install --filter @tianji/server... --config.dedupe-peer-dependents=false >/dev/null 2>&1
+ mkdir -p ./src/server/public >/dev/null 2>&1
+ cp -r ./geo ./src/server/public >/dev/null 2>&1
+ pnpm build:server >/dev/null 2>&1
+ mv /opt/.env /opt/tianji/src/server/.env
+ cd src/server
+ pnpm db:migrate:apply >/dev/null 2>&1
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP} to ${RELEASE}"
+ msg_info "Starting ${APP}"
+ systemctl start tianji
+ msg_ok "Started ${APP}"
+ msg_info "Cleaning up"
+ rm -R /opt/v${RELEASE}.zip
+ rm -rf /opt/tianji_bak
+ rm -rf /opt/tianji/src/client
+ rm -rf /opt/tianji/website
+ rm -rf /opt/tianji/reporter
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}."
+ fi
+ exit
}
start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 1024
-pct set $CTID -cores 1
-msg_ok "Set Container to Normal Resources"
-
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:12345${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:12345${CL}"
\ No newline at end of file
diff --git a/ct/traccar.sh b/ct/traccar.sh
index fe57a944d..c8bf88b26 100644
--- a/ct/traccar.sh
+++ b/ct/traccar.sh
@@ -1,63 +1,40 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.traccar.org/
-function header_info {
-clear
-cat <<"EOF"
- ______
- /_ __/________ _______________ ______
- / / / ___/ __ `/ ___/ ___/ __ `/ ___/
- / / / / / /_/ / /__/ /__/ /_/ / /
-/_/ /_/ \__,_/\___/\___/\__,_/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Traccar"
-var_disk="2"
+var_tags="gps;tracker"
var_cpu="1"
var_ram="1024"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/traccar ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_error "There is currently no update path available."
-exit
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/traccar ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_error "There is currently no update path available."
+ exit
+ exit
}
start
@@ -65,5 +42,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8082${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8082${CL}"
\ No newline at end of file
diff --git a/ct/traefik.sh b/ct/traefik.sh
index 469029d49..877943159 100644
--- a/ct/traefik.sh
+++ b/ct/traefik.sh
@@ -1,73 +1,51 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://traefik.io/
-function header_info {
-clear
-cat <<"EOF"
- ______ _____ __
- /_ __/________ ____ / __(_) /__
- / / / ___/ __ `/ _ \/ /_/ / //_/
- / / / / / /_/ / __/ __/ / ,<
-/_/ /_/ \__,_/\___/_/ /_/_/|_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Traefik"
-var_disk="2"
+var_tags="proxy"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/traefik.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -s https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1)
-msg_info "Updating $APP LXC"
-if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
- wget -q https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_arm64.tar.gz
- tar -C /tmp -xzf traefik*.tar.gz
- mv /tmp/traefik /usr/bin/
- rm -rf traefik*.tar.gz
- systemctl restart traefik.service
- msg_ok "Updated $APP LXC"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/traefik.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/traefik/traefik/releases | grep -oP '"tag_name":\s*"v\K[\d.]+?(?=")' | sort -V | tail -n 1)
+ msg_info "Updating $APP LXC"
+ if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
+ wget -q https://github.com/traefik/traefik/releases/download/v${RELEASE}/traefik_v${RELEASE}_linux_amd64.tar.gz
+ tar -C /tmp -xzf traefik*.tar.gz
+ mv /tmp/traefik /usr/bin/
+ rm -rf traefik*.tar.gz
+ systemctl restart traefik.service
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP LXC"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -75,5 +53,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8080${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
\ No newline at end of file
diff --git a/ct/transmission.sh b/ct/transmission.sh
index 066a11963..ea05ec438 100644
--- a/ct/transmission.sh
+++ b/ct/transmission.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://transmissionbt.com/
-function header_info {
-clear
-cat <<"EOF"
- ______ _ _
- /_ __/________ _____ _________ ___ (_)_________(_)___ ____
- / / / ___/ __ `/ __ \/ ___/ __ `__ \/ / ___/ ___/ / __ \/ __ \
- / / / / / /_/ / / / (__ ) / / / / / (__ |__ ) / /_/ / / / /
-/_/ /_/ \__,_/_/ /_/____/_/ /_/ /_/_/____/____/_/\____/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Transmission"
-var_disk="8"
+var_tags="torrent"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/transmission-daemon/settings.json ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated ${APP} LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/transmission-daemon/settings.json ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:9091/transmission${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9091/transmission${CL}"
\ No newline at end of file
diff --git a/ct/trilium.sh b/ct/trilium.sh
index cc6490f31..f65702742 100644
--- a/ct/trilium.sh
+++ b/ct/trilium.sh
@@ -1,91 +1,67 @@
#!/usr/bin/env bash
-# source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
-# # Copyright (c) 2021-2024 tteck
-# # Author: tteck (tteckster)
-# # License: MIT
-# # https://github.com/tteck/Proxmox/raw/main/LICENSE
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 tteck
+# Author: tteck (tteckster)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://triliumnext.github.io/Docs/
-echo "Unsupported."
+# App Default Values
+APP="Trilium"
+var_tags="notes"
+var_cpu="1"
+var_ram="512"
+var_disk="2"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
-# function header_info {
-# clear
-# cat <<"EOF"
-# ______ _ ___
-# /_ __/____(_) (_)_ ______ ___
-# / / / ___/ / / / / / / __ `__ \
-# / / / / / / / / /_/ / / / / / /
-# /_/ /_/ /_/_/_/\__,_/_/ /_/ /_/
-
-# EOF
-# }
-# header_info
-# echo -e "Loading..."
-# APP="Trilium"
-# var_disk="2"
-# var_cpu="1"
-# var_ram="512"
-# var_os="debian"
-# var_version="12"
-# variables
-# color
-# catch_errors
+# App Output & Base Settings
+header_info "$APP"
+base_settings
-# function default_settings() {
-# CT_TYPE="1"
-# PW=""
-# CT_ID=$NEXTID
-# HN=$NSAPP
-# DISK_SIZE="$var_disk"
-# CORE_COUNT="$var_cpu"
-# RAM_SIZE="$var_ram"
-# BRG="vmbr0"
-# NET="dhcp"
-# GATE=""
-# APT_CACHER=""
-# APT_CACHER_IP=""
-# DISABLEIP6="no"
-# MTU=""
-# SD=""
-# NS=""
-# MAC=""
-# VLAN=""
-# SSH="no"
-# VERB="no"
-# echo_default
-# }
+# Core
+variables
+color
+catch_errors
-# function update_script() {
-# header_info
-# if [[ ! -d /opt/trilium ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-# RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-
-# msg_info "Stopping ${APP}"
-# systemctl stop trilium.service
-# sleep 1
-# msg_ok "Stopped ${APP}"
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/trilium ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/TriliumNext/Notes/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-# msg_info "Updating to ${RELEASE}"
-# wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz
-# tar -xf TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz
-# cp -r trilium-linux-x64-server/* /opt/trilium/
-# msg_ok "Updated to ${RELEASE}"
+ msg_info "Stopping ${APP}"
+ systemctl stop trilium.service
+ sleep 1
+ msg_ok "Stopped ${APP}"
-# msg_info "Cleaning up"
-# rm -rf TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz trilium-linux-x64-server
-# msg_ok "Cleaned"
+ msg_info "Updating to ${RELEASE}"
+ wget -q https://github.com/TriliumNext/Notes/releases/download/${RELEASE}/TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz
+ tar -xf TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz
+ cp -r trilium-linux-x64-server/* /opt/trilium/
+ msg_ok "Updated to ${RELEASE}"
-# msg_info "Starting ${APP}"
-# systemctl start trilium.service
-# sleep 1
-# msg_ok "Started ${APP}"
-# msg_ok "Updated Successfully"
-# exit
-# }
+ msg_info "Cleaning up"
+ rm -rf TriliumNextNotes-${RELEASE}-server-linux-x64.tar.xz trilium-linux-x64-server
+ msg_ok "Cleaned"
-# start
-# build_container
-# description
+ msg_info "Starting ${APP}"
+ systemctl start trilium.service
+ sleep 1
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
+}
-# msg_ok "Completed Successfully!\n"
-# echo -e "${APP} should be reachable by going to the following URL.
-# ${BL}http://${IP}:8080${CL} \n"
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8080${CL}"
\ No newline at end of file
diff --git a/ct/ubuntu.sh b/ct/ubuntu.sh
index 113c3ee60..86ac38615 100644
--- a/ct/ubuntu.sh
+++ b/ct/ubuntu.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://ubuntu.com/
-function header_info {
-clear
-cat <<"EOF"
- __ ____ __
- / / / / /_ __ ______ / /___ __
- / / / / __ \/ / / / __ \/ __/ / / /
-/ /_/ / /_/ / /_/ / / / / /_/ /_/ /
-\____/_.___/\__,_/_/ /_/\__/\__,_/
-
-EOF
-}
-header_info
+# App Default Values
echo -e "Loading..."
APP="Ubuntu"
-var_disk="2"
+var_tags="os"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="ubuntu"
-var_version="22.04"
+var_version="24.04"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated ${APP} LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
}
start
@@ -67,3 +44,4 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
\ No newline at end of file
diff --git a/ct/umami.sh b/ct/umami.sh
index 2fba79353..592c7e8df 100644
--- a/ct/umami.sh
+++ b/ct/umami.sh
@@ -1,93 +1,62 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://umami.is/
-function header_info {
-clear
-cat <<"EOF"
- _
- __ ______ ___ ____ _____ ___ (_)
- / / / / __ `__ \/ __ `/ __ `__ \/ /
-/ /_/ / / / / / / /_/ / / / / / / /
-\__,_/_/ /_/ /_/\__,_/_/ /_/ /_/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Umami"
-var_disk="12"
+var_tags="analytics"
var_cpu="2"
var_ram="2048"
+var_disk="12"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/umami ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/umami ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
-msg_info "Stopping ${APP}"
-systemctl stop umami
-msg_ok "Stopped $APP"
+ msg_info "Stopping ${APP}"
+ systemctl stop umami
+ msg_ok "Stopped $APP"
-msg_info "Updating ${APP}"
-cd /opt/umami
-git pull
-yarn install
-yarn build
-msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP}"
+ cd /opt/umami
+ git pull
+ yarn install
+ yarn build
+ msg_ok "Updated ${APP}"
-msg_info "Starting ${APP}"
-systemctl start umami
-msg_ok "Started ${APP}"
+ msg_info "Starting ${APP}"
+ systemctl start umami
+ msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_ok "Updated Successfully"
+ exit
}
start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 1024
-pct set $CTID -cores 1
-msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/umbrel.sh b/ct/umbrel.sh
index cd7ee66b0..4a5b0739c 100644
--- a/ct/umbrel.sh
+++ b/ct/umbrel.sh
@@ -1,64 +1,38 @@
-a#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://umbrel.com/
-function header_info {
-clear
-cat <<"EOF"
- __ __ __ __
- / / / /___ ___ / /_ ________ / /
- / / / / __ `__ \/ __ \/ ___/ _ \/ /
-/ /_/ / / / / / / /_/ / / / __/ /
-\____/_/ /_/ /_/_.___/_/ \___/_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Umbrel"
-var_disk="8"
+var_tags="os"
var_cpu="2"
var_ram="2048"
+var_disk="8"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-msg_info "Updating ${APP} LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated ${APP} LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ msg_info "Updating ${APP} LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
}
start
@@ -66,5 +40,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL (reboot is required before apps install).
- ${BL}http://${IP} ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized! (manual reboot is required!)${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/unbound.sh b/ct/unbound.sh
new file mode 100644
index 000000000..a8bd86513
--- /dev/null
+++ b/ct/unbound.sh
@@ -0,0 +1,49 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: wimb0
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/NLnetLabs/unbound
+
+# App Default Values
+APP="Unbound"
+var_tags="dns"
+var_cpu="1"
+var_ram="512"
+var_disk="2"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/unbound ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5335${CL}"
\ No newline at end of file
diff --git a/ct/unifi.sh b/ct/unifi.sh
index 53c543b3e..0805320fa 100644
--- a/ct/unifi.sh
+++ b/ct/unifi.sh
@@ -1,69 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://ui.com/download/unifi
-function header_info {
-clear
-cat <<"EOF"
- __ __ _ _____
- / / / /__ (_) __(_)
- / / / / __ \/ / /_/ /
-/ /_/ / / / / / __/ /
-\____/_/ /_/_/_/ /_/
-
-EOF
-}
-header_info
-if ! grep -q -m1 'avx[^ ]*' /proc/cpuinfo; then
- echo "AVX instruction set is not supported on this CPU."
- exit
-fi
-echo -e "Loading..."
+# App Default Values
APP="Unifi"
-var_disk="8"
+var_tags="network;controller;unifi"
var_cpu="2"
var_ram="2048"
-var_os="ubuntu"
-var_version="22.04"
+var_disk="8"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /usr/lib/unifi ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP}"
-apt-get update --allow-releaseinfo-change
-apt-get install -y unifi
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /usr/lib/unifi ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP}"
+ apt-get update --allow-releaseinfo-change &>/dev/null
+ apt-get install -y unifi &>/dev/null
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -71,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP}${CL} should be reachable by going to the following URL.
- ${BL}https://${IP}:8443${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8443${CL}"
diff --git a/ct/unmanic.sh b/ct/unmanic.sh
index a8249e8c5..02c53c682 100644
--- a/ct/unmanic.sh
+++ b/ct/unmanic.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://docs.unmanic.app/
-function header_info {
-clear
-cat <<"EOF"
- __ __ _
- / / / /___ ____ ___ ____ _____ (_)____
- / / / / __ \/ __ `__ \/ __ `/ __ \/ / ___/
-/ /_/ / / / / / / / / / /_/ / / / / / /__
-\____/_/ /_/_/ /_/ /_/\__,_/_/ /_/_/\___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Unmanic"
-var_disk="4"
+var_tags="file;media"
var_cpu="2"
var_ram="2048"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/systemd/system/unmanic.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-pip3 install -U unmanic &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/systemd/system/unmanic.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ pip3 install -U unmanic &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8888${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8888${CL}"
\ No newline at end of file
diff --git a/ct/uptimekuma.sh b/ct/uptimekuma.sh
index be77d734b..7c92b4aee 100644
--- a/ct/uptimekuma.sh
+++ b/ct/uptimekuma.sh
@@ -1,61 +1,37 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://uptime.kuma.pet/
-function header_info {
-clear
-cat <<"EOF"
- __ __ __ _ __ __
- / / / /___ / /_(_)___ ___ ___ / //_/_ ______ ___ ____ _
- / / / / __ \/ __/ / __ __ \/ _ \ / ,< / / / / __ __ \/ __ /
-/ /_/ / /_/ / /_/ / / / / / / __/ / /| / /_/ / / / / / / /_/ /
-\____/ .___/\__/_/_/ /_/ /_/\___/ /_/ |_\__,_/_/ /_/ /_/\__,_/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Uptime Kuma"
-var_disk="4"
+var_tags="analytics;monitoring"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/uptime-kuma ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/uptime-kuma ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
if [[ "$(node -v | cut -d 'v' -f 2)" == "18."* ]]; then
if ! command -v npm >/dev/null 2>&1; then
echo "Installing NPM..."
@@ -63,28 +39,28 @@ if [[ ! -d /opt/uptime-kuma ]]; then msg_error "No ${APP} Installation Found!";
echo "Installed NPM..."
fi
fi
-LATEST=$(curl -sL https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
-msg_info "Stopping ${APP}"
-sudo systemctl stop uptime-kuma &>/dev/null
-msg_ok "Stopped ${APP}"
+ LATEST=$(curl -sL https://api.github.com/repos/louislam/uptime-kuma/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
+ msg_info "Stopping ${APP}"
+ sudo systemctl stop uptime-kuma &>/dev/null
+ msg_ok "Stopped ${APP}"
-cd /opt/uptime-kuma
+ cd /opt/uptime-kuma
-msg_info "Pulling ${APP} ${LATEST}"
-git fetch --all &>/dev/null
-git checkout $LATEST --force &>/dev/null
-msg_ok "Pulled ${APP} ${LATEST}"
+ msg_info "Pulling ${APP} ${LATEST}"
+ git fetch --all &>/dev/null
+ git checkout $LATEST --force &>/dev/null
+ msg_ok "Pulled ${APP} ${LATEST}"
-msg_info "Updating ${APP} to ${LATEST}"
-npm install --production &>/dev/null
-npm run download-dist &>/dev/null
-msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP} to ${LATEST}"
+ npm install --production &>/dev/null
+ npm run download-dist &>/dev/null
+ msg_ok "Updated ${APP}"
-msg_info "Starting ${APP}"
-sudo systemctl start uptime-kuma &>/dev/null
-msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ${APP}"
+ sudo systemctl start uptime-kuma &>/dev/null
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -92,5 +68,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3001${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3001${CL}"
diff --git a/ct/vaultwarden.sh b/ct/vaultwarden.sh
index 18fc02ff8..3d0f30841 100644
--- a/ct/vaultwarden.sh
+++ b/ct/vaultwarden.sh
@@ -1,63 +1,38 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.vaultwarden.net/
-function header_info {
- clear
- cat <<"EOF"
- _ __ ____ _ __ __
-| | / /___ ___ __/ / /| | / /___ __________/ /__ ____
-| | / / __ `/ / / / / __/ | /| / / __ `/ ___/ __ / _ \/ __ \
-| |/ / /_/ / /_/ / / /_ | |/ |/ / /_/ / / / /_/ / __/ / / /
-|___/\__,_/\__,_/_/\__/ |__/|__/\__,_/_/ \__,_/\___/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Vaultwarden"
-var_disk="6"
+var_tags="password-manager"
var_cpu="4"
-var_ram="5120"
+var_ram="6144"
+var_disk="6"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
if [[ ! -f /etc/systemd/system/vaultwarden.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
-
+
VAULT=$(curl -s https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest |
grep "tag_name" |
awk '{print substr($2, 2, length($2)-3) }')
@@ -71,9 +46,7 @@ function update_script() {
"3" "Set Admin Token" OFF \
3>&1 1>&2 2>&3)
- header_info
if [ "$UPD" == "1" ]; then
- whiptail --backtitle "Proxmox VE Helper Scripts" --msgbox --title "SET RESOURCES" "Please set the resources in your ${APP} LXC to ${var_cpu}vCPU and ${var_ram}RAM for the build process before continuing" 10 75
msg_info "Stopping Vaultwarden"
systemctl stop vaultwarden.service
msg_ok "Stopped Vaultwarden"
@@ -100,7 +73,6 @@ function update_script() {
msg_ok "Started Vaultwarden"
msg_ok "$VAULT Update Successful"
- echo -e "\n ⚠️ Ensure you set resources back to normal settings \n"
exit
fi
if [ "$UPD" == "2" ]; then
@@ -142,10 +114,7 @@ start
build_container
description
-msg_info "Setting Container to Normal Resources"
-pct set $CTID -memory 512
-pct set $CTID -cores 1
-msg_ok "Set Container to Normal Resources"
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
diff --git a/ct/vikunja.sh b/ct/vikunja.sh
new file mode 100644
index 000000000..710949444
--- /dev/null
+++ b/ct/vikunja.sh
@@ -0,0 +1,70 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://vikunja.io/
+
+# App Default Values
+APP="Vikunja"
+var_tags="todo-app"
+var_cpu="1"
+var_ram="1024"
+var_disk="4"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/vikunja ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop vikunja
+ msg_ok "Stopped ${APP}"
+
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt
+ rm -rf /opt/vikunja/vikunja
+ wget -q "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb"
+ DEBIAN_FRONTEND=noninteractive dpkg -i vikunja-$RELEASE-amd64.deb &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP}"
+
+ msg_info "Starting ${APP}"
+ systemctl start vikunja
+ msg_ok "Started ${APP}"
+
+ msg_info "Cleaning Up"
+ rm -rf /opt/vikunja-$RELEASE-amd64.deb
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3456${CL}"
diff --git a/ct/wallos.sh b/ct/wallos.sh
index 0bd4dc275..0e06c8e1d 100644
--- a/ct/wallos.sh
+++ b/ct/wallos.sh
@@ -1,93 +1,70 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/tteck/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://wallosapp.com/
-function header_info {
-clear
-cat <<"EOF"
- _ __ ____
-| | / /___ _/ / /___ _____
-| | /| / / __ `/ / / __ \/ ___/
-| |/ |/ / /_/ / / / /_/ (__ )
-|__/|__/\__,_/_/_/\____/____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Wallos"
-var_disk="5"
+var_tags="finance"
var_cpu="1"
var_ram="1024"
+var_disk="5"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/wallos ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-RELEASE=$(curl -s https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Updating ${APP} to ${RELEASE}"
- cd /opt
- wget -q "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip"
- mv /opt/wallos/db/wallos.db /opt/wallos.db
- unzip -q v${RELEASE}.zip
- mv Wallos-${RELEASE} /opt/wallos
- rm -rf /opt/wallos/db/wallos.empty.db
- mv /opt/wallos.db /opt/wallos/db/wallos.db
- chown -R www-data:www-data /opt/wallos
- chmod -R 755 /opt/wallos
- curl http://localhost/endpoints/db/migrate.php &>/dev/null
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/wallos ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/ellite/Wallos/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cd /opt
+ wget -q "https://github.com/ellite/Wallos/archive/refs/tags/v${RELEASE}.zip"
+ mkdir -p /opt/logos
+ mv /opt/wallos/db/wallos.db /opt/wallos.db
+ mv /opt/wallos/images/uploads/logos /opt/logos/
+ unzip -q v${RELEASE}.zip
+ rm -rf /opt/wallos
+ mv Wallos-${RELEASE} /opt/wallos
+ rm -rf /opt/wallos/db/wallos.empty.db
+ mv /opt/wallos.db /opt/wallos/db/wallos.db
+ mv /opt/logos/* /opt/wallos/images/uploads/logos
+ chown -R www-data:www-data /opt/wallos
+ chmod -R 755 /opt/wallos
+ mkdir -p /var/log/cron
+ curl http://localhost/endpoints/db/migrate.php &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP}"
- msg_info "Reload Apache2"
- systemctl reload apache2
- msg_ok "Apache2 Reloaded"
+ msg_info "Reload Apache2"
+ systemctl reload apache2
+ msg_ok "Apache2 Reloaded"
- msg_info "Cleaning Up"
- rm -R /opt/v${RELEASE}.zip
- msg_ok "Cleaned"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Cleaning Up"
+ rm -R /opt/v${RELEASE}.zip
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -95,5 +72,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP} ${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/wastebin.sh b/ct/wastebin.sh
index 57a09aa66..f0c37343e 100644
--- a/ct/wastebin.sh
+++ b/ct/wastebin.sh
@@ -1,89 +1,63 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
# Source: https://github.com/matze/wastebin
-
-function header_info {
-clear
-cat <<"EOF"
- _ __ __ __ _
-| | / /___ ______/ /____ / /_ (_)___
-| | /| / / __ `/ ___/ __/ _ \/ __ \/ / __ \
-| |/ |/ / /_/ (__ ) /_/ __/ /_/ / / / / /
-|__/|__/\__,_/____/\__/\___/_.___/_/_/ /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Wastebin"
-var_disk="4"
+var_tags="file;code"
var_cpu="1"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/wastebin ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -s https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping Wastebin"
- systemctl stop wastebin
- msg_ok "Wastebin Stopped"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/wastebin ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Wastebin"
+ systemctl stop wastebin
+ msg_ok "Wastebin Stopped"
- msg_info "Updating Wastebin"
- wget -q https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst
- tar -xf wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst
- cp -f wastebin /opt/wastebin/
- chmod +x /opt/wastebin/wastebin
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated Wastebin"
+ msg_info "Updating Wastebin"
+ wget -q https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst
+ tar -xf wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst
+ cp -f wastebin /opt/wastebin/
+ chmod +x /opt/wastebin/wastebin
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated Wastebin"
- msg_info "Starting Wastebin"
- systemctl start wastebin
- msg_ok "Started Wastebin"
+ msg_info "Starting Wastebin"
+ systemctl start wastebin
+ msg_ok "Started Wastebin"
- msg_info "Cleaning Up"
- rm -rf wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst
- msg_ok "Cleaned"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Cleaning Up"
+ rm -rf wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -91,5 +65,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:8088${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8088${CL}"
\ No newline at end of file
diff --git a/ct/watchyourlan.sh b/ct/watchyourlan.sh
index fef3a70c1..e79dc3670 100644
--- a/ct/watchyourlan.sh
+++ b/ct/watchyourlan.sh
@@ -1,72 +1,49 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/aceberg/WatchYourLAN
-function header_info {
-clear
-cat <<"EOF"
- _ __ __ ____ __ __ ___ _ __
-| | / /___ _/ /______/ /\ \/ /___ __ _______/ / / | / | / /
-| | /| / / __ `/ __/ ___/ __ \ / __ \/ / / / ___/ / / /| | / |/ /
-| |/ |/ / /_/ / /_/ /__/ / / / / /_/ / /_/ / / / /___/ ___ |/ /| /
-|__/|__/\__,_/\__/\___/_/ /_/_/\____/\__,_/_/ /_____/_/ |_/_/ |_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="WatchYourLAN"
-var_disk="2"
+var_tags="network"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /lib/systemd/system/watchyourlan.service ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP"
-systemctl stop watchyourlan.service
-cp -R /data/config.yaml config.yaml
-RELEASE=$(curl -s https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4)
-wget -q https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_arm64.deb
-dpkg -i watchyourlan_${RELEASE}_linux_arm64.deb
-cp -R config.yaml /data/config.yaml
-sed -i 's|/etc/watchyourlan/config.yaml|/data/config.yaml|' /lib/systemd/system/watchyourlan.service
-rm watchyourlan_${RELEASE}_linux_arm64.deb config.yaml
-systemctl enable -q --now watchyourlan.service
-msg_ok "Updated $APP"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /lib/systemd/system/watchyourlan.service ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP"
+ systemctl stop watchyourlan.service
+ cp -R /data/config.yaml config.yaml
+ RELEASE=$(curl -s https://api.github.com/repos/aceberg/WatchYourLAN/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4)
+ wget -q https://github.com/aceberg/WatchYourLAN/releases/download/$RELEASE/watchyourlan_${RELEASE}_linux_amd64.deb
+ dpkg -i watchyourlan_${RELEASE}_linux_amd64.deb
+ cp -R config.yaml /data/config.yaml
+ sed -i 's|/etc/watchyourlan/config.yaml|/data/config.yaml|' /lib/systemd/system/watchyourlan.service
+ rm watchyourlan_${RELEASE}_linux_amd64.deb config.yaml
+ systemctl enable -q --now watchyourlan.service
+ msg_ok "Updated $APP"
+ exit
}
start
@@ -74,5 +51,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8840${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8840${CL}"
\ No newline at end of file
diff --git a/ct/wavelog.sh b/ct/wavelog.sh
new file mode 100644
index 000000000..1d1c55a9b
--- /dev/null
+++ b/ct/wavelog.sh
@@ -0,0 +1,87 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: Don Locke (DonLocke)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.wavelog.org/
+
+# App Default Values
+APP="Wavelog"
+var_tags="radio-logging"
+var_cpu="1"
+var_ram="512"
+var_disk="2"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/wavelog ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | cut -d '"' -f 4)
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Services"
+ systemctl stop apache2
+ msg_ok "Services Stopped"
+
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cp /opt/wavelog/application/config/config.php /opt/config.php
+ cp /opt/wavelog/application/config/database.php /opt/database.php
+ cp -r /opt/wavelog/userdata /opt/userdata
+ if [[ -f /opt/wavelog/assets/js/sections/custom.js ]]; then
+ cp /opt/wavelog/assets/js/sections/custom.js /opt/custom.js
+ fi
+ wget -q "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip"
+ unzip -q ${RELEASE}.zip
+ rm -rf /opt/wavelog
+ mv wavelog-${RELEASE}/ /opt/wavelog
+ rm -rf /opt/wavelog/install
+ mv /opt/config.php /opt/wavelog/application/config/config.php
+ mv /opt/database.php /opt/wavelog/application/config/database.php
+ cp -r /opt/userdata/* /opt/wavelog/userdata
+ rm -rf /opt/userdata
+ if [[ -f /opt/custom.js ]]; then
+ mv /opt/custom.js /opt/wavelog/assets/js/sections/custom.js
+ fi
+ chown -R www-data:www-data /opt/wavelog/
+ find /opt/wavelog/ -type d -exec chmod 755 {} \;
+ find /opt/wavelog/ -type f -exec chmod 664 {} \;
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP}"
+
+ msg_info "Starting Services"
+ systemctl start apache2
+ msg_ok "Started Services"
+
+ msg_info "Cleaning Up"
+ rm -rf ${RELEASE}.zip
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/whisparr.sh b/ct/whisparr.sh
index 9cf2ffad4..be18bff9c 100644
--- a/ct/whisparr.sh
+++ b/ct/whisparr.sh
@@ -1,66 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/Whisparr/Whisparr
-function header_info {
-clear
-cat <<"EOF"
- _ ____ _
-| | / / /_ (_)________ ____ __________
-| | /| / / __ \/ / ___/ __ \/ __ `/ ___/ ___/
-| |/ |/ / / / / (__ ) /_/ / /_/ / / / /
-|__/|__/_/ /_/_/____/ .___/\__,_/_/ /_/
- /_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Whisparr"
-var_disk="4"
+var_tags="arr"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /var/lib/whisparr ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /var/lib/whisparr ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -68,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:6969${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6969${CL}"
\ No newline at end of file
diff --git a/ct/whoogle.sh b/ct/whoogle.sh
index b56bb0f21..f7e5b887c 100644
--- a/ct/whoogle.sh
+++ b/ct/whoogle.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://github.com/benbusby/whoogle-search
-function header_info {
-clear
-cat <<"EOF"
- _ ____ ______ ____ ________ ______
-| | / / / / / __ \/ __ \/ ____/ / / ____/
-| | /| / / /_/ / / / / / / / / __/ / / __/
-| |/ |/ / __ / /_/ / /_/ / /_/ / /___/ /___
-|__/|__/_/ /_/\____/\____/\____/_____/_____/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Whoogle"
-var_disk="2"
+var_tags="network;seaching"
var_cpu="1"
var_ram="512"
+var_disk="2"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /usr/local/bin/whoogle-search ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating ${APP} LXC"
-pip3 install whoogle-search --upgrade &>/dev/null
-systemctl restart whoogle.service
-msg_ok "Updated Successfully"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /usr/local/bin/whoogle-search ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating ${APP} LXC"
+ pip3 install whoogle-search --upgrade &>/dev/null
+ systemctl restart whoogle.service
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:5000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5000${CL}"
\ No newline at end of file
diff --git a/ct/wikijs.sh b/ct/wikijs.sh
index fcd5c2ff2..acec35dfd 100644
--- a/ct/wikijs.sh
+++ b/ct/wikijs.sh
@@ -1,88 +1,64 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://js.wiki/
-function header_info {
-clear
-cat <<"EOF"
- _ ___ __ _ _
-| | / (_) /__(_) (_)____
-| | /| / / / //_/ / / / ___/
-| |/ |/ / / ,< / / / (__ )
-|__/|__/_/_/|_/_(_)_/ /____/
- /___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Wikijs"
-var_disk="3"
+var_tags="wiki"
var_cpu="1"
var_ram="512"
+var_disk="3"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/wikijs ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Stopping ${APP}"
-systemctl stop wikijs
-msg_ok "Stopped ${APP}"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/wikijs ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP}"
+ systemctl stop wikijs
+ msg_ok "Stopped ${APP}"
-msg_info "Backing up Data"
-mkdir -p ~/data-backup
-cp -R /opt/wikijs/{db.sqlite,config.yml,/data} ~/data-backup
-msg_ok "Backed up Data"
+ msg_info "Backing up Data"
+ mkdir -p ~/data-backup
+ cp -R /opt/wikijs/{db.sqlite,config.yml,/data} ~/data-backup
+ msg_ok "Backed up Data"
-msg_info "Updating ${APP}"
-rm -rf /opt/wikijs/*
-cd /opt/wikijs
-wget -q https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
-tar xzf wiki-js.tar.gz
-msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP}"
+ rm -rf /opt/wikijs/*
+ cd /opt/wikijs
+ wget -q https://github.com/Requarks/wiki/releases/latest/download/wiki-js.tar.gz
+ tar xzf wiki-js.tar.gz
+ msg_ok "Updated ${APP}"
-msg_info "Restoring Data"
-cp -R ~/data-backup/* /opt/wikijs
-rm -rf ~/data-backup
-npm rebuild sqlite3 &>/dev/null
-msg_ok "Restored Data"
+ msg_info "Restoring Data"
+ cp -R ~/data-backup/* /opt/wikijs
+ rm -rf ~/data-backup
+ npm rebuild sqlite3 &>/dev/null
+ msg_ok "Restored Data"
-msg_info "Starting ${APP}"
-systemctl start wikijs
-msg_ok "Started ${APP}"
-msg_ok "Updated Successfully"
-exit
+ msg_info "Starting ${APP}"
+ systemctl start wikijs
+ msg_ok "Started ${APP}"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -90,5 +66,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/wireguard.sh b/ct/wireguard.sh
index a7eed8e07..7fce847e0 100644
--- a/ct/wireguard.sh
+++ b/ct/wireguard.sh
@@ -1,65 +1,43 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.wireguard.com/
-function header_info {
-clear
-cat <<"EOF"
- _ ___ ______ __
-| | / (_)_______ / ____/_ ______ __________/ /
-| | /| / / / ___/ _ \/ / __/ / / / __ `/ ___/ __ /
-| |/ |/ / / / / __/ /_/ / /_/ / /_/ / / / /_/ /
-|__/|__/_/_/ \___/\____/\__,_/\__,_/_/ \__,_/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Wireguard"
-var_disk="4"
+var_tags="network;vpn"
var_cpu="1"
var_ram="512"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-if [[ ! -d /etc/wireguard ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-apt-get update
-apt-get -y upgrade
-sleep 2
-cd /etc/wgdashboard/src
-./wgd.sh update
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /etc/wireguard ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ apt-get update
+ apt-get -y upgrade
+ sleep 2
+ cd /etc/wgdashboard/src
+ ./wgd.sh update
+ exit
}
start
@@ -67,5 +45,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "WGDashboard should be reachable by going to the following URL.
- ${BL}http://${IP}:10086${CL} admin|admin \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} WGDashboard Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:10086${CL}"
\ No newline at end of file
diff --git a/ct/yunohost.sh b/ct/yunohost.sh
index 824f2dd38..fbd1e8a1d 100644
--- a/ct/yunohost.sh
+++ b/ct/yunohost.sh
@@ -1,65 +1,42 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://yunohost.org/
-function header_info {
-clear
-cat <<"EOF"
-__ __ __ __ __
-\ \/ /_ ______ ____ / / / /___ _____/ /_
- \ / / / / __ \/ __ \/ /_/ / __ \/ ___/ __/
- / / /_/ / / / / /_/ / __ / /_/ (__ ) /_
-/_/\__,_/_/ /_/\____/_/ /_/\____/____/\__/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="YunoHost"
-var_disk="20"
+var_tags="os"
var_cpu="2"
var_ram="2048"
+var_disk="20"
var_os="debian"
-var_version="11"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/apt/trusted.gpg.d/php.gpg ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/apt/trusted.gpg.d/php.gpg ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Updating $APP LXC"
+ apt-get update &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_ok "Updated $APP LXC"
+ exit
}
start
@@ -67,5 +44,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}/ ${CL}"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/zabbix.sh b/ct/zabbix.sh
index a38d6ea84..55a5c9521 100644
--- a/ct/zabbix.sh
+++ b/ct/zabbix.sh
@@ -1,66 +1,64 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.zabbix.com/
-function header_info {
-clear
-cat <<"EOF"
- _____ __ __ _
-/__ / ____ _/ /_ / /_ (_) __
- / / / __ `/ __ \/ __ \/ / |/_/
- / /__/ /_/ / /_/ / /_/ / /> <
-/____/\__,_/_.___/_.___/_/_/|_|
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Zabbix"
-var_disk="6"
+var_tags="monitoring"
var_cpu="2"
var_ram="4096"
+var_disk="6"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-msg_info "Updating $APP LXC"
-apt-get update &>/dev/null
-apt-get -y upgrade &>/dev/null
-systemctl restart zabbix-server
-msg_ok "Updated $APP LXC"
-exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -f /etc/zabbix/zabbix_server.conf ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping ${APP} Services"
+ systemctl stop zabbix-server zabbix-agent2
+ msg_ok "Stopped ${APP} Services"
+
+ msg_info "Updating $APP LXC"
+ mkdir -p /opt/zabbix-backup/
+ cp /etc/zabbix/zabbix_server.conf /opt/zabbix-backup/
+ cp /etc/apache2/conf-enabled/zabbix.conf /opt/zabbix-backup/
+ cp -R /usr/share/zabbix/ /opt/zabbix-backup/
+ cp -R /usr/share/zabbix-* /opt/zabbix-backup/
+ rm -Rf /etc/apt/sources.list.d/zabbix.list
+ cd /tmp
+ wget -q https://repo.zabbix.com/zabbix/7.2/release/debian/pool/main/z/zabbix-release/zabbix-release_latest+debian12_all.deb
+ dpkg -i zabbix-release_latest+debian12_all.deb &>/dev/null
+ apt-get update &>/dev/null
+ apt-get install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-agent2 zabbix-agent2-plugin-* &>/dev/null
+
+ msg_info "Starting ${APP} Services"
+ systemctl start zabbix-server zabbix-agent2
+ systemctl restart apache2
+ msg_ok "Started ${APP} Services"
+
+ msg_info "Cleaning Up"
+ rm -rf /tmp/zabbix-release_latest+debian12_all.deb
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ exit
}
start
@@ -68,5 +66,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}/zabbix${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/zabbix${CL}"
diff --git a/ct/zammad.sh b/ct/zammad.sh
new file mode 100644
index 000000000..81bd5e835
--- /dev/null
+++ b/ct/zammad.sh
@@ -0,0 +1,56 @@
+#!/usr/bin/env bash
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
+# Copyright (c) 2021-2024 community-scripts ORG
+# Author: Michel Roegl-Brunner (michelroegl-brunner)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://zammad.com
+
+#App Default Values
+APP="Zammad"
+TAGS="webserver;ticket-system"
+var_disk="8"
+var_cpu="2"
+var_ram="4096"
+var_os="debian"
+var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
+variables
+color
+catch_errors
+
+function update_script() {
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/zamad ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ msg_info "Stopping Service"
+ systemctl stop zammad &>/dev/null
+ msg_info "Updating ${APP}"
+ apt-get update &>/dev/null
+ apt-mark hold zammad &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ apt-mark unhold zammad &>/dev/null
+ apt-get -y upgrade &>/dev/null
+ msg_info "Starting Service"
+ systemctl start zammad &>/dev/null
+ msg_ok "Updated ${APP} LXC"
+ exit
+}
+
+start
+build_container
+description
+
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
\ No newline at end of file
diff --git a/ct/zigbee2mqtt.sh b/ct/zigbee2mqtt.sh
index 76519b260..c5ba5ef2b 100644
--- a/ct/zigbee2mqtt.sh
+++ b/ct/zigbee2mqtt.sh
@@ -1,60 +1,33 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://www.zigbee2mqtt.io/
-function header_info {
- clear
- cat <<"EOF"
- _____ _ __ ___ __ _______ ____________
-/__ / (_)___ _/ /_ ___ ___ |__ \ / |/ / __ \/_ __/_ __/
- / / / / __ / __ \/ _ \/ _ \__/ // /|_/ / / / / / / / /
- / /__/ / /_/ / /_/ / __/ __/ __// / / / /_/ / / / / /
-/____/_/\__, /_.___/\___/\___/____/_/ /_/\___\_\/_/ /_/
- /____/ 🐝
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Zigbee2MQTT"
-var_disk="4"
+var_tags="smarthome;zigbee;mqtt"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
header_info
+ check_container_storage
+ check_container_resources
if [[ ! -d /opt/zigbee2mqtt ]]; then
msg_error "No ${APP} Installation Found!"
exit
@@ -152,3 +125,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9442${CL}"
\ No newline at end of file
diff --git a/ct/zipline.sh b/ct/zipline.sh
index 308b94505..b6dfcf94b 100644
--- a/ct/zipline.sh
+++ b/ct/zipline.sh
@@ -1,95 +1,67 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
-# Author: tteck
-# Co-Author: MickLesk (Canbiz)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# Author: MickLesk (Canbiz)
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://zipline.diced.sh/
-function header_info {
-clear
-cat <<"EOF"
- _____ _ ___
-/__ / (_)___ / (_)___ ___
- / / / / __ \/ / / __ \/ _ \
- / /__/ / /_/ / / / / / / __/
-/____/_/ .___/_/_/_/ /_/\___/
- /_/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Zipline"
-var_disk="5"
+var_tags="file;sharing"
var_cpu="2"
var_ram="2048"
+var_disk="5"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
function update_script() {
-header_info
-if [[ ! -d /opt/zipline ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-if (( $(df /boot | awk 'NR==2{gsub("%","",$5); print $5}') > 80 )); then
- read -r -p "Warning: Storage is dangerously low, continue anyway? " prompt
- [[ ${prompt,,} =~ ^(y|yes)$ ]] || exit
-fi
-RELEASE=$(curl -s https://api.github.com/repos/diced/zipline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Stopping ${APP}"
- systemctl stop zipline
- msg_ok "${APP} Stopped"
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/zipline ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/diced/zipline/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping ${APP}"
+ systemctl stop zipline
+ msg_ok "${APP} Stopped"
- msg_info "Updating ${APP} to ${RELEASE}"
- cp /opt/zipline/.env /opt/
- rm -R /opt/zipline
- wget -q "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip"
- unzip -q v${RELEASE}.zip
- mv zipline-${RELEASE} /opt/zipline
- cd /opt/zipline
- mv /opt/.env /opt/zipline/.env
- yarn install &>/dev/null
- yarn build &>/dev/null
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated ${APP}"
+ msg_info "Updating ${APP} to ${RELEASE}"
+ cp /opt/zipline/.env /opt/
+ rm -R /opt/zipline
+ wget -q "https://github.com/diced/zipline/archive/refs/tags/v${RELEASE}.zip"
+ unzip -q v${RELEASE}.zip
+ mv zipline-${RELEASE} /opt/zipline
+ cd /opt/zipline
+ mv /opt/.env /opt/zipline/.env
+ yarn install &>/dev/null
+ yarn build &>/dev/null
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated ${APP}"
- msg_info "Starting ${APP}"
- systemctl start zipline
- msg_ok "Started ${APP}"
+ msg_info "Starting ${APP}"
+ systemctl start zipline
+ msg_ok "Started ${APP}"
- msg_info "Cleaning Up"
- rm -rf v${RELEASE}.zip
- msg_ok "Cleaned"
- msg_ok "Updated Successfully"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
-fi
-exit
+ msg_info "Cleaning Up"
+ rm -rf v${RELEASE}.zip
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -97,5 +69,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} Setup should be reachable by going to the following URL.
- ${BL}http://${IP}:3000${CL} \n"
\ No newline at end of file
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
\ No newline at end of file
diff --git a/ct/zoraxy.sh b/ct/zoraxy.sh
index 9eea07eb9..71e9c12b4 100644
--- a/ct/zoraxy.sh
+++ b/ct/zoraxy.sh
@@ -1,75 +1,52 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://zoraxy.aroz.org/
-function header_info {
-clear
-cat <<"EOF"
- _____
-/__ / ____ _________ __ ____ __
- / / / __ \/ ___/ __ `/ |/_/ / / /
- / /__/ /_/ / / / /_/ /> /_/ /
-/____/\____/_/ \__,_/_/|_|\__, /
- /____/
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Zoraxy"
-var_disk="6"
+var_tags="network"
var_cpu="2"
var_ram="2048"
+var_disk="6"
var_os="debian"
var_version="12"
+var_unprivileged="1"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="1"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
-header_info
-if [[ ! -d /opt/zoraxy/ ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
-RELEASE=$(curl -s https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
-if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
- msg_info "Updating $APP to ${RELEASE}"
- systemctl stop zoraxy
- wget -q "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64"
- rm /opt/zoraxy/zoraxy
- mv zoraxy_linux_amd64 /opt/zoraxy/zoraxy
- chmod +x /opt/zoraxy/zoraxy
- systemctl start zoraxy
- echo "${RELEASE}" >/opt/${APP}_version.txt
- msg_ok "Updated $APP"
-else
- msg_ok "No update required. ${APP} is already at ${RELEASE}"
- fi
- exit
+ header_info
+ check_container_storage
+ check_container_resources
+ if [[ ! -d /opt/zoraxy/ ]]; then
+ msg_error "No ${APP} Installation Found!"
+ exit
+ fi
+ RELEASE=$(curl -s https://api.github.com/repos/tobychui/zoraxy/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Updating $APP to ${RELEASE}"
+ systemctl stop zoraxy
+ wget -q "https://github.com/tobychui/zoraxy/releases/download/${RELEASE}/zoraxy_linux_amd64"
+ rm -rf /opt/zoraxy/zoraxy
+ mv zoraxy_linux_amd64 /opt/zoraxy/zoraxy
+ chmod +x /opt/zoraxy/zoraxy
+ systemctl start zoraxy
+ echo "${RELEASE}" >/opt/${APP}_version.txt
+ msg_ok "Updated $APP"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}"
+ fi
+ exit
}
start
@@ -77,5 +54,6 @@ build_container
description
msg_ok "Completed Successfully!\n"
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8000${CL} \n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}"
\ No newline at end of file
diff --git a/ct/zwave-js-ui.sh b/ct/zwave-js-ui.sh
index 58f574b32..9c25a90ad 100644
--- a/ct/zwave-js-ui.sh
+++ b/ct/zwave-js-ui.sh
@@ -1,93 +1,62 @@
#!/usr/bin/env bash
-source <(curl -s https://raw.githubusercontent.com/asylumexp/Proxmox/main/misc/build.func)
+source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 tteck
# Author: tteck (tteckster)
-# License: MIT
-# https://github.com/tteck/Proxmox/raw/main/LICENSE
+# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE
+# Source: https://zwave-js.github.io/zwave-js-ui/#/
-function header_info {
- clear
- cat <<"EOF"
- _____ _______ __ ______
-/__ /_ ______ __ _____ / / ___/ / / / / _/
- / /| | /| / / __ `/ | / / _ \ __ / /\__ \ / / / // /
- / /_| |/ |/ / /_/ /| |/ / __/ / /_/ /___/ / / /_/ // /
-/____/__/|__/\__,_/ |___/\___/ \____//____/ \____/___/
-
-EOF
-}
-header_info
-echo -e "Loading..."
+# App Default Values
APP="Zwave-JS-UI"
-var_disk="4"
+var_tags="smarthome;zwave"
var_cpu="2"
var_ram="1024"
+var_disk="4"
var_os="debian"
var_version="12"
+var_unprivileged="0"
+
+# App Output & Base Settings
+header_info "$APP"
+base_settings
+
+# Core
variables
color
catch_errors
-function default_settings() {
- CT_TYPE="0"
- PW=""
- CT_ID=$NEXTID
- HN=$NSAPP
- DISK_SIZE="$var_disk"
- CORE_COUNT="$var_cpu"
- RAM_SIZE="$var_ram"
- BRG="vmbr0"
- NET="dhcp"
- GATE=""
- APT_CACHER=""
- APT_CACHER_IP=""
- DISABLEIP6="no"
- MTU=""
- SD=""
- NS=""
- MAC=""
- VLAN=""
- SSH="no"
- VERB="no"
- echo_default
-}
-
function update_script() {
header_info
+ check_container_storage
+ check_container_resources
if [[ ! -d /opt/zwave-js-ui ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/zwave-js/zwave-js-ui/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
- msg_info "Stopping Z-wave JS UI"
- systemctl stop zwave-js-ui.service
- msg_ok "Stopped Z-wave JS UI"
+ if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
+ msg_info "Stopping Service"
+ systemctl stop zwave-js-ui
+ msg_ok "Stopped Service"
- msg_info "Updating Z-wave JS UI"
- wget https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux-arm64.zip &>/dev/null
- unzip zwave-js-ui-${RELEASE}-linux-arm64.zip &>/dev/null
- \cp -R zwave-js-ui-linux /opt/zwave-js-ui
- service_path="/etc/systemd/system/zwave-js-ui.service"
- echo "[Unit]
- Description=zwave-js-ui
- Wants=network-online.target
- After=network-online.target
- [Service]
- User=root
- WorkingDirectory=/opt/zwave-js-ui
- ExecStart=/opt/zwave-js-ui/zwave-js-ui-linux
- [Install]
- WantedBy=multi-user.target" >$service_path
- msg_ok "Updated Z-wave JS UI"
+ msg_info "Updating Z-Wave JS UI"
+ rm -rf /opt/zwave-js-ui/*
+ cd /opt/zwave-js-ui
+ wget -q https://github.com/zwave-js/zwave-js-ui/releases/download/${RELEASE}/zwave-js-ui-${RELEASE}-linux.zip
+ unzip -q zwave-js-ui-${RELEASE}-linux.zip
+ msg_ok "Updated Z-Wave JS UI"
- msg_info "Starting Z-wave JS UI"
- systemctl enable --now zwave-js-ui.service
- msg_ok "Started Z-wave JS UI"
+ msg_info "Starting Service"
+ systemctl start zwave-js-ui
+ msg_ok "Started Service"
- msg_info "Cleanup"
- rm -rf zwave-js-ui-${RELEASE}-linux-arm64.zip zwave-js-ui-linux store
- msg_ok "Cleaned"
- msg_ok "Updated Successfully!\n"
+ msg_info "Cleanup"
+ rm -rf /opt/zwave-js-ui/zwave-js-ui-${RELEASE}-linux.zip
+ rm -rf /opt/zwave-js-ui/store
+ msg_ok "Cleaned"
+ msg_ok "Updated Successfully!\n"
+ else
+ msg_ok "No update required. ${APP} is already at ${RELEASE}."
+ fi
exit
}
@@ -95,5 +64,7 @@ start
build_container
description
-echo -e "${APP} should be reachable by going to the following URL.
- ${BL}http://${IP}:8091${CL} \n"
+msg_ok "Completed Successfully!\n"
+echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
+echo -e "${INFO}${YW} Access it using the following URL:${CL}"
+echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8091${CL}"
\ No newline at end of file
diff --git a/frontend/.eslintrc.json b/frontend/.eslintrc.json
new file mode 100644
index 000000000..32ef36a56
--- /dev/null
+++ b/frontend/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+ "extends": ["next/core-web-vitals"],
+ "parser": "@typescript-eslint/parser",
+ "plugins": ["@typescript-eslint"]
+}
diff --git a/frontend/.gitignore b/frontend/.gitignore
new file mode 100644
index 000000000..4a2000d19
--- /dev/null
+++ b/frontend/.gitignore
@@ -0,0 +1,39 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+.yarn/install-state.gz
+
+# wrangler
+.worker-next
+.wrangler
+
+# testing
+/coverage
+
+# next.js
+/.next/
+out
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# # local env files
+# .env*.local
+# .env
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/frontend/.prettierignore b/frontend/.prettierignore
new file mode 100644
index 000000000..3aea320e0
--- /dev/null
+++ b/frontend/.prettierignore
@@ -0,0 +1,5 @@
+dist
+node_modules
+.next
+build
+.contentlayer
\ No newline at end of file
diff --git a/frontend/.prettierrc b/frontend/.prettierrc
new file mode 100644
index 000000000..490e839f5
--- /dev/null
+++ b/frontend/.prettierrc
@@ -0,0 +1,3 @@
+{
+ "plugins": ["prettier-plugin-tailwindcss", "prettier-plugin-organize-imports"]
+}
diff --git a/frontend/LICENSE b/frontend/LICENSE
new file mode 100644
index 000000000..83fb1d42f
--- /dev/null
+++ b/frontend/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Bram Suurd
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/frontend/components.json b/frontend/components.json
new file mode 100644
index 000000000..380285be3
--- /dev/null
+++ b/frontend/components.json
@@ -0,0 +1,17 @@
+{
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "default",
+ "rsc": true,
+ "tsx": true,
+ "tailwind": {
+ "config": "tailwind.config.ts",
+ "css": "@/styles/globals.css",
+ "baseColor": "slate",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "aliases": {
+ "components": "@/components",
+ "utils": "@/lib/utils"
+ }
+}
diff --git a/frontend/next.config.mjs b/frontend/next.config.mjs
new file mode 100644
index 000000000..108da034e
--- /dev/null
+++ b/frontend/next.config.mjs
@@ -0,0 +1,25 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {
+ webpack: (config) => {
+ config.resolve.alias.canvas = false;
+
+ return config;
+ },
+ images: {
+ remotePatterns: [
+ {
+ protocol: "https",
+ hostname: "**",
+ },
+ ],
+ },
+
+ env: {
+ BASE_PATH: "ProxmoxVE",
+ },
+
+ output: "export",
+ basePath: `/ProxmoxVE`,
+};
+
+export default nextConfig;
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
new file mode 100644
index 000000000..36ec168b7
--- /dev/null
+++ b/frontend/package-lock.json
@@ -0,0 +1,10101 @@
+{
+ "name": "proxmox-helper-scripts-website",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "proxmox-helper-scripts-website",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-accordion": "^1.1.2",
+ "@radix-ui/react-dialog": "^1.0.5",
+ "@radix-ui/react-dropdown-menu": "^2.0.6",
+ "@radix-ui/react-icons": "^1.3.1",
+ "@radix-ui/react-label": "^2.1.0",
+ "@radix-ui/react-navigation-menu": "^1.1.4",
+ "@radix-ui/react-popover": "^1.1.2",
+ "@radix-ui/react-select": "^2.1.2",
+ "@radix-ui/react-separator": "^1.1.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.1",
+ "@radix-ui/react-tabs": "^1.1.0",
+ "@radix-ui/react-tooltip": "^1.1.2",
+ "@vercel/analytics": "^1.2.2",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "cmdk": "^1.0.0",
+ "date-fns": "^4.1.0",
+ "framer-motion": "^11.11.11",
+ "fuse.js": "^7.0.0",
+ "lucide-react": "^0.453.0",
+ "mini-svg-data-uri": "^1.4.4",
+ "next": "15.0.2",
+ "next-themes": "^0.3.0",
+ "nuqs": "^2.1.1",
+ "pocketbase": "^0.21.4",
+ "prettier-plugin-organize-imports": "^4.1.0",
+ "react": "19.0.0-rc-02c0e824-20241028",
+ "react-code-blocks": "^0.1.6",
+ "react-day-picker": "8.10.1",
+ "react-dom": "19.0.0-rc-02c0e824-20241028",
+ "react-icons": "^5.1.0",
+ "react-simple-typewriter": "^5.0.1",
+ "sharp": "^0.33.5",
+ "simple-icons": "^13.5.0",
+ "sonner": "^1.5.0",
+ "tailwind-merge": "^2.3.0",
+ "zod": "^3.23.8"
+ },
+ "devDependencies": {
+ "@testing-library/dom": "^10.4.0",
+ "@testing-library/react": "^16.0.1",
+ "@types/node": "^22",
+ "@types/react": "npm:types-react@19.0.0-rc.1",
+ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
+ "@typescript-eslint/eslint-plugin": "^8.8.1",
+ "@typescript-eslint/parser": "^8.8.1",
+ "@vitejs/plugin-react": "^4.3.4",
+ "eslint": "^9.13.0",
+ "eslint-config-next": "15.0.2",
+ "jsdom": "^25.0.1",
+ "postcss": "^8",
+ "prettier": "^3.2.5",
+ "prettier-plugin-tailwindcss": "^0.6.5",
+ "tailwindcss": "^3.4.9",
+ "tailwindcss-animate": "^1.0.7",
+ "tailwindcss-animated": "^1.1.2",
+ "typescript": "^5",
+ "vite-tsconfig-paths": "^5.1.3",
+ "vitest": "^2.1.6"
+ }
+ },
+ "node_modules/@alloc/quick-lru": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz",
+ "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz",
+ "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.26.0",
+ "@babel/generator": "^7.26.0",
+ "@babel/helper-compilation-targets": "^7.25.9",
+ "@babel/helper-module-transforms": "^7.26.0",
+ "@babel/helpers": "^7.26.0",
+ "@babel/parser": "^7.26.0",
+ "@babel/template": "^7.25.9",
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.26.0",
+ "convert-source-map": "^2.0.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
+ }
+ },
+ "node_modules/@babel/core/node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/core/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz",
+ "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.26.2",
+ "@babel/types": "^7.26.0",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz",
+ "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/compat-data": "^7.25.9",
+ "@babel/helper-validator-option": "^7.25.9",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
+ "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/traverse": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
+ "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9",
+ "@babel/traverse": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz",
+ "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
+ "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz",
+ "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/template": "^7.25.9",
+ "@babel/types": "^7.26.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
+ "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.26.0"
+ },
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
+ "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
+ "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz",
+ "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==",
+ "license": "MIT",
+ "dependencies": {
+ "regenerator-runtime": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
+ "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.25.9",
+ "@babel/parser": "^7.25.9",
+ "@babel/types": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz",
+ "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.25.9",
+ "@babel/generator": "^7.25.9",
+ "@babel/parser": "^7.25.9",
+ "@babel/template": "^7.25.9",
+ "@babel/types": "^7.25.9",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
+ "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@emnapi/runtime": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz",
+ "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz",
+ "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.8.1"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz",
+ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
+ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==",
+ "license": "MIT"
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz",
+ "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz",
+ "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz",
+ "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz",
+ "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz",
+ "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz",
+ "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz",
+ "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz",
+ "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz",
+ "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz",
+ "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz",
+ "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz",
+ "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz",
+ "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz",
+ "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz",
+ "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz",
+ "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz",
+ "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz",
+ "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz",
+ "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz",
+ "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz",
+ "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz",
+ "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz",
+ "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz",
+ "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
+ "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/config-array": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz",
+ "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@eslint/object-schema": "^2.1.4",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/core": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
+ "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
+ "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
+ "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz",
+ "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz",
+ "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "levn": "^0.4.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz",
+ "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.6.12",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.12.tgz",
+ "integrity": "sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.6.0",
+ "@floating-ui/utils": "^0.2.8"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz",
+ "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/dom": "^1.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz",
+ "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==",
+ "license": "MIT"
+ },
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@img/sharp-darwin-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
+ "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-darwin-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
+ "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-darwin-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
+ "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-darwin-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
+ "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
+ "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
+ "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-s390x": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
+ "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linux-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz",
+ "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
+ "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-libvips-linuxmusl-x64": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
+ "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
+ "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
+ "cpu": [
+ "arm"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm": "1.0.5"
+ }
+ },
+ "node_modules/@img/sharp-linux-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
+ "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-s390x": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
+ "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-s390x": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linux-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz",
+ "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linux-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-arm64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
+ "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-linuxmusl-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
+ "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
+ }
+ },
+ "node_modules/@img/sharp-wasm32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
+ "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.2.0"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-ia32": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
+ "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-win32-x64": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
+ "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "Apache-2.0 AND LGPL-3.0-or-later",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+ "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@next/env": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-15.0.2.tgz",
+ "integrity": "sha512-c0Zr0ModK5OX7D4ZV8Jt/wqoXtitLNPwUfG9zElCZztdaZyNVnN40rDXVZ/+FGuR4CcNV5AEfM6N8f+Ener7Dg==",
+ "license": "MIT"
+ },
+ "node_modules/@next/eslint-plugin-next": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.0.2.tgz",
+ "integrity": "sha512-R9Jc7T6Ge0txjmqpPwqD8vx6onQjynO9JT73ArCYiYPvSrwYXepH/UY/WdKDY8JPWJl72sAE4iGMHPeQ5xdEWg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-glob": "3.3.1"
+ }
+ },
+ "node_modules/@next/eslint-plugin-next/node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/@next/eslint-plugin-next/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@next/swc-darwin-arm64": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.0.2.tgz",
+ "integrity": "sha512-GK+8w88z+AFlmt+ondytZo2xpwlfAR8U6CRwXancHImh6EdGfHMIrTSCcx5sOSBei00GyLVL0ioo1JLKTfprgg==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-darwin-x64": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.0.2.tgz",
+ "integrity": "sha512-KUpBVxIbjzFiUZhiLIpJiBoelqzQtVZbdNNsehhUn36e2YzKHphnK8eTUW1s/4aPy5kH/UTid8IuVbaOpedhpw==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-gnu": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.0.2.tgz",
+ "integrity": "sha512-9J7TPEcHNAZvwxXRzOtiUvwtTD+fmuY0l7RErf8Yyc7kMpE47MIQakl+3jecmkhOoIyi/Rp+ddq7j4wG6JDskQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-arm64-musl": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.0.2.tgz",
+ "integrity": "sha512-BjH4ZSzJIoTTZRh6rG+a/Ry4SW0HlizcPorqNBixBWc3wtQtj4Sn9FnRZe22QqrPnzoaW0ctvSz4FaH4eGKMww==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-gnu": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.0.2.tgz",
+ "integrity": "sha512-i3U2TcHgo26sIhcwX/Rshz6avM6nizrZPvrDVDY1bXcLH1ndjbO8zuC7RoHp0NSK7wjJMPYzm7NYL1ksSKFreA==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-linux-x64-musl": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.0.2.tgz",
+ "integrity": "sha512-AMfZfSVOIR8fa+TXlAooByEF4OB00wqnms1sJ1v+iu8ivwvtPvnkwdzzFMpsK5jA2S9oNeeQ04egIWVb4QWmtQ==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-arm64-msvc": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.0.2.tgz",
+ "integrity": "sha512-JkXysDT0/hEY47O+Hvs8PbZAeiCQVxKfGtr4GUpNAhlG2E0Mkjibuo8ryGD29Qb5a3IOnKYNoZlh/MyKd2Nbww==",
+ "cpu": [
+ "arm64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@next/swc-win32-x64-msvc": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.0.2.tgz",
+ "integrity": "sha512-foaUL0NqJY/dX0Pi/UcZm5zsmSk5MtP/gxx3xOPyREkMFN+CTjctPfu3QaqrQHinaKdPnMWPJDKt4VjDfTBe/Q==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nolyfill/is-core-module": {
+ "version": "1.0.39",
+ "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz",
+ "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.4.0"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@radix-ui/number": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz",
+ "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==",
+ "license": "MIT"
+ },
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz",
+ "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==",
+ "license": "MIT"
+ },
+ "node_modules/@radix-ui/react-accordion": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.1.tgz",
+ "integrity": "sha512-bg/l7l5QzUjgsh8kjwDFommzAshnUsuVMV5NM56QVCm+7ZckYdd9P/ExR8xG/Oup0OajVxNLaHJ1tb8mXk+nzQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collapsible": "1.1.1",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-arrow": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.0.tgz",
+ "integrity": "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collapsible": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.1.tgz",
+ "integrity": "sha512-1///SnrfQHJEofLokyczERxQbWfCGQlQ2XsCZMucVs6it+lq9iw4vXy+uDn1edlb58cOZOWSldnfPAYcT4O/Yg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz",
+ "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz",
+ "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz",
+ "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dialog": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz",
+ "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-direction": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz",
+ "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz",
+ "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-escape-keydown": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-dropdown-menu": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.2.tgz",
+ "integrity": "sha512-GVZMR+eqK8/Kes0a36Qrv+i20bAPXSn8rCBTHx30w+3ECnR5o3xixAlqcVaYvLeyKUsm0aqyhWfmUcqufM8nYA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-menu": "2.1.2",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-guards": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz",
+ "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz",
+ "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-icons": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.1.tgz",
+ "integrity": "sha512-QvYompk0X+8Yjlo/Fv4McrzxohDdM5GgLHyQcPpcsPvlOSXCGFjdbuyGL5dzRbg0GpknAjQJJZzdiRK7iWVuFQ==",
+ "peerDependencies": {
+ "react": "^16.x || ^17.x || ^18.x || ^19.x"
+ }
+ },
+ "node_modules/@radix-ui/react-id": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz",
+ "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-label": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.0.tgz",
+ "integrity": "sha512-peLblDlFw/ngk3UWq0VnYaOLy6agTZZ+MUO/WhVfm14vJGML+xH4FAl2XQGLqdefjNb7ApRg6Yn7U42ZhmYXdw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-menu": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.2.tgz",
+ "integrity": "sha512-lZ0R4qR2Al6fZ4yCCZzu/ReTFrylHFxIqy7OezIpWF4bL0o9biKo0pFIvkaew3TyZ9Fy5gYVrR5zCGZBVbO1zg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-roving-focus": "1.1.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-navigation-menu": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz",
+ "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popover": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.2.tgz",
+ "integrity": "sha512-u2HRUyWW+lOiA2g0Le0tMmT55FGOEWHwPFt1EPfbLly7uXQExFo5duNKqG2DzmFXIdqOeNd+TpE8baHWJCyP9w==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popper": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.0.tgz",
+ "integrity": "sha512-ZnRMshKF43aBxVWPWvbj21+7TQCvhuULWJ4gNIKYpRlQt5xGRhLx66tMp8pya2UkGHTSlhpXwmjqltDYHhw7Vg==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/react-dom": "^2.0.0",
+ "@radix-ui/react-arrow": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-rect": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0",
+ "@radix-ui/rect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-portal": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz",
+ "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-presence": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz",
+ "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz",
+ "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-slot": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-roving-focus": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.0.tgz",
+ "integrity": "sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.0",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-context": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz",
+ "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-select": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.1.2.tgz",
+ "integrity": "sha512-rZJtWmorC7dFRi0owDmoijm6nSJH1tVw64QGiNIZ9PNLyBDtG+iAq+XGsya052At4BfarzY/Dhv9wrrUr6IMZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/number": "1.1.0",
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-collection": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-focus-guards": "1.1.1",
+ "@radix-ui/react-focus-scope": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-callback-ref": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-layout-effect": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.0.tgz",
+ "integrity": "sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz",
+ "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-compose-refs": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-switch": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.1.1.tgz",
+ "integrity": "sha512-diPqDDoBcZPSicYoMWdWx+bCPuTRH4QSp9J+65IvtdS0Kuzt67bI6n32vCj8q6NZmYW/ah+2orOtMwcX5eQwIg==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-use-previous": "1.1.0",
+ "@radix-ui/react-use-size": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-tabs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.1.1.tgz",
+ "integrity": "sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-direction": "1.1.0",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-roving-focus": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-tooltip": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.3.tgz",
+ "integrity": "sha512-Z4w1FIS0BqVFI2c1jZvb/uDVJijJjJ2ZMuPV81oVgTZ7g3BZxobplnMVvXtFWgtozdvYJ+MFWtwkM5S2HnAong==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/primitive": "1.1.0",
+ "@radix-ui/react-compose-refs": "1.1.0",
+ "@radix-ui/react-context": "1.1.1",
+ "@radix-ui/react-dismissable-layer": "1.1.1",
+ "@radix-ui/react-id": "1.1.0",
+ "@radix-ui/react-popper": "1.2.0",
+ "@radix-ui/react-portal": "1.1.2",
+ "@radix-ui/react-presence": "1.1.1",
+ "@radix-ui/react-primitive": "2.0.0",
+ "@radix-ui/react-slot": "1.1.0",
+ "@radix-ui/react-use-controllable-state": "1.1.0",
+ "@radix-ui/react-visually-hidden": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
+ "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz",
+ "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz",
+ "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-callback-ref": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz",
+ "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-previous": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz",
+ "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-rect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.0.tgz",
+ "integrity": "sha512-0Fmkebhr6PiseyZlYAOtLS+nb7jLmpqTrJyv61Pe68MKYW6OWdRE2kI70TaYY27u7H0lajqM3hSMMLFq18Z7nQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/rect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-use-size": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.0.tgz",
+ "integrity": "sha512-XW3/vWuIXHa+2Uwcc2ABSfcCledmXhhQPlGbfcRXbiUQI5Icjcg19BGCZVKKInYbvUCut/ufbbLLPFC5cbb1hw==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-use-layout-effect": "1.1.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/react-visually-hidden": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz",
+ "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-primitive": "2.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@radix-ui/rect": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.0.tgz",
+ "integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==",
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.4.tgz",
+ "integrity": "sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.4.tgz",
+ "integrity": "sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.4.tgz",
+ "integrity": "sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.4.tgz",
+ "integrity": "sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-arm64": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.4.tgz",
+ "integrity": "sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-freebsd-x64": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.4.tgz",
+ "integrity": "sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.4.tgz",
+ "integrity": "sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.4.tgz",
+ "integrity": "sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.4.tgz",
+ "integrity": "sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.4.tgz",
+ "integrity": "sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.4.tgz",
+ "integrity": "sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.4.tgz",
+ "integrity": "sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.4.tgz",
+ "integrity": "sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.4.tgz",
+ "integrity": "sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.4.tgz",
+ "integrity": "sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.4.tgz",
+ "integrity": "sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.4.tgz",
+ "integrity": "sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.4.tgz",
+ "integrity": "sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rtsao/scc": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+ "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.10.4",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz",
+ "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@swc/counter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
+ "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@swc/helpers": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz",
+ "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@testing-library/dom": {
+ "version": "10.4.0",
+ "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz",
+ "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/runtime": "^7.12.5",
+ "@types/aria-query": "^5.0.1",
+ "aria-query": "5.3.0",
+ "chalk": "^4.1.0",
+ "dom-accessibility-api": "^0.5.9",
+ "lz-string": "^1.5.0",
+ "pretty-format": "^27.0.2"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@testing-library/dom/node_modules/aria-query": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
+ "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "dequal": "^2.0.3"
+ }
+ },
+ "node_modules/@testing-library/react": {
+ "version": "16.0.1",
+ "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.1.tgz",
+ "integrity": "sha512-dSmwJVtJXmku+iocRhWOUFbrERC76TX2Mnf0ATODz8brzAZrMBbzLwQixlBSanZxR6LddK3eiwpSFZgDET1URg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@testing-library/dom": "^10.0.0",
+ "@types/react": "^18.0.0",
+ "@types/react-dom": "^18.0.0",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@types/aria-query": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz",
+ "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.6",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
+ "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/hast": {
+ "version": "2.3.10",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz",
+ "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/unist": "^2"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/node": {
+ "version": "22.8.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.6.tgz",
+ "integrity": "sha512-tosuJYKrIqjQIlVCM4PEGxOmyg3FCPa/fViuJChnGeEIhjA46oy8FMVoF9su1/v8PNs2a8Q0iFNyOx0uOF91nw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.19.8"
+ }
+ },
+ "node_modules/@types/react": {
+ "name": "types-react",
+ "version": "19.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/types-react/-/types-react-19.0.0-rc.1.tgz",
+ "integrity": "sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==",
+ "devOptional": true,
+ "dependencies": {
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "name": "types-react-dom",
+ "version": "19.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/types-react-dom/-/types-react-dom-19.0.0-rc.1.tgz",
+ "integrity": "sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==",
+ "devOptional": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/stylis": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz",
+ "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/unist": {
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.12.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz",
+ "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.12.2",
+ "@typescript-eslint/type-utils": "8.12.2",
+ "@typescript-eslint/utils": "8.12.2",
+ "@typescript-eslint/visitor-keys": "8.12.2",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.3.1",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.12.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz",
+ "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.12.2",
+ "@typescript-eslint/types": "8.12.2",
+ "@typescript-eslint/typescript-estree": "8.12.2",
+ "@typescript-eslint/visitor-keys": "8.12.2",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.12.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz",
+ "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.12.2",
+ "@typescript-eslint/visitor-keys": "8.12.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.12.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz",
+ "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.12.2",
+ "@typescript-eslint/utils": "8.12.2",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.12.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz",
+ "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.12.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz",
+ "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/types": "8.12.2",
+ "@typescript-eslint/visitor-keys": "8.12.2",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.12.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz",
+ "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.12.2",
+ "@typescript-eslint/types": "8.12.2",
+ "@typescript-eslint/typescript-estree": "8.12.2"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.12.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz",
+ "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.12.2",
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@vercel/analytics": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.3.2.tgz",
+ "integrity": "sha512-n/Ws7skBbW+fUBMeg+jrT30+GP00jTHvCcL4fuVrShuML0uveEV/4vVUdvqEVnDgXIGfLm0GXW5EID2mCcRXhg==",
+ "license": "MPL-2.0",
+ "dependencies": {
+ "server-only": "^0.0.1"
+ },
+ "peerDependencies": {
+ "next": ">= 13",
+ "react": "^18.0 || ^19.0 || ^19.0.0-rc"
+ },
+ "peerDependenciesMeta": {
+ "next": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitejs/plugin-react": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
+ "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.26.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.25.9",
+ "@babel/plugin-transform-react-jsx-source": "^7.25.9",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.14.2"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
+ }
+ },
+ "node_modules/@vitest/expect": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.6.tgz",
+ "integrity": "sha512-9M1UR9CAmrhJOMoSwVnPh2rELPKhYo0m/CSgqw9PyStpxtkwhmdM6XYlXGKeYyERY1N6EIuzkQ7e3Lm1WKCoUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "2.1.6",
+ "@vitest/utils": "2.1.6",
+ "chai": "^5.1.2",
+ "tinyrainbow": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/mocker": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.6.tgz",
+ "integrity": "sha512-MHZp2Z+Q/A3am5oD4WSH04f9B0T7UvwEb+v5W0kCYMhtXGYbdyl2NUk1wdSMqGthmhpiThPDp/hEoVwu16+u1A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/spy": "2.1.6",
+ "estree-walker": "^3.0.3",
+ "magic-string": "^0.30.12"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "msw": "^2.4.9",
+ "vite": "^5.0.0 || ^6.0.0"
+ },
+ "peerDependenciesMeta": {
+ "msw": {
+ "optional": true
+ },
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vitest/pretty-format": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.6.tgz",
+ "integrity": "sha512-exZyLcEnHgDMKc54TtHca4McV4sKT+NKAe9ix/yhd/qkYb/TP8HTyXRFDijV19qKqTZM0hPL4753zU/U8L/gAA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyrainbow": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/runner": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.6.tgz",
+ "integrity": "sha512-SjkRGSFyrA82m5nz7To4CkRSEVWn/rwQISHoia/DB8c6IHIhaE/UNAo+7UfeaeJRE979XceGl00LNkIz09RFsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/utils": "2.1.6",
+ "pathe": "^1.1.2"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/snapshot": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.6.tgz",
+ "integrity": "sha512-5JTWHw8iS9l3v4/VSuthCndw1lN/hpPB+mlgn1BUhFbobeIUj1J1V/Bj2t2ovGEmkXLTckFjQddsxS5T6LuVWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "2.1.6",
+ "magic-string": "^0.30.12",
+ "pathe": "^1.1.2"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/spy": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.6.tgz",
+ "integrity": "sha512-oTFObV8bd4SDdRka5O+mSh5w9irgx5IetrD5i+OsUUsk/shsBoHifwCzy45SAORzAhtNiprUVaK3hSCCzZh1jQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tinyspy": "^3.0.2"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/@vitest/utils": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.6.tgz",
+ "integrity": "sha512-ixNkFy3k4vokOUTU2blIUvOgKq/N2PW8vKIjZZYsGJCMX69MRa9J2sKqX5hY/k5O5Gty3YJChepkqZ3KM9LyIQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/pretty-format": "2.1.6",
+ "loupe": "^3.1.2",
+ "tinyrainbow": "^1.2.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/aria-hidden": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz",
+ "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/aria-query": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz",
+ "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "is-string": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlast": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz",
+ "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.findlastindex": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz",
+ "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
+ "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz",
+ "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "es-shim-unscopables": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.tosorted": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz",
+ "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-shim-unscopables": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/assertion-error": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
+ "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.10.2",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz",
+ "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.24.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz",
+ "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001669",
+ "electron-to-chromium": "^1.5.41",
+ "node-releases": "^2.0.18",
+ "update-browserslist-db": "^1.1.1"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
+ "node_modules/cac": {
+ "version": "6.7.14",
+ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
+ "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase-css": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/camelize": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
+ "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001676",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001676.tgz",
+ "integrity": "sha512-Qz6zwGCiPghQXGJvgQAem79esjitvJ+CxSbSQkW9H/UX5hg8XM88d4lp2W+MEQ81j+Hip58Il+jGVdazk1z9cw==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/chai": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz",
+ "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "assertion-error": "^2.0.1",
+ "check-error": "^2.1.1",
+ "deep-eql": "^5.0.1",
+ "loupe": "^3.1.0",
+ "pathval": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/character-entities": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
+ "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-entities-legacy": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
+ "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/character-reference-invalid": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
+ "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/check-error": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
+ "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 16"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/class-variance-authority": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz",
+ "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "clsx": "2.0.0"
+ },
+ "funding": {
+ "url": "https://joebell.co.uk"
+ }
+ },
+ "node_modules/class-variance-authority/node_modules/clsx": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
+ "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/client-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
+ "license": "MIT"
+ },
+ "node_modules/clsx": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/cmdk": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.3.tgz",
+ "integrity": "sha512-2c3uTjwT4YeHj60q2k8S1B0WHSoGR6t5CPnec6PMFD2QF4gwid0t1VSPNeEmL02EwBwNky/A3gwPCOViKTtoPA==",
+ "license": "MIT",
+ "dependencies": {
+ "@radix-ui/react-dialog": "^1.1.2",
+ "@radix-ui/react-id": "^1.1.0",
+ "@radix-ui/react-primitive": "^2.0.0",
+ "use-sync-external-store": "^1.2.2"
+ },
+ "peerDependencies": {
+ "react": "^18 || ^19 || ^19.0.0-rc",
+ "react-dom": "^18 || ^19 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/comma-separated-tokens": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
+ "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/commander": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/css-color-keywords": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+ "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/css-to-react-native": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
+ "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "camelize": "^1.0.0",
+ "css-color-keywords": "^1.0.0",
+ "postcss-value-parser": "^4.0.2"
+ }
+ },
+ "node_modules/cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "cssesc": "bin/cssesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cssstyle": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz",
+ "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "rrweb-cssom": "^0.7.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/data-urls": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz",
+ "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
+ "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decimal.js": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
+ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deep-eql": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
+ "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+ "license": "MIT"
+ },
+ "node_modules/didyoumean": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/dlv": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dom-accessibility-api": {
+ "version": "0.5.16",
+ "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz",
+ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.65",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz",
+ "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.17.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
+ "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-iterator-helpers": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.1.0.tgz",
+ "integrity": "sha512-/SurEfycdyssORP/E+bj4sEu1CWw4EmLDsHynHwSXQ7utgbrMRWW195pTrCjFgFCddf/UkYm3oqKPRq5i8bJbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.3",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.4",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "iterator.prototype": "^1.1.3",
+ "safe-array-concat": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz",
+ "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-shim-unscopables": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.0"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.24.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz",
+ "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.24.0",
+ "@esbuild/android-arm": "0.24.0",
+ "@esbuild/android-arm64": "0.24.0",
+ "@esbuild/android-x64": "0.24.0",
+ "@esbuild/darwin-arm64": "0.24.0",
+ "@esbuild/darwin-x64": "0.24.0",
+ "@esbuild/freebsd-arm64": "0.24.0",
+ "@esbuild/freebsd-x64": "0.24.0",
+ "@esbuild/linux-arm": "0.24.0",
+ "@esbuild/linux-arm64": "0.24.0",
+ "@esbuild/linux-ia32": "0.24.0",
+ "@esbuild/linux-loong64": "0.24.0",
+ "@esbuild/linux-mips64el": "0.24.0",
+ "@esbuild/linux-ppc64": "0.24.0",
+ "@esbuild/linux-riscv64": "0.24.0",
+ "@esbuild/linux-s390x": "0.24.0",
+ "@esbuild/linux-x64": "0.24.0",
+ "@esbuild/netbsd-x64": "0.24.0",
+ "@esbuild/openbsd-arm64": "0.24.0",
+ "@esbuild/openbsd-x64": "0.24.0",
+ "@esbuild/sunos-x64": "0.24.0",
+ "@esbuild/win32-arm64": "0.24.0",
+ "@esbuild/win32-ia32": "0.24.0",
+ "@esbuild/win32-x64": "0.24.0"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
+ "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.11.0",
+ "@eslint/config-array": "^0.18.0",
+ "@eslint/core": "^0.7.0",
+ "@eslint/eslintrc": "^3.1.0",
+ "@eslint/js": "9.13.0",
+ "@eslint/plugin-kit": "^0.2.0",
+ "@humanfs/node": "^0.16.5",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.3.1",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.1.0",
+ "eslint-visitor-keys": "^4.1.0",
+ "espree": "^10.2.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.0.2.tgz",
+ "integrity": "sha512-N8o6cyUXzlMmQbdc2Kc83g1qomFi3ITqrAZfubipVKET2uR2mCStyGRcx/r8WiAIVMul2KfwRiCHBkTpBvGBmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@next/eslint-plugin-next": "15.0.2",
+ "@rushstack/eslint-patch": "^1.10.3",
+ "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.31.0",
+ "eslint-plugin-jsx-a11y": "^6.10.0",
+ "eslint-plugin-react": "^7.35.0",
+ "eslint-plugin-react-hooks": "^5.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-import-resolver-typescript": {
+ "version": "3.6.3",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz",
+ "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@nolyfill/is-core-module": "1.0.39",
+ "debug": "^4.3.5",
+ "enhanced-resolve": "^5.15.0",
+ "eslint-module-utils": "^2.8.1",
+ "fast-glob": "^3.3.2",
+ "get-tsconfig": "^4.7.5",
+ "is-bun-module": "^1.0.2",
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*",
+ "eslint-plugin-import-x": "*"
+ },
+ "peerDependenciesMeta": {
+ "eslint-plugin-import": {
+ "optional": true
+ },
+ "eslint-plugin-import-x": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.12.0",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+ "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.31.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz",
+ "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@rtsao/scc": "^1.1.0",
+ "array-includes": "^3.1.8",
+ "array.prototype.findlastindex": "^1.2.5",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
+ "debug": "^3.2.7",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "eslint-module-utils": "^2.12.0",
+ "hasown": "^2.0.2",
+ "is-core-module": "^2.15.1",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "object.groupby": "^1.0.3",
+ "object.values": "^1.2.0",
+ "semver": "^6.3.1",
+ "string.prototype.trimend": "^1.0.8",
+ "tsconfig-paths": "^3.15.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
+ "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aria-query": "^5.3.2",
+ "array-includes": "^3.1.8",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "^4.10.0",
+ "axobject-query": "^4.1.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
+ "minimatch": "^3.1.2",
+ "object.fromentries": "^2.0.8",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.includes": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.37.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz",
+ "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.8",
+ "array.prototype.findlast": "^1.2.5",
+ "array.prototype.flatmap": "^1.3.2",
+ "array.prototype.tosorted": "^1.1.4",
+ "doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.1.0",
+ "estraverse": "^5.3.0",
+ "hasown": "^2.0.2",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.8",
+ "object.fromentries": "^2.0.8",
+ "object.values": "^1.2.0",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.5",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.11",
+ "string.prototype.repeat": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz",
+ "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
+ "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expect-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz",
+ "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fastq": {
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fault": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz",
+ "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==",
+ "license": "MIT",
+ "dependencies": {
+ "format": "^0.2.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/form-data": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz",
+ "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/format": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz",
+ "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==",
+ "engines": {
+ "node": ">=0.4.x"
+ }
+ },
+ "node_modules/framer-motion": {
+ "version": "11.11.11",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.11.tgz",
+ "integrity": "sha512-tuDH23ptJAKUHGydJQII9PhABNJBpB+z0P1bmgKK9QFIssHGlfPd6kxMq00LSKwE27WFsb2z0ovY0bpUyMvfRw==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/fuse.js": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.0.0.tgz",
+ "integrity": "sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz",
+ "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+ "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hast-util-parse-selector": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
+ "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/hastscript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
+ "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^2.0.0",
+ "comma-separated-tokens": "^1.0.0",
+ "hast-util-parse-selector": "^2.0.0",
+ "property-information": "^5.0.0",
+ "space-separated-tokens": "^1.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/unified"
+ }
+ },
+ "node_modules/highlight.js": {
+ "version": "10.7.3",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+ "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/highlightjs-vue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz",
+ "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==",
+ "license": "CC0-1.0"
+ },
+ "node_modules/html-encoding-sniffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz",
+ "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-encoding": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
+ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
+ "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
+ "license": "MIT"
+ },
+ "node_modules/is-async-function": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz",
+ "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-bun-module": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz",
+ "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.6.3"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz",
+ "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-decimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
+ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-finalizationregistry": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz",
+ "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-hexadecimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
+ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
+ "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-set": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
+ "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakmap": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
+ "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakset": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz",
+ "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/iterator.prototype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz",
+ "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.2.1",
+ "get-intrinsic": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "reflect.getprototypeof": "^1.0.4",
+ "set-function-name": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jiti": {
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jiti": "bin/jiti.js"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "license": "MIT"
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsdom": {
+ "version": "25.0.1",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz",
+ "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssstyle": "^4.1.0",
+ "data-urls": "^5.0.0",
+ "decimal.js": "^10.4.3",
+ "form-data": "^4.0.0",
+ "html-encoding-sniffer": "^4.0.0",
+ "http-proxy-agent": "^7.0.2",
+ "https-proxy-agent": "^7.0.5",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.12",
+ "parse5": "^7.1.2",
+ "rrweb-cssom": "^0.7.1",
+ "saxes": "^6.0.0",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^5.0.0",
+ "w3c-xmlserializer": "^5.0.0",
+ "webidl-conversions": "^7.0.0",
+ "whatwg-encoding": "^3.1.1",
+ "whatwg-mimetype": "^4.0.0",
+ "whatwg-url": "^14.0.0",
+ "ws": "^8.18.0",
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "canvas": "^2.11.2"
+ },
+ "peerDependenciesMeta": {
+ "canvas": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz",
+ "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json5": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+ "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz",
+ "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "array-includes": "^3.1.6",
+ "array.prototype.flat": "^1.3.1",
+ "object.assign": "^4.1.4",
+ "object.values": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz",
+ "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==",
+ "dev": true,
+ "license": "CC0-1.0"
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lilconfig": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+ "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz",
+ "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lowlight": {
+ "version": "1.20.0",
+ "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz",
+ "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==",
+ "license": "MIT",
+ "dependencies": {
+ "fault": "^1.0.0",
+ "highlight.js": "~10.7.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/lucide-react": {
+ "version": "0.453.0",
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.453.0.tgz",
+ "integrity": "sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==",
+ "license": "ISC",
+ "peerDependencies": {
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
+ }
+ },
+ "node_modules/lz-string": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz",
+ "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "lz-string": "bin/bin.js"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.14",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz",
+ "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mini-svg-data-uri": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz",
+ "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==",
+ "license": "MIT",
+ "bin": {
+ "mini-svg-data-uri": "cli.js"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "license": "MIT"
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/mz": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0",
+ "object-assign": "^4.0.1",
+ "thenify-all": "^1.0.0"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.8",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/next": {
+ "version": "15.0.2",
+ "resolved": "https://registry.npmjs.org/next/-/next-15.0.2.tgz",
+ "integrity": "sha512-rxIWHcAu4gGSDmwsELXacqAPUk+j8dV/A9cDF5fsiCMpkBDYkO2AEaL1dfD+nNmDiU6QMCFN8Q30VEKapT9UHQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@next/env": "15.0.2",
+ "@swc/counter": "0.1.3",
+ "@swc/helpers": "0.5.13",
+ "busboy": "1.6.0",
+ "caniuse-lite": "^1.0.30001579",
+ "postcss": "8.4.31",
+ "styled-jsx": "5.1.6"
+ },
+ "bin": {
+ "next": "dist/bin/next"
+ },
+ "engines": {
+ "node": ">=18.18.0"
+ },
+ "optionalDependencies": {
+ "@next/swc-darwin-arm64": "15.0.2",
+ "@next/swc-darwin-x64": "15.0.2",
+ "@next/swc-linux-arm64-gnu": "15.0.2",
+ "@next/swc-linux-arm64-musl": "15.0.2",
+ "@next/swc-linux-x64-gnu": "15.0.2",
+ "@next/swc-linux-x64-musl": "15.0.2",
+ "@next/swc-win32-arm64-msvc": "15.0.2",
+ "@next/swc-win32-x64-msvc": "15.0.2",
+ "sharp": "^0.33.5"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": "^1.1.0",
+ "@playwright/test": "^1.41.2",
+ "babel-plugin-react-compiler": "*",
+ "react": "^18.2.0 || 19.0.0-rc-02c0e824-20241028",
+ "react-dom": "^18.2.0 || 19.0.0-rc-02c0e824-20241028",
+ "sass": "^1.3.0"
+ },
+ "peerDependenciesMeta": {
+ "@opentelemetry/api": {
+ "optional": true
+ },
+ "@playwright/test": {
+ "optional": true
+ },
+ "babel-plugin-react-compiler": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/next-themes": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.3.0.tgz",
+ "integrity": "sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8 || ^17 || ^18",
+ "react-dom": "^16.8 || ^17 || ^18"
+ }
+ },
+ "node_modules/next/node_modules/postcss": {
+ "version": "8.4.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+ "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.18",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz",
+ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nuqs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nuqs/-/nuqs-2.1.1.tgz",
+ "integrity": "sha512-iM2H8lMmhvk9bxupUs2oRle9usRNEAqppOkTMXOxD/uK85gOKAubU7T2zmPo8fnYQS4n5e/XswTiq+gLYGpy3w==",
+ "license": "MIT",
+ "dependencies": {
+ "mitt": "^3.0.1"
+ },
+ "peerDependencies": {
+ "@remix-run/react": ">= 2",
+ "next": ">= 14.2.0",
+ "react": ">= 18.2.0",
+ "react-router-dom": ">= 6"
+ },
+ "peerDependenciesMeta": {
+ "@remix-run/react": {
+ "optional": true
+ },
+ "next": {
+ "optional": true
+ },
+ "react-router-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/nwsapi": {
+ "version": "2.2.13",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz",
+ "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-hash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz",
+ "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz",
+ "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz",
+ "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.groupby": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz",
+ "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz",
+ "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-entities": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
+ "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
+ "license": "MIT",
+ "dependencies": {
+ "character-entities": "^1.0.0",
+ "character-entities-legacy": "^1.0.0",
+ "character-reference-invalid": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0",
+ "is-hexadecimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
+ "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "entities": "^4.5.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/pathe": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/pathval": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz",
+ "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.16"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/pocketbase": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.21.5.tgz",
+ "integrity": "sha512-bnI/uinnQps+ElSlzxkc4yvwuSFfKcoszDtXH/4QT2FhGq2mJVUvDlxn+rjRXVntUjPfmMG5LEPZ1eGqV6ssog==",
+ "license": "MIT"
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.49",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-import": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "postcss-value-parser": "^4.0.0",
+ "read-cache": "^1.0.0",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.0.0"
+ }
+ },
+ "node_modules/postcss-js": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+ "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "camelcase-css": "^2.0.1"
+ },
+ "engines": {
+ "node": "^12 || ^14 || >= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.21"
+ }
+ },
+ "node_modules/postcss-load-config": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "postcss": ">=8.0.9",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "postcss": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+ "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antonk52"
+ }
+ },
+ "node_modules/postcss-nested": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "postcss-selector-parser": "^6.1.1"
+ },
+ "engines": {
+ "node": ">=12.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.14"
+ }
+ },
+ "node_modules/postcss-selector-parser": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+ "license": "MIT"
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
+ "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-plugin-organize-imports": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-organize-imports/-/prettier-plugin-organize-imports-4.1.0.tgz",
+ "integrity": "sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==",
+ "license": "MIT",
+ "peerDependencies": {
+ "prettier": ">=2.0",
+ "typescript": ">=2.9",
+ "vue-tsc": "^2.1.0"
+ },
+ "peerDependenciesMeta": {
+ "vue-tsc": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/prettier-plugin-tailwindcss": {
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.8.tgz",
+ "integrity": "sha512-dGu3kdm7SXPkiW4nzeWKCl3uoImdd5CTZEJGxyypEPL37Wj0HT2pLqjrvSei1nTeuQfO4PUfjeW5cTUNRLZ4sA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.21.3"
+ },
+ "peerDependencies": {
+ "@ianvs/prettier-plugin-sort-imports": "*",
+ "@prettier/plugin-pug": "*",
+ "@shopify/prettier-plugin-liquid": "*",
+ "@trivago/prettier-plugin-sort-imports": "*",
+ "@zackad/prettier-plugin-twig-melody": "*",
+ "prettier": "^3.0",
+ "prettier-plugin-astro": "*",
+ "prettier-plugin-css-order": "*",
+ "prettier-plugin-import-sort": "*",
+ "prettier-plugin-jsdoc": "*",
+ "prettier-plugin-marko": "*",
+ "prettier-plugin-multiline-arrays": "*",
+ "prettier-plugin-organize-attributes": "*",
+ "prettier-plugin-organize-imports": "*",
+ "prettier-plugin-sort-imports": "*",
+ "prettier-plugin-style-order": "*",
+ "prettier-plugin-svelte": "*"
+ },
+ "peerDependenciesMeta": {
+ "@ianvs/prettier-plugin-sort-imports": {
+ "optional": true
+ },
+ "@prettier/plugin-pug": {
+ "optional": true
+ },
+ "@shopify/prettier-plugin-liquid": {
+ "optional": true
+ },
+ "@trivago/prettier-plugin-sort-imports": {
+ "optional": true
+ },
+ "@zackad/prettier-plugin-twig-melody": {
+ "optional": true
+ },
+ "prettier-plugin-astro": {
+ "optional": true
+ },
+ "prettier-plugin-css-order": {
+ "optional": true
+ },
+ "prettier-plugin-import-sort": {
+ "optional": true
+ },
+ "prettier-plugin-jsdoc": {
+ "optional": true
+ },
+ "prettier-plugin-marko": {
+ "optional": true
+ },
+ "prettier-plugin-multiline-arrays": {
+ "optional": true
+ },
+ "prettier-plugin-organize-attributes": {
+ "optional": true
+ },
+ "prettier-plugin-organize-imports": {
+ "optional": true
+ },
+ "prettier-plugin-sort-imports": {
+ "optional": true
+ },
+ "prettier-plugin-style-order": {
+ "optional": true
+ },
+ "prettier-plugin-svelte": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
+ "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/pretty-format/node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/prismjs": {
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
+ "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/property-information": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
+ "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
+ "license": "MIT",
+ "dependencies": {
+ "xtend": "^4.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/react": {
+ "version": "19.0.0-rc-02c0e824-20241028",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.0.0-rc-02c0e824-20241028.tgz",
+ "integrity": "sha512-GbZ7hpPHQMiEu53BqEaPQVM/4GG4hARo+mqEEnx4rYporDvNvUjutiAFxYFSbu6sgHwcr7LeFv8htEOwALVA2A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-code-blocks": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/react-code-blocks/-/react-code-blocks-0.1.6.tgz",
+ "integrity": "sha512-ENNuxG07yO+OuX1ChRje3ieefPRz6yrIpHmebQlaFQgzcAHbUfVeTINpOpoI9bSRSObeYo/OdHsporeToZ7fcg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.10.4",
+ "react-syntax-highlighter": "^15.5.0",
+ "styled-components": "^6.1.0",
+ "tslib": "^2.6.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "react": ">=16"
+ }
+ },
+ "node_modules/react-day-picker": {
+ "version": "8.10.1",
+ "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.1.tgz",
+ "integrity": "sha512-TMx7fNbhLk15eqcMt+7Z7S2KF7mfTId/XJDjKE8f+IUcFn0l08/kI4FiYTL/0yuOLmEcbR4Fwe3GJf/NiiMnPA==",
+ "license": "MIT",
+ "funding": {
+ "type": "individual",
+ "url": "https://github.com/sponsors/gpbl"
+ },
+ "peerDependencies": {
+ "date-fns": "^2.28.0 || ^3.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "19.0.0-rc-02c0e824-20241028",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0-rc-02c0e824-20241028.tgz",
+ "integrity": "sha512-LrZf3DfHL6Fs07wwlUCHrzFTCMM19yA99MvJpfLokN4I2nBAZvREGZjZAn8VPiSfN72+i9j1eL4wB8gC695F3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "0.25.0-rc-02c0e824-20241028"
+ },
+ "peerDependencies": {
+ "react": "19.0.0-rc-02c0e824-20241028"
+ }
+ },
+ "node_modules/react-icons": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.3.0.tgz",
+ "integrity": "sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/react-refresh": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
+ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-remove-scroll": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz",
+ "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==",
+ "license": "MIT",
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.6",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
+ "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "license": "MIT",
+ "dependencies": {
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-simple-typewriter": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/react-simple-typewriter/-/react-simple-typewriter-5.0.1.tgz",
+ "integrity": "sha512-vA5HkABwJKL/DJ4RshSlY/igdr+FiVY4MLsSQYJX6FZG/f1/VwN4y1i3mPXRyfaswrvI8xii1kOVe1dYtO2Row==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "react": ">=18.0.0",
+ "react-dom": ">=18.0.0"
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "license": "MIT",
+ "dependencies": {
+ "get-nonce": "^1.0.0",
+ "invariant": "^2.2.4",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-syntax-highlighter": {
+ "version": "15.6.1",
+ "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.1.tgz",
+ "integrity": "sha512-OqJ2/vL7lEeV5zTJyG7kmARppUjiB9h9udl4qHQjjgEos66z00Ia0OckwYfRxCSFrW8RJIBnsBwQsHZbVPspqg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.3.1",
+ "highlight.js": "^10.4.1",
+ "highlightjs-vue": "^1.0.0",
+ "lowlight": "^1.17.0",
+ "prismjs": "^1.27.0",
+ "refractor": "^3.6.0"
+ },
+ "peerDependencies": {
+ "react": ">= 0.14.0"
+ }
+ },
+ "node_modules/read-cache": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "pify": "^2.3.0"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/reflect.getprototypeof": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz",
+ "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.1",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "globalthis": "^1.0.3",
+ "which-builtin-type": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/refractor": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz",
+ "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==",
+ "license": "MIT",
+ "dependencies": {
+ "hastscript": "^6.0.0",
+ "parse-entities": "^2.0.0",
+ "prismjs": "~1.27.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/refractor/node_modules/prismjs": {
+ "version": "1.27.0",
+ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
+ "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
+ "license": "MIT"
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz",
+ "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "4.27.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.4.tgz",
+ "integrity": "sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/estree": "1.0.6"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.27.4",
+ "@rollup/rollup-android-arm64": "4.27.4",
+ "@rollup/rollup-darwin-arm64": "4.27.4",
+ "@rollup/rollup-darwin-x64": "4.27.4",
+ "@rollup/rollup-freebsd-arm64": "4.27.4",
+ "@rollup/rollup-freebsd-x64": "4.27.4",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.27.4",
+ "@rollup/rollup-linux-arm-musleabihf": "4.27.4",
+ "@rollup/rollup-linux-arm64-gnu": "4.27.4",
+ "@rollup/rollup-linux-arm64-musl": "4.27.4",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.27.4",
+ "@rollup/rollup-linux-riscv64-gnu": "4.27.4",
+ "@rollup/rollup-linux-s390x-gnu": "4.27.4",
+ "@rollup/rollup-linux-x64-gnu": "4.27.4",
+ "@rollup/rollup-linux-x64-musl": "4.27.4",
+ "@rollup/rollup-win32-arm64-msvc": "4.27.4",
+ "@rollup/rollup-win32-ia32-msvc": "4.27.4",
+ "@rollup/rollup-win32-x64-msvc": "4.27.4",
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rrweb-cssom": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
+ "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.1.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/saxes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz",
+ "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "xmlchars": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=v12.22.7"
+ }
+ },
+ "node_modules/scheduler": {
+ "version": "0.25.0-rc-02c0e824-20241028",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0-rc-02c0e824-20241028.tgz",
+ "integrity": "sha512-GysnKjmMSaWcwsKTLzeJO0IhU3EyIiC0ivJKE6yDNLqt3IMxDByx8b6lSNXRNdN+ULUY0WLLjSPaZ0LuU/GnTg==",
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/server-only": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz",
+ "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==",
+ "license": "MIT"
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shallowequal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
+ "license": "MIT"
+ },
+ "node_modules/sharp": {
+ "version": "0.33.5",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz",
+ "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==",
+ "hasInstallScript": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "color": "^4.2.3",
+ "detect-libc": "^2.0.3",
+ "semver": "^7.6.3"
+ },
+ "engines": {
+ "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ },
+ "optionalDependencies": {
+ "@img/sharp-darwin-arm64": "0.33.5",
+ "@img/sharp-darwin-x64": "0.33.5",
+ "@img/sharp-libvips-darwin-arm64": "1.0.4",
+ "@img/sharp-libvips-darwin-x64": "1.0.4",
+ "@img/sharp-libvips-linux-arm": "1.0.5",
+ "@img/sharp-libvips-linux-arm64": "1.0.4",
+ "@img/sharp-libvips-linux-s390x": "1.0.4",
+ "@img/sharp-libvips-linux-x64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
+ "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
+ "@img/sharp-linux-arm": "0.33.5",
+ "@img/sharp-linux-arm64": "0.33.5",
+ "@img/sharp-linux-s390x": "0.33.5",
+ "@img/sharp-linux-x64": "0.33.5",
+ "@img/sharp-linuxmusl-arm64": "0.33.5",
+ "@img/sharp-linuxmusl-x64": "0.33.5",
+ "@img/sharp-wasm32": "0.33.5",
+ "@img/sharp-win32-ia32": "0.33.5",
+ "@img/sharp-win32-x64": "0.33.5"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/siginfo": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
+ "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/simple-icons": {
+ "version": "13.15.0",
+ "resolved": "https://registry.npmjs.org/simple-icons/-/simple-icons-13.15.0.tgz",
+ "integrity": "sha512-8SzFj9CvPlDnjDLISsAWTvpCs7om2zbSJZ1hNLRo6quWKLqFwjCD9opS24Q/yD0bdsnVHPpF0N3hitpHrY5u9w==",
+ "license": "CC0-1.0",
+ "engines": {
+ "node": ">=0.12.18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/simple-icons"
+ }
+ },
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/sonner": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/sonner/-/sonner-1.5.0.tgz",
+ "integrity": "sha512-FBjhG/gnnbN6FY0jaNnqZOMmB73R+5IiyYAw8yBj7L54ER7HB3fOSE5OFiQiE2iXWxeXKvg6fIP4LtVppHEdJA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^18.0.0",
+ "react-dom": "^18.0.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/space-separated-tokens": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
+ "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/stackback": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
+ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/std-env": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz",
+ "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string.prototype.includes": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz",
+ "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz",
+ "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.7",
+ "regexp.prototype.flags": "^1.5.2",
+ "set-function-name": "^2.0.2",
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.repeat": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz",
+ "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/styled-components": {
+ "version": "6.1.13",
+ "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz",
+ "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/is-prop-valid": "1.2.2",
+ "@emotion/unitless": "0.8.1",
+ "@types/stylis": "4.2.5",
+ "css-to-react-native": "3.2.0",
+ "csstype": "3.1.3",
+ "postcss": "8.4.38",
+ "shallowequal": "1.1.0",
+ "stylis": "4.3.2",
+ "tslib": "2.6.2"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/styled-components"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0",
+ "react-dom": ">= 16.8.0"
+ }
+ },
+ "node_modules/styled-components/node_modules/postcss": {
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.2.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/styled-components/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
+ "license": "0BSD"
+ },
+ "node_modules/styled-jsx": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz",
+ "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==",
+ "license": "MIT",
+ "dependencies": {
+ "client-only": "0.0.1"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "peerDependencies": {
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "babel-plugin-macros": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/stylis": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz",
+ "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==",
+ "license": "MIT"
+ },
+ "node_modules/sucrase": {
+ "version": "3.35.0",
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+ "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "commander": "^4.0.0",
+ "glob": "^10.3.10",
+ "lines-and-columns": "^1.1.6",
+ "mz": "^2.7.0",
+ "pirates": "^4.0.1",
+ "ts-interface-checker": "^0.1.9"
+ },
+ "bin": {
+ "sucrase": "bin/sucrase",
+ "sucrase-node": "bin/sucrase-node"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tailwind-merge": {
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz",
+ "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/dcastil"
+ }
+ },
+ "node_modules/tailwindcss": {
+ "version": "3.4.14",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
+ "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@alloc/quick-lru": "^5.2.0",
+ "arg": "^5.0.2",
+ "chokidar": "^3.5.3",
+ "didyoumean": "^1.2.2",
+ "dlv": "^1.1.3",
+ "fast-glob": "^3.3.0",
+ "glob-parent": "^6.0.2",
+ "is-glob": "^4.0.3",
+ "jiti": "^1.21.0",
+ "lilconfig": "^2.1.0",
+ "micromatch": "^4.0.5",
+ "normalize-path": "^3.0.0",
+ "object-hash": "^3.0.0",
+ "picocolors": "^1.0.0",
+ "postcss": "^8.4.23",
+ "postcss-import": "^15.1.0",
+ "postcss-js": "^4.0.1",
+ "postcss-load-config": "^4.0.1",
+ "postcss-nested": "^6.0.1",
+ "postcss-selector-parser": "^6.0.11",
+ "resolve": "^1.22.2",
+ "sucrase": "^3.32.0"
+ },
+ "bin": {
+ "tailwind": "lib/cli.js",
+ "tailwindcss": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tailwindcss-animate": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz",
+ "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "tailwindcss": ">=3.0.0 || insiders"
+ }
+ },
+ "node_modules/tailwindcss-animated": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/tailwindcss-animated/-/tailwindcss-animated-1.1.2.tgz",
+ "integrity": "sha512-SI4owS5ojserhgEYIZA/uFVdNjU2GMB2P3sjtjmFA52VxoUi+Hht6oR5+RdT+CxrX9cNNYEa+vbTWHvN9zbj3w==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "tailwindcss": ">=3.1.0"
+ }
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/thenify": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.0.0"
+ }
+ },
+ "node_modules/thenify-all": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "thenify": ">= 3.1.0 < 4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/tinybench": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
+ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyexec": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz",
+ "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinypool": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz",
+ "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ }
+ },
+ "node_modules/tinyrainbow": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz",
+ "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
+ "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tldts": {
+ "version": "6.1.64",
+ "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.64.tgz",
+ "integrity": "sha512-ph4AE5BXWIOsSy9stpoeo7bYe/Cy7VfpciIH4RhVZUPItCJmhqWCN0EVzxd8BOHiyNb42vuJc6NWTjJkg91Tuw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tldts-core": "^6.1.64"
+ },
+ "bin": {
+ "tldts": "bin/cli.js"
+ }
+ },
+ "node_modules/tldts-core": {
+ "version": "6.1.64",
+ "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.64.tgz",
+ "integrity": "sha512-uqnl8vGV16KsyflHOzqrYjjArjfXaU6rMPXYy2/ZWoRKCkXtghgB4VwTDXUG+t0OTGeSewNAG31/x1gCTfLt+Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tough-cookie": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz",
+ "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tldts": "^6.1.32"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
+ "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/ts-api-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz",
+ "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
+ "node_modules/ts-interface-checker": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/tsconfck": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.4.tgz",
+ "integrity": "sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tsconfck": "bin/tsconfck.js"
+ },
+ "engines": {
+ "node": "^18 || >=20"
+ },
+ "peerDependencies": {
+ "typescript": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.15.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+ "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
+ "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.19.8",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
+ "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+ "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-callback-ref": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
+ "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "license": "MIT",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "license": "MIT",
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
+ "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/vite": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.1.tgz",
+ "integrity": "sha512-Ldn6gorLGr4mCdFnmeAOLweJxZ34HjKnDm4HGo6P66IEqTxQb36VEdFJQENKxWjupNfoIjvRUnswjn1hpYEpjQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.24.0",
+ "postcss": "^8.4.49",
+ "rollup": "^4.23.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "jiti": ">=1.21.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "sass-embedded": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-node": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.6.tgz",
+ "integrity": "sha512-DBfJY0n9JUwnyLxPSSUmEePT21j8JZp/sR9n+/gBwQU6DcQOioPdb8/pibWfXForbirSagZCilseYIwaL3f95A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cac": "^6.7.14",
+ "debug": "^4.3.7",
+ "es-module-lexer": "^1.5.4",
+ "pathe": "^1.1.2",
+ "vite": "^5.0.0 || ^6.0.0"
+ },
+ "bin": {
+ "vite-node": "vite-node.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ }
+ },
+ "node_modules/vite-tsconfig-paths": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.3.tgz",
+ "integrity": "sha512-0bz+PDlLpGfP2CigeSKL9NFTF1KtXkeHGZSSaGQSuPZH77GhoiQaA8IjYgOaynSuwlDTolSUEU0ErVvju3NURg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "globrex": "^0.1.2",
+ "tsconfck": "^3.0.3"
+ },
+ "peerDependencies": {
+ "vite": "*"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitest": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.6.tgz",
+ "integrity": "sha512-isUCkvPL30J4c5O5hgONeFRsDmlw6kzFEdLQHLezmDdKQHy8Ke/B/dgdTMEgU0vm+iZ0TjW8GuK83DiahBoKWQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vitest/expect": "2.1.6",
+ "@vitest/mocker": "2.1.6",
+ "@vitest/pretty-format": "^2.1.6",
+ "@vitest/runner": "2.1.6",
+ "@vitest/snapshot": "2.1.6",
+ "@vitest/spy": "2.1.6",
+ "@vitest/utils": "2.1.6",
+ "chai": "^5.1.2",
+ "debug": "^4.3.7",
+ "expect-type": "^1.1.0",
+ "magic-string": "^0.30.12",
+ "pathe": "^1.1.2",
+ "std-env": "^3.8.0",
+ "tinybench": "^2.9.0",
+ "tinyexec": "^0.3.1",
+ "tinypool": "^1.0.1",
+ "tinyrainbow": "^1.2.0",
+ "vite": "^5.0.0 || ^6.0.0",
+ "vite-node": "2.1.6",
+ "why-is-node-running": "^2.3.0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/vitest"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
+ "@vitest/browser": "2.1.6",
+ "@vitest/ui": "2.1.6",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@types/node": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/w3c-xmlserializer": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz",
+ "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "xml-name-validator": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-encoding": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz",
+ "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "iconv-lite": "0.6.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-mimetype": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz",
+ "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz",
+ "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "^5.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-builtin-type": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz",
+ "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function.prototype.name": "^1.1.6",
+ "has-tostringtag": "^1.0.2",
+ "is-async-function": "^2.0.0",
+ "is-date-object": "^1.0.5",
+ "is-finalizationregistry": "^1.0.2",
+ "is-generator-function": "^1.0.10",
+ "is-regex": "^1.1.4",
+ "is-weakref": "^1.0.2",
+ "isarray": "^2.0.5",
+ "which-boxed-primitive": "^1.0.2",
+ "which-collection": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-collection": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
+ "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-map": "^2.0.3",
+ "is-set": "^2.0.3",
+ "is-weakmap": "^2.0.2",
+ "is-weakset": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/why-is-node-running": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
+ "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "siginfo": "^2.0.0",
+ "stackback": "0.0.2"
+ },
+ "bin": {
+ "why-is-node-running": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/ws": {
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/xml-name-validator": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz",
+ "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/yaml": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz",
+ "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/zod": {
+ "version": "3.23.8",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz",
+ "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ }
+ }
+}
diff --git a/frontend/package.json b/frontend/package.json
new file mode 100644
index 000000000..174b34e5c
--- /dev/null
+++ b/frontend/package.json
@@ -0,0 +1,88 @@
+{
+ "name": "proxmox-helper-scripts-website",
+ "version": "1.0.0",
+ "license": "MIT",
+ "private": true,
+ "author": {
+ "name": "Bram Suurd",
+ "url": "https://github.com/community-scripts"
+ },
+ "type": "module",
+ "scripts": {
+ "dev": "next dev --turbopack",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint",
+ "test": "vitest",
+ "deploy": "next build && touch out/.nojekyll && git add out/ && git commit -m \"Deploy\" && git subtree push --prefix out origin gh-pages",
+ "format:write": "prettier --write \"**/*.{ts,tsx,mdx}\" --cache",
+ "format:check": "prettier --check \"**/*.{ts,tsx,mdx}\" --cache",
+ "typecheck": "tsc --noEmit"
+ },
+ "dependencies": {
+ "@radix-ui/react-accordion": "^1.1.2",
+ "@radix-ui/react-dialog": "^1.0.5",
+ "@radix-ui/react-dropdown-menu": "^2.0.6",
+ "@radix-ui/react-icons": "^1.3.1",
+ "@radix-ui/react-label": "^2.1.0",
+ "@radix-ui/react-navigation-menu": "^1.1.4",
+ "@radix-ui/react-popover": "^1.1.2",
+ "@radix-ui/react-select": "^2.1.2",
+ "@radix-ui/react-separator": "^1.1.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-switch": "^1.1.1",
+ "@radix-ui/react-tabs": "^1.1.0",
+ "@radix-ui/react-tooltip": "^1.1.2",
+ "@vercel/analytics": "^1.2.2",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "cmdk": "^1.0.0",
+ "date-fns": "^4.1.0",
+ "framer-motion": "^11.11.11",
+ "fuse.js": "^7.0.0",
+ "lucide-react": "^0.453.0",
+ "mini-svg-data-uri": "^1.4.4",
+ "next": "15.0.2",
+ "next-themes": "^0.3.0",
+ "nuqs": "^2.1.1",
+ "pocketbase": "^0.21.4",
+ "prettier-plugin-organize-imports": "^4.1.0",
+ "react": "19.0.0-rc-02c0e824-20241028",
+ "react-code-blocks": "^0.1.6",
+ "react-day-picker": "8.10.1",
+ "react-dom": "19.0.0-rc-02c0e824-20241028",
+ "react-icons": "^5.1.0",
+ "react-simple-typewriter": "^5.0.1",
+ "sharp": "^0.33.5",
+ "simple-icons": "^13.5.0",
+ "sonner": "^1.5.0",
+ "tailwind-merge": "^2.3.0",
+ "zod": "^3.23.8"
+ },
+ "devDependencies": {
+ "@testing-library/dom": "^10.4.0",
+ "@testing-library/react": "^16.0.1",
+ "@types/node": "^22",
+ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
+ "@types/react": "npm:types-react@19.0.0-rc.1",
+ "@typescript-eslint/eslint-plugin": "^8.8.1",
+ "@typescript-eslint/parser": "^8.8.1",
+ "@vitejs/plugin-react": "^4.3.4",
+ "eslint-config-next": "15.0.2",
+ "eslint": "^9.13.0",
+ "jsdom": "^25.0.1",
+ "postcss": "^8",
+ "prettier-plugin-tailwindcss": "^0.6.5",
+ "prettier": "^3.2.5",
+ "tailwindcss-animate": "^1.0.7",
+ "tailwindcss-animated": "^1.1.2",
+ "tailwindcss": "^3.4.9",
+ "typescript": "^5",
+ "vite-tsconfig-paths": "^5.1.3",
+ "vitest": "^2.1.6"
+ },
+ "overrides": {
+ "@types/react": "npm:types-react@19.0.0-rc.1",
+ "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1"
+ }
+}
diff --git a/frontend/postcss.config.mjs b/frontend/postcss.config.mjs
new file mode 100644
index 000000000..1a69fd2a4
--- /dev/null
+++ b/frontend/postcss.config.mjs
@@ -0,0 +1,8 @@
+/** @type {import('postcss-load-config').Config} */
+const config = {
+ plugins: {
+ tailwindcss: {},
+ },
+};
+
+export default config;
diff --git a/frontend/public/defaultimg.png b/frontend/public/defaultimg.png
new file mode 100644
index 0000000000000000000000000000000000000000..4aac77d5c835d4f5b0242329b9f8bb0e142faf07
GIT binary patch
literal 77312
zcmdqJ2~<*hygzDnw9?EvWu7#(PNyu*q0B5ztt>0ag-)SR$XL_xGk?c^yNPHIj#
zBnpb;0OWv{R#xT=s34G;69}jXC!GBi3{X;9%iN%%I1;_V;+2#(cmDWW(-m8FO-V^!aq;YF&!nI^x^l{{@O&v*Tf1U%q^acFNiG^pJ{OFulU0
zVjl$JbvOF0Jpbh0YBCTABmp7qf;Kr~jpDvPwv?^Nwg2p$Qo4uwXHRL1Qi$QdyT6>u
z`|)5uwl!P+YnJXh1ru>`t*s}!KYgkzD=X{AC@Gcf|K0fqD{if;di{DNk;mZVobggp
za*zLqyf7H8p{{Nq6qt`Cq=FeJWS7PU%+uLo>~vWGYy{`{%WOTux~N;NK_R
zt<>T9@A(b4{$2XV%d5G?i2?y+G(>*cI!-x8RRV*LtVg*7wvD%7Ch>sy*!R
zw{!n;;ah!b=l&KU5;m8eW@~%py8R{3p4u#I>-!z1exT6M&{CrI>3=zT>vbT65B~+V
z-K*Q_c4T6r>vgPy`@bySZ3d)byVLikn{Piyu8kZ;>gKL?{rN9dzc^HTK0sSnP*8q;
zqoqWh)Bp1Q)|<_C!nymUo6cRrVM(7;rhDoC%UN06yNIp!J0FxqhI7W6j2a<(?_232
zb8T*-r2e-UyKi&(hWPdf+Oh7H*H6ZoV!fYg|u|%=@
zE3Kg9VNk2|v}7pQ^?p*?gR-a9o|!18ToZ67NzVql1xfLYOtwn#Yu2Tv+>us%+5kfi
zUyd57#;PNZlGXjzcp~BZ4Z^dZ|NZwp(3)H8c;(r4bzQ|tw(f!%a<-A%wKk$D-Sra>A#$tA_{xuil;xIQtAuC2%ZeVfKivpuN#sOwsJMn7dSe{MreGT4`)r2AB3|sdbLUC}dNMZc
zyfO@g6e+lr4nh@0!t>A?r^<7}M{Xi|>gBXJye=i-9(;*^K=RTpR?-+{r(+)K-~m5+
zy&{b!Umryl^Bu{h0Ly^7IB=0f2_N34*WKH@S-PVjhy8U=Cw=m8;@G=>%=4I$*Po~<
z)Ltv_ET{z%K8hwsiTrYc;Ih#3PEJfc=(SMuurG-`^XO&M(tuQ4xLd8Y)Hgf(56V%E
zKj2A)wpVkAi&X1Gjyhxnu3;M@ZI=wh#q-aIE))mx<&q&LCgj-^7_YHS3Fm~hWm02P
zMFy~?g=xcd-2oOeRdSxqXoxKlh0qO*jA)5-BYu~lyeh|FGwIPA_l*M^Uw&wBXWNuA
zEt#|rE(Mr2htsMa@(DW)d^fgvp!T(RKcwI{^TZBYHb}Obek_)8=iV^NR;`x#YGB79
z-|wkglS{5kb}jS!A8^d=+TSE{s6d{5rLDBBfhik)E1WOy^W3Fh+d35{N{V|oP)S|U
z0sX4vM|xHaU97$lS3fY(CXpG?woRHBL24c(q@ax&
z+aB4BAA+QL-N;8E^ugGM0KQfdR*`ZZzQ47HJ9pK_;h!j1SYD7m2&Jj>_{O5wn*SH2iU!Z*NZ
z^lX||Fu37^KB2Ca*J;kLH_MbOA^thblxC65NCv8BR~-e1hZ<}2
zpsV{N!|U8=r_*fe2Cx4993n5^rHnMmWiiGn;^g6xAyfF}zIMt;FY&vBWCD=}R5{Ha
ztd4D{EQWQ0B*W#Gg0bA8da!krB-tS9#t`v#z&ZUi)_Wl}Kpg`ZW(b$mVyRoZ5ZmHg
zTHg8@)J>gBlh?y7B~|Y$DPKRp&=_!HeF*DdW#JVpQJ6nDd9KfRs<$XAyzpiQT_N(l
z;poDC3=V+V4CwwWq^@E{g?$urjs_--rceEX+iGN9(|_WPP9k;UI=Ff%2IZq#-p1<3x#GA(mK*Di$lzA9cv&l9}(zSbKfF#jM)GQ*3-r+%!u{d#9=944LkHB4-zh#CME;udMl=jt
z;hVNyy1B?Db09XCDo`NX1K`9NYkY>5p&X5
ze{Xu6d?jtO+Abu^95jLK;bdp-3c9&^ocpo?MjxTP1Qq)4+u14Xr+B0~uD{
z#HGamO5>;jn6>)**q@b!?9?@j9Zs=L!5L%8B73fE_W2p^bWjpK#;+#l-MMq`OV6tS
z+G_nr5Swkv2Af&*^K5jAj$c#c!y?$Y*Rj-Z-?ia2u`8dZx%D4EqhH*%M|XPSF7)(%
z0(TCkGSwSThNs=%QC53{GM*3CnG?eFva}Cbh^rpPIMISo>1_PcCRqC=HS6VA1M1{3
zBc!NVPq(xYQjdyj?d@
zITF0tuBSL@%7RVi!3bHuV3nu8hLj)L8(&FWqORx0%_HSA)som|6U_QAY{;Nu|%2
z9wtGKq2aA11C3HfTCIPDttfJ@r89i#1>sv{5qg+X+c}(5R5YQNS?OG$xgbbnFFb5f
zhdy|ag^`Qa(I@={ZR3L8^*x7rPK1jdEr?Mnp%A9rlT_lFHe7dszep(Wty-pyY6V4=
ze{gQRGTmfj^++%$E#js8;qmDniiVGA=q<9Q!FWWUCk8#mHncXm45niq=KMa&y_(de
z2dkm1M|nhbddB2;<9T&={atWru_x%ML(xyw1B*lU^*U6km#0A{ATzm2j7yYp9^{jWD
zQBACLl=wztC>#G^5;bV~Zou|9CD)9sR;gLYdKr{ZGQ8fghh2#vWG|1y(l#>nk}GZ#eshaG~R0DLno!^F;(-P+B0pUZUi
zW1o)6wxmO|bxKy0VdJ!L!wyegQ$fmi`Iv=QqnX#E@uxfwaKP)fWFaM7
ziObxVc+-Z`PKRcMkNFXEPJ^k{2ve5aDgYPT&D0My4_W<%w7rLt3*@qBV6z}DcQk-^
zv=PQltMSM~8#Q#?y_<9$NEDq0Sa`i1^JdRKH@Cj!a2G$_e57xuv2zxG2+o~^
zM1Pn|27RrZU+U|PazBtXO>|S-FOZABH#bs2n4FpnV8*7!<)V;Yv`*5zH!7$oA#8>H
zFhPzcr@iR|tt*{0@^0#yI0y*m@}bNW0xG_yFOJ(l1vT+QTBO{r!oG)2^gf{eF;Hlx
z!$ziNziDt26(2tLN<*8_IMmzpS)9th3yao20Zn-~Y4x?Tw70JMBit0NjZ7uiwY11S
z{8jKhdL86ATN)Zb3?p)GJc?1g-LSwtagQCn5GX}VD*XP;jk?jG@N(C#_`d>t0&k{2
z)VFJMB@)O~GcYw{mo;lBSs2_CJ`(Hi))1Q;=B?_4JIw94{{06+wuLL7FNh$0T4p2wA4F3tD6Q%S?~g&>%mmJg_kd1-nv8BmLUQ>V5nm
zxymr*#EgCD@uDiUpd5+n_i8os>h|nDR&}<+lXwiPSrOFWYSn>gU>)tu#oh@rwzm;J
zB-mCp7M{hz-gdlyZt{M3qxbULJrv;7kN-Z5N+
zU;o^{u$3QlRm5zD_kSJdUOk%q>vtUcrmAVe=<}(CJ6Tv%UJyBXV3C5~!M?XfsUtnJ
zJX1FLo9OtqAUoO75gSUy#ADZf@R
zTOCkfN(IN+X!bt|1dMcmAZ)Ji`A~&aOHHexE?^Ce;F&cxIc6_;O^TQ
zwLYyNXs5zN2bQlp#ycV}e`HO6WGmZ55L}mRE{gf|bYD)iT_7}8GEB@Kk?0@8_@)&f
zzS`A-xkD}+3dp8zwv8rz0lGo^hK1h;rj26O`wu_N$KS}su1zrxz_?+$p1HNZQFjo$
zaOADz^#l(lw4d69b&}8;CT@`q|hm<
ziiJ(gw#vdwD@_)hFS^z>_LW%9?My^MCB|%&mJ^xp8^ZcjS)^~_tRC50xWWyc?aatV
zC#?4K4_+h7kbO=5xxjYrWUW3gwYltq1UGDvr+qo$CZ*bhzJngS_;&=TyptIJ}YbE!vYH$W`v<1;nTU;-)y?!Nr+W6JrtCgCFj!u$qKH)l>Yjm~C
zrK)l4>OixVB07ngc@0pY7;#iO<3&rR&(o%WFFm#@r!MsGQGA
z#;c2|rp^x&?63-55VcP*41^Iy)bA5+F}V#0xM5;}B~MgLQdvjOLGzi8T-FgCOF&
zdg;f)WxrdV0=!-x0br>k8v!xh_=JEaC{e(&exv?=JH3%4SjRZeFI?&9%6v)Z`BWEKDyD{5KHWP(YM$=(5`FN?~wiCIwFPoc89Sach}XS
zIT~+0b#^*X_we@U;kuSkYo5`%_1QOq`cRq#*q$h=&>6;BvE)oz+9piJKB7TI6FI>n
zhT#RCr-&g#VLFzn4}dT}@mTb`ky9ZopCV{;H|zHK;Ho4z^Ej<)Dgbj|)4|BO$Sk5+
zup(R^?iXD*X*BFRv;$GmSb^;r%EC5x))FW8v`n;x8~MM?$n~$ZU0fz~HKo3OmlL$oW0P2clb__$Ho$J=>WtPPtQ~@n1
z^sZ4El^P;H(4LL2dT1d-&)T#tuNwAQyWcN5+LYj@i#7&Xs1k`
zQv*~$m@+O$_03s>2r*FP!#=}1Y}M2xy4^)*3NXS7pRunpVCmnCTj%=tgGRAU1h&T?
zJ>|BKXAg@XW0-=|&bLd?oKW^wZP;wJbV2mQyEz*){O8m2
zn3qRmjO}pu7PytRzC?}o0eq$}X+4Hp39gxv4dgT>@xKxsh(R_K*h5C#rQi@%M}eiZ
zmbNXKQ>QTTCiGgUc+_Xi%nN%WC3)ScLksuHpDHvk;R^Il{AywQVOBEN
z0^1>JLEClhqe;H!)C}ovX+9SOqE5HQVP*=m2yeoKe=V&XYtQm;o3(jkz1h1+!$tn?
z)htsdKQ(M-!K#kJCrIavEWdjWtB9XE87vw3U=jl^xW-Kd^UF%OWlmTyBTFCb`o=DP
zT5u203tpc*z|_>6kr5a-5!P<1*9DOD4XWg$vDh}@BT4EaG5%>~>PNwto%$|qK5^z0
zpalA5A-vi6ulD77qPq6ck185^fwSE`U4_F{B79PFO1@=msWs50oy8t*6fi1pxuyY5
z$+Gvl)(=0(d{OH(tA
z_?lWg1Zz998*b~)wu-T9&ZeMjnFp81RyGSH{+Ov7Q6UHzv;78@CrbvP!VW8VSk`tV
zOKl{}w53-XI342z?em!dY$K#Ae5|r-7a}3C!gO!hK=_!mm(%jL4s7
z%k=&wJ?Oe+$hYl~qKJTj#=*fsI+IKv3`w)0aK2rnJrbsIrXxp6IL-!N{WZj^NK@d_
zPA5slTDVP6ND(B^;}vDOJck>)G=3Z8vh5FNBKL#!T-8-KNXxqZzWFsSS1!3H4`CoQ
zio5SlS6Z7ezy?bQYIL*Zk5zMJ<=m6opKRPJI}oF9~fs+PF)hS+>EZ3BrBK466_NH%SMD5BPzMqs6ds
z+=H*?C!NW{5^rICHiQ{F$K~aRD_2`(bg!;t%{4Zd)VFYxM^4yDNpKs;D*H4<4-a}s
zl8y!+c^|9FLWbxYAOMnVA5LJ(~L&0e%7+Jx=%+6Sl1!PdS-a@_U-w+`U(LpJpn9jQoLU>{rOt+zOuNhuzsLA$B;Wmnx^96L!7{*}CpX
zPu5!Zp5P=Uf1GxdtdLX5BiQ-#y@U5_A~)-4Gw$G0R(kR*`qUrG!E!+Fk_rTtzGt-77To@KwKmcl!!8t5x_k4bAGeuy
zjqUgqb+&^P+MP36b}lQLjP~L#c;yPK-8_|1<6YcO&kR}!khzfoczf@cFA43dl&jLV
zz-m;aAXMhI*%#C4jpzJJ%j3klEZbJ-?Hm=y
z{`G!R;OVNQ+qrtv$|a1e+ruKa2VB}vsl=J%n?l<6JooIe{{vdX-Ij`Kcil`nbB2%(
zx%)L81r17nEPg!x+;u*lLP(EocbCN{izS-9Q3HU#c-=3%>}kB~Y_`wq%4z0A
z;UTDK_$FPl>1B>Ll*1sKs$M1Tcw?yCIBpyoWr%hAQ6_JJ-*m|{D;-?F{KM4H{ezrx
zOdz@Ejz%t28{O#0t*)KvpEiKc)(UD)@mW!^s11IN#rp8M6P70jt}dlw`cxUbvXZ60
z%}tKtjw}^3TY{7F#Fh3MkbqM#8cyY_$A&pv{zFY{WfQdYf~&9wiFSlpd@-^8<~ln;ZuK-+ByeYkDT5lq`x+)(k9Q-j48G>K
z$!a5#*tPo?)d0lZUh39IFAt~5n0D4(WtZV%!`0#D#g6yaTLpu4{9#R?>dZ=S(^p5x
z%Iq=qiS3HH3J$!K
zhc-27rE}|A2CXAQBHr4
zPgp^}?jT`kgPeuR;P~8Oy2y@WVnh}YY+t!$jVG~9d+T3wiYxcx9Ugi?Z01{Ick8?5
ziR&5|;J_C)klVTt*16mGzCWKKPax!RnEqt>PVU@LIIzFOBWhF+F1D6je}vvq2xyRu{Ugc}^{K@2bk8
z#C#WoEphN>P}lqT-Vnu>L5I{ec3aq4-3I)IycD5%JY)Uqps$lSlkHLxZ=8@kM1c$P
zJbUeria&T`fp+H%^doh*>X9C3Asq~RvZf9y3|W>JgH8U#M1==^PhIZ+RGX9KXz)35
zvQ(oAS~Rfs91#S6voOuM&reSz(dNm)7$@1AoBsPMLLrU%HM;Mc?RhCgNF%jZ3m
zxC6JZE#)nMe#1QW9de(A#0K!EPBUL->c4DUZ4IqT9!x9^Ee-wEWMG&ZV-8gqDHbLz
zeS>)SZ!tD&PaR!v=qz}Y_C#Shc1I?oL7t>I&)hI*wvTVcjx+qiZQSb!gVhdC7rFlV
zv&C&ov%^eyD*O`C`!B}E`g@ru@jQ&JD{3iqUY^L@q&tqk@9B;no@J!PB|CW^)Y#PB
z>8V^BxwT^V`P=tg2Z@hMkWLA=P`-CEP}I$?HVttzC=nExj}@I&9uF#+1-4alPDusg
zbQE<*r^H^sRTSk6`VmBE3w1sAD%U>R`}P
zv134dXjaQZcZ0$lZF9Biig{bZ-F-&|6V9%apqfw
zb5|b-D&gD}tzgJ-Ha^!UIISzDwbY4D1ecnIG%^%1$5iUuGIuwhLO8iJtA$8e+BT?2
zs|A*HzpXDLlat>@_UE7$GEn1iBr9$?-t>?nPqs~H5gNcxm-aP9g3*2C$kH0ALpM-;
zORH&w_lcpCZbOA;qc&6RtDkA05p7$Zc&=vJJr8}gYv*)eqzz0EuV?-VNDyE74xK(h
z^1A;hd^`l*YyP=&^r0p#E2y#=;-2NFYqY%;GDGT74?M{{-u34qrP;#TSy$Gb)NOho
z?rxto7vB0UZuz<<Eo*P7w_EbSa(imG8i>s#W;)Hfk$NLuU-j7@J{IY+Aqlg{_Qdk>|E+RPHZUk@LZUV}^IGn6-b_Kt;a
zkIl2Xx%ihOt>c$zh+rq$WNT~JKEQ$s`t%)7uYNPHw-t9>al7F&3%PS&m4>|GV=Ohv
zc;z1M;viHU^0oiLtXWMbEzykTd?sb;tHZWjITwcml!MI*9{y2Ye
zep_!V=~fP^`S%NVooBnFiNjE1cf}L|N5=JQPC)6j;v}d~Cy;PE4{3L_}O(gWSaaoi*q1|WF
z9=hu1way=C-G0Q-Q#}?uogS`=J{eR}vCX3B<2^oCU(Xw=|1P1$guU2itjW7)dh)mc
zsh?V4*~f@S#_5$^x={Vf`!>Qh8X8ihRSRu3v+%y5eUUtG8b}`2GJ55e+^1{oPP!Pg
zocRhpB+}Euw9Y1XA4`GV$J?Zv%5Mazty5NOMzr0eoIXfdoPX!f`?F0rzw)DAqkmwe
zpA$4|U)grhO|agQWNJ0K=$hb8c)#tDBf7)0=s-0XS^K5`u<1!>ui5Scg1wk-jAqA7
zGWp2G)AwoUq2$2EiNfGK?Fez?&8dgmv68AjPn@gQE0NuLX{U6qbQY8F=u=Q0S`?#v
zbaD?3%P+g-yRPoQA@bpq-g#)+Q6Ml8-Tgt+YBuum?Yoh}P}#3W&g4)ri|^iTQ7rm{
zC@M~1C4<=X`A|b>toKZnXyQU?b!wz8Y)vFM1Legl?`|Wj_O!UQhOl~zCfn_n=K&xy
zP1$>FhnTtx`CzRV(5iMfIqKkCWq^qB+=RKg(&%==!PgGcKB8R;m5hw2+D$2_rDR(w
zJ*SLzV_PR{HGuWHZ6+l3%wZnVH5F{p9|IYS&0Jl%4#~$Y97)4;G35w*y6K~%ym4dC
zyKOs+*JF%uwzbW*jnOzJD_Pp%i90@QTavLy{Cg?9s}@vMD>W`Q^9pvnm${JbiC6#BLMHM?v5K<%)nNnb4s|xkL7Gb9*dE^uzsEGUtjBsqo}KZlVu-V0@h}t
z>@yxF_C8D;&BC??Z)MSwy6)nk0`cOs<8EhNi?F9O=n~PPU8ON7qA}HC7eHREFp8c*
zQ^8;*bZKYT9RKw-#e~W72HAk&^~Y${Uy*I%Fnf`ckwriB_@mtxtqCXO-}ZIWr#+O=
zZ~OPV7IXC`(stS~+9V;5)py!{mj3lBj00s;$`Qb%6_-nr6fe74@!FJE&Fb?JmvmzH
z{fcymlW+*M(QpJur3M;HnOxO4Ie&}xD|oyk-9jim7=*KO)+8DnH~^3C*Oml7oTkb_
zR-Gm@ZJ&?u9Sw;gGfcG{Q?NY=PjB(hj1`Yi+=IRAW*!c!WtS-j>A`PMq#d2+yf_gW
zvrg~B=cL{!Y)D`ThVE23v3k2xL@sZxe{-2P@ou_~7^Rp$An}1un1rue0tp`afjd
zWChf)8od~wJYI74>`13H2RiMk7#6<;fElgH^Zug_Ws-E$+#5d>P`c-&vu01GUbO~M
z6;8Ab73AMKi}Ld6-*K>t-qCrfXaoBXuiV!Th601-0;cp6vGDN6^+$ADeosd=J9`hg
z`|PJu5;m!60Km+7%8TX)_EJs5m!zA3(-p3(#EDmTkSlyG?^X?k#N~!C_7U=POc27U
zy@N|+W~o*Z>)r@k=FnbEehTqxldP7S;aV+dI$W|UL#w2@eXUlywQ7J7SAVZFIX>B7
zTs&WWwdv6cgN;I!DH0PUFV((;$@GrM^l1h=`y3)_dk5OqD!
zo$FrApQ=J$eA(x@(kGAiEh%x8WcnjmadY#bWohiEFk@zsHKe86LsDR(E25MW;Ad3<
zM0nit#{o@#$u^_TuO`ih@X6}egMS0oE}
zaJv_?f|_Ze{`^B(zp%v2i!Cqft_AaWJ$F+x`XGwbZe=K{U^1mv$i<2rarImp4<=eJ
zlK}*&ISrL5uz^O~=%qT?A=GRL3unpnN!_^$Sw~NGAbTt-h9FR+Gh`il`)n7&`xh+w
z!aDbe5)>w4r*JeEIQO_+u010?ej|@ohV!Bcw|0^)0>b_MKWv7)Oi7QcM8KZYtSpMn
zaPb6N5CW}hB|>jV*JK#JG}Z^pNv}IS1!>JukVn=dLx&CIRN}3*-;&jGsA1t!!>TCC
zV%FaoD3BV>!FVjRiWb)6_ev4^oUSx!`?kY!b!hcVa3cvAB!_-I7`}5qTlo*hZW7bUMobHC3C_3eZ8m8W^JwOOCx^@346;$*!&9>hR%xD
zT?+)0y%Oi@y1f6I;sJYupV_&+tEOb4%0$Y_Xo9+LOnVfrUxpby)Kb#5*2vH}R#4jB
zFKK{u)14=>z|)qD0i`Tl!$u9yB8c<>v}L!DsP;i)^nU5SO8
zwSbbCf4klyZhLV3c3HE{ycnSge++nCqj6bmHU$oG2RF?u{2W5s`$SQYZM_lDr||o+
zHh)f?=TE9HPWDv0-df@`&B#~{F3gYY!BTYhzQCV#g?WVoZoN*7q%G!TPMtfASDPwP)M(MR`?CAhnRqr$3!Hrr$W*
zbwQVXbi-ps<$VzISk8gyG^Gts2qvGYpifBWvSLc(e=nV#y|kHXKdq!qeEPPl#@l)t^s2AELZ-bZTeiUGXAdhJ`n2}RYxg80i1q5=PC$BuDva26
zQd94pDnOu}@Cn7mP7lJ6{$aBglqJ)n3Y*b<2#8Q_y>SMi-uTc<{bt#~;)$tc^RYg2
z@oGuv(!~PPx&HQD9Q+>uwu5N`1?s70AG4libcu&zRLE09(4v-F6_5F{6?JVSy3bR2
ziK?~a=h_!P-L98ltM+`ofqmw~1aAC2@Z1=kGY!NX(%fWN!!HgPk64b^*l9KBY9$CH
zWGC~?yJ8>=UQiG>U0|VbvynCtQfNir9@hQ|(=@wY?PDM=-gUFQ#bk&l2FEfvr@LQb
z_*4xE`!LAK9v*=;wLSVYZRN82WO)xezEG%zJK_UzuJ*>>40v8`q@f$1fS5NU2MDQ&
zt(3>&*4n-+K?s!g2AA8f*7|dXsixpVfa}P%!xQ-Tmy$d7?M`$xG9d2`R(53kxc!GBB$8+tDhYhA9jkTp{)C@K_YdKwjUf5znToo^ZEY{vb(
zn({lGC24g{m1i?4O+Xb02cvkjIHIXl*T}q+tkaYuGW1VFshXNYxN+y>cmOs
z`R<~{MD-5|({MMc3*_YYL>zKDWkn$3+;NI+4B6Y&49{d8_6dSj!bL+{x^FVK-3^|S
zf4yo-{m?^;9ztR$FIOssA6i_Z7Y3hm_bu@<#TOo0I(uC>0iOy~q%w`6M&7hsPCI@x
z5PCu$bQQL!I@a$J60xl0$>sHYPSZaeS!g3BRVOajg=hNriZf9N9GjJRv*eYh@fC{)
zt^Qq+eu^Ab`-bDXgouPy{WLvp#y9ObLo%%^-DfPUuXQ!#-4=3nHWl2-txY=`_Tk14RD_9L39q+rxoWy(6iH!SlFH^q$*XXqL^mF(zziI#6o&fkb
z$R|>%#PpZeTPMAqM=R=vRU8@tk{!#^5EjI?)gfI9{1s!E(UYH_b8ouj3M`{2Un1ER
z(s9<=JVR*wMBdTP&(SlLntU`=5M8Lg0Fe(5u9_<@b4SRMuaZ6m+}p}N;XqZtU_gxWr@FqZ3T
z->GibG>iJ%`MF6vsZmAUME|<8{_@gWw`_9en~=`5n{G0}$b6_?Y@VUNt^YBoEpHuC
zQSAK;Ak5mozSnm*sGL&i`nmOq6#NYcZo22Rgv&CCAG`|oD6=hE3M+N;1Q*zTttQt@
z0fqoGHP4)s<|m5gSiWUfvzRc~lS?w>#4|`)tyS-dPvnY*@pXr0U(YHk$f?R#t!@hR
zD!XQuXO$hr{is)GbD3;jb1Oy7`)uj8a-{Lt6B;;$Qc88?2=6sO!{Kw_s#-Iz
zqg8*keO#hE@xK!(nO9NX7PG!t+krhA;085a!mn#L^V&`+P7$wgpIfMg2u|$3kcXC}
z$UFPERSf@FC{b-kj>fJ1{&H20Jn7>&_gHDFg`gM{(+>l|PoQOK#A%AK@|K76i=t7p
ztHky)k!ujC9aHXR!}q8t@vI0P$5_JggSlT7`IEchM4mnpx)lD#&LGe?>H`88-LKffSEf=x*M2GZYZ
z%?8`{eS<#f!k(gz&Ur9SF?(1t4BmZK4N#zH_h+oKstH$^H$i+AMe>^hl+NM5i74$R
zX+HMrVu6Z!H`S-$Skz?d)`i%1>0N905{7AGyRtd}w@UU1MC1yR1FTo2w
zRvqVBbUZYJF2rKL(rZ(J(Sm=26QLlEUPb
zbdZxrdM%q0Q`-e-lE7re00k%$~ONdaf9Q-|e-|jVPo>9lkqA!35Ag86W}=
zZ}E!p4)5?Bklghz4;qeoAw@1YO9QJ11F-)AyAe>T?IuS=1HiH#@ALsTY}pFukv
zk1Eo)7m;TBrN9aeusFvrHYZ;nUS6YdO7+#!o>K`=E4pUhIWTLWw{sbf1^Z2cF7HSU
zQ1n(k4r|n1w`y)YJ4BI^@01%VCNR7Qa&9Wh9fgEV9l_YCV0~Zm+K&Zz8D`tLSm}AS
z?H0zk@BQlyrNHh_(pTI4_m_p%l=!9bk=WQ&@)7d3DA;`m{;|FjPc{a-F&fDopR5l!
zy-e=^^Nzpqg_o1xE>7X9L$fT?f~v!CrzoFZxRP3v2Troj+7wIGPf07xyh2W)?~*+G
z7rYIK<6U2Gq^5}`L`g*>Fd%7pV8MULap{O*&s{xiGTInDaYT-8Jh@6aT~E8MH=TZ9
zVNmQUh&O04CjWAN7yLmBL+#hVTCWIcl=X#4+16|Msglqbe;-u<+5Jtdk{M8l?KfM^
z%1XN46c%nks9o~K6r2?q!4Gdu{nD?cr4*OQoi9F36*Gs
zce~X@Yjw=Pw@Fa-z_#BTj}wY5@yL%=B<
zEwEcv!PZY-zBI1aPf-lN=m7`ZPx<2_L#GjGZ80P6viFx`yebt!+3ZdqfE7!TpG*@I
zhIpKq>34J0sW#D_l%Dk|p|d@vFEm;2(9Nk89x
zl)UuTkw0!36RY=h&RbV@K6q2bUY?MRvSzY|%!5W+NlD@9M$Wl?&v#
zK_$;0&bXEt2_`~gr{;8
zD3_761TO%uO)AYjAiSol?@Cp)?|UUKhGO&D&5^#PsZWR|
zn@KUZ+M+$mpR(M6A!wh-3V(~=vJ!O8>E8E{S80#6MDX3NCa$;_M5bk+z^8SiUo;O>
zFu}11i0lJbUeW~Q5BT6y100Cg)BpUw1^ExeXWoad01I7`5ENLQ&tKo(Wxu-&ctWbP
z1&Er-BFSxGL}e|dEzK^V6+fj>=+69uD!K&bn_TiC6XuDw?TJ6|ItzQ8E2^5k$Xk(=
zQ1B6FsW_8|0b=#=3GY?!khBl90yGV{CoFzq0$VOM2?GSOO=PGv9U5L
zEB6pVarOS7hb8~Qtxlau_#{_=1wu2W6Mx^ot$yy3MJ36mYo8C}N{lW0V}j)7B{65@-Cwly9%%r(KPVjn$+w}_&QFo-aFg5t#P
z9Y4jTq}X547*gQg{vl}f|1Ng*@hx(-Pk^7F-;AY_V9mb|acb=kkep&x91r0!`i+%X
zR{wty$zMDI19vIpN=dNopJ(0ucy2D*=-|PP3e`I$wf`>%|NiHzQ|$ehL5lysx$5S;
z`uZc?im<1qrbZzZN=g=5Kbd%IU6?}fj)nK`3LrvpKXI!HXlm7qf0TKbnF52k_lGya
zsruR=Pz^|HnVP3O?ZM;^tHht_ZshZtxbXY@_zULK
z;Yk(*o4cOIhbldA^@WITBlfgg2l`>C)HA4s9;t)wixy>1;)XDNG1E$wV~F5pTqh>6
zogzXDbH=^bchBet6-BrBFcUXd*XB(9EonfY1FD*7#}rH9UN&e?Q`%qvxy4a{>mjzX
zw7i+r4|?NdJ5MGpgF9|fQbqv-q`#pN(LkTdLPS&%BC18U3w>G>*W3{K5lg;kLGnI<
zYaY5W9bRQszm~qdbi^mrLU)cYUKS+#?#-8=w>|+QX{UtH*d!e;;v#6B#{kw
zqNlN;lZu&vxzm>{aE3RJ(aUW1;bHcVVv34E-R*u?<7tQL8+Y#X_6SUF`5+@ik`3AP
z7Q*wKoD7gcw%4ov(DYNMLIbA#21Y)3w?@BuJ{kTz)1%bW@Z`%yP-T^NuopgH0c1J`
zxT4b)jY~$D;B?g>GU$56j~GDz`XPyL+%7)R?Bhhd=ZmR~)k8*V=`MOwnp)*8>Swh}
zHev!EoQ|$eqh2#=4~VT$Zv5*Pg;Ce}dD~5}ti_reSJaGv*3{2Jt`uhxd;qK}Rbt(n
zKV^{;;8WEcy&vkXxen^Vb;eUx~f>MAIcYWS>rD^J(kJe!U_
z1-x|79sHR#MLz}Zbq(lGt$6-@;EaMqlG{&ZytKWC4cZs=!9QX&2y*?PvLk3#enzgs
z`aPB=yyNAC;-{f80P`3>xd87o`-3kwKmE*>(-G8@M)}Nc$Irs%HNS=!vbM$2HY;Wy
zG_D69xEc9AJ0M!pQS$))gTS_*5pUI%SOrfWt@JxCCbqo2lwUs5Dr=T+
z_DagjF92SNr`EiBnqneSuu`D*lOdWgOXs={&AXV_39*r#q>hA!r*r+LsMC25SYKmk
zdqx(53i{bymcFy2eBg32nNpZ2NafR>@QwC(x#P`{f8j>mP9Ud74cXTwjP
z9%R%c<1J%}GOyIT6A$V}L1xdZPKBVu>aS<}g*@V@KYzaco-FT|@Mf4=JUyosYdM9#k~F_!KsN@5!x&Cn2~Mr@eX8-wSR1n
zy%c^T=euT;$j!6&Lo}^!_f0Gxzt|cd;bWgl)
zHM&hSg5eywpbNJ%}G2_}fIHf?#T6}_TS7ooJz69q8dv+9uw$?(z<#v+aGiD
z+bKI*Y4jtN#@MC2rG=~*FG8Jn;Wq2nCZCM!HH#{Jr)tzU8g~)*h2lY9BLkMmDMk!H
zbZ9SclwEHO2`J`w^%t!j9D->q$S`r8p3{{CyX(vYagn109b#u%r1^7Xw#p@9|y-888=`$!$wvW$-ax73vRG%
z5$x;l8?Dn;a3vt4C%&`Ccgzeo^!;9^=Ro}5>G{Wv+=0uJX9Db!>;w05VT!g{J2A#4
zMStEOx#I*b7bb_wodaoXt{W1zvvZg?@rl|bJM^Y8upt#>QDAs+TZLbwC&
zJ`}rhQgj3g@!z*Er#cWZoQXis6-
z&bw*#t(x72dc2(Y_ST05(USX@a%@+%x`7Rh7odoW_UT&Ym4Nk+>i?<(U~WiUX;w*v
zG5VI(gY}Dsuoaa6DOn>25u~?!2k+o3aBy~G;{ZPzocqMP(R!Fjym9`KvHVINC#VsX
zV&xi&{q#!RuD4FGZpxRkc+^tK7~$~5n0NI3kucD!LJR9?FtZ6CF>|E5?+_x#r#YBP
z>cP*kR}{kQC>oRzD<;#r0~|^=u3Bf
zhr93hbd=`p$f`oQaHD5u6CpG5+H@{vNQW?5t7a8&llJ1+4M3^Q5u4#!z1#^`NNfn|
zdGA;xY`TKRSbgf4Eikfles}{`VfY1q1?LR3?tL*#)Fc==8~-NE&_U)*^6(uu5x%mj
zFz?3s^+tt*pB7bGuk54c92bFQKK{|l=IwPh>lg{Cso}~ED!$yj%{k^@I~UE!iWiZJ
z=j<rOOh}QS%%P1N(_xG=VHP>~nbDis)_xgP8t9#;W@BPZdSlrKB
z!@+Uj^U+i#??R95(e}RZNbh>X>BfG7Gqy)L)W>s9Ypo`mzuj)SQX7kh@(^;g+Sw8I
z_8IgnO^R~Jg0I@w1f1C9xgq9ZXK4Gcxvn)sibti-w7Me+*<6%(-2Vjs{h`#Q=OfP-
zwT9LMu1L$upt%)7$w+i$<$_@5Xv>U$XDuoFx!pi)Cl=W+Pq3da*O^%_wXbl>O1>@idN!xY(DFdBPjw4-S#M2U9wl+
zD7c(j6Pb2J!_#rp@}6O1SCxnJjQw=9qNCQmluo~^->V1i*GEz1A7!IvYkqLoa6?yT
zJCzH}&l|BlY6KT91Q7^gJuS$6UKqg=5PZ6#+!
z!he9Dkt+E-UF$gRE727XoCC&R+|%{+iQXkgZSUJedCX}u*y8-wA0;zhIf{_9%n(F^
z8dU**@cm0FI~V1<;*;B;?c#zMj$KfYnZy0yKJ4uoGqV=~KLK9W1?fe{Zm6IZi!*`vrtaYIcei`cs^G~?(!txE3Sv6dNb
zIt*Ipy11{^1&WNup{Y}Qd%2m8fK8%s7e_rtF2ckD`c!Qx6k8uY0QCAh?w
zUxj9`-trXbq8cjT8lv86T)AaGkiOfG$DUU&WgTWHduizTYMguW>12(^72EMVr=<&$u{MUS+~vktQj6-Nqxu^bxV6i`LqTH8E
zENG$UG*>>-RprKcj*Ot04qxlwa;s_8t#`>=Z4b$s6-`v4*cIEMuS-%60U>y(_|;B@
z67&O!G)=cE)RNY)!AjgkEhtWwb@!PE+Ndo3{y;~tV;@tPKz?uC>q&dBS%W%*ZpwVx
z7k$i;5}JeB33%mw2dN<%LSA@2dC`;N2Ocu2D`>{AGhj(d^aUE10#CE|c0&lx*x-M-
zV*Gma90!6hSG1-!YE$)K?UbKT(gOE>WMA!fSBisqI$$0)6U7v!fOPLH~TtPLK;ve
zJf6Wdtq3vHJ@Q?d+l~`N3mFH+p_N<8p^hjabT%Zc?fvlBsF+~CtjsrHOpMgYS`rLm
zeY<}}Vm)uj$&6HwA_V=Wy2U)~pSD!?HTmK~_!jS|Mg1YJ2$|Hr5%U(5y=e`MH&}ht
z*T*I{@0%MZmWsmavGD7O2C|m@_$6pjeT4L4O%Ux2;kYI-Loa#iqT~I{i1k_x8C!?3
z=kb117oGh?RT-5{u&$*{><|+jZudzUbBL4P-km)E3b_N20O)P{K3bR2f!sKW<;gN<@YmuYF#go6kxTV*!g&O@!&3
zFUi`Grcq3>Llc^z4n@Y3fRW9aA@#1t5(&R(+=x`Y3hmL|`$gngN0S8wlRLDQwXG47h!30^8R&G-J;{fZz~S+
z0|r4gqwVj6emQKvL0}{Fg$c7O3G`Vic0wTv?SWK739eq8d{JSOnrZp_QPF1C%4Ss>
z{a_3tB2~7QzE}DMqOrsz(6P9|jrQg&77-*&zU-Dyf3K=xb;Y;Dax)YA?gb*7W%p^l
z^6^z)#T_p<$l}*v$No7_f=e@LAXxPNwRxgk`4ufu1z+pI
zOU0gmIO<)jt*tVIl7~E|l6E!XeLRzVx4{D?1Nzf^GHA~cZnBnw#SP;$VME`5!4z!d?0rYAA7KuBzB
zTlX;yN*G&r#wa1zxm0e#3|RUhCa*f#5T&$D0K*G^%JCRa8I3ogWwnB0rqUKs2Q1t6
zTFW_sH{Be#?R2y>bq7Bfj#+X;H(eo52RDCnfj&s3FncD~mo!v{UCFO&y4!!$9P*st
zMxOI{H`HvoF_f4Yi?ZrJXvb|SNpV5k055qkA!r(k4kEkA*kAt4{i5k^k$vVUHBN}_
z71OV3Z+|;1&K}oc0173kU%X{}yC18R-)m>ak_|%qunS9LRjnzOS#zoOW1}Cy_YF+p
z1a)3(@7v~H;#uv&)5D9&;O&3a-%v(-K)eG!2>Md)I5uJ)M1^n24dFYnk!%F$BvOt+
zKr$TOG?v_Dx)6wc6Q>E}>S5*eSvRf|Cj_HHOQwwFf=ZyXL~@`_3hn?2`sG?Zwra-I
zFBdTewJtlaHaGwih0IM(57R2z%J1AVnOz4afJY%zwB}2{PIg-P%@+)P4scPsiKH&nZOE
zn={tK=9he3s02EnbLtQm8e1(~agD4QF%6NqB#Y^*J|^?sd0zegl4k$13@EGcLtB05
z-7*}A4{B4Q*t}_Mxu{k4jUB;k5>uwL>#@*;nz2;_
zSx-lNC+ltuN)+1}o6T#tI){H=nLAEy!0|oXkJ#+$=CuqN8pvp*3{-K*@I#
zb2joNaZ{;aPjktm#UTB7n$5zVK&n>#*@yV@t>F91ai1s-cGI)-^zVad!x6kvLw%n@
zhZ1?aF)DuQ{rK>415l-ld6Q4EX{sno@w#4I*}nh6e^w0_*yQ5|UkBy5`+uS9`bar^
z%1bNvYFC}vPyh$@$CdrfZuOL%DVyzQ=<=&llY=Zz-^$T(S=qArr>UzHN1Mv~#Z!m;
zeKuu^pBFa{ax2SXoT(~RV)WeVAM2(L>!ph}@0tr9i4=LHHhNV$LLaqN
zpX05b*mBxfvcJ;dSS%zg*w7+8Gc~e^DDY+RxsnsysP<#iys6tdd;}MDDjdI1#2M-O
z!UfQ7u2u}D;)|~C;u2S5jW5}BFVwn52#fUQArE0nrpldNt4^+jdXlFlo{y}2%^i-N
z7W181_=1J?*cnQw)bv#&9WqvJhFdop9GFCpl*P1b{;1A~#*!jqd-J*VrtErb@sdC$
zV+5zXO7iy&Ae&=@bl-~x3q1pyg>qOtiXHI5ILbS(^I=drR0Pw(&67=U3wu-*)Pmwy
z8L3sdMK1JwKK#yBZ+!k%wD)@_b6_5b#dxwf4{bGbgOe1Ey|1Le2VbB6cer;vn(uOm3R
zdtyuduub=7Z){(?L%{7P5j*z`+#rQy{))b48>=LrFJE+fcPf@^YR{}ttry`d<)x)p
zSEz;^wM2l5bC(a)xbK8w(}*i{m+Lda$PI=98lG_EeGrZwg(J8*+_Tr
zT1t+(kjv!#6M@G`2uYBDY&M2ExP_$B(-k|g42b9E39_W-^H_8%jk?^`uMGca!rIr*LD8=Rb)nXWyshhBT%3kz$6ntn&`elsZD&67rSKtn2NwtikI
ztrqDbbL$OeVJEy(uT4adM=L%+nbpZ2Tcd+3eb}o}GUOS&)k18ote*4|VUNG)#tkc+
z5+|Iueh_1jO$jLyoCmq{$KlWZ8UoR+sMYd2e*R?3ra@>-2{)fLCD+9IpR%s**uY4%
zh>^LKu}r8aFFB-nnaIN7nj@y@`y;X(*4xe*Iwt9sfkk7s^mpcNn#-fprqCkp5eDlG
zsNbzR)=MR12TVsxS*oxNxJoG;YfhPd*T}0@lsj&HG+&kVIGV_K8#?r6TNLVl;x;Fa
z8ud4hntxvAQgzcS*^B;d?^doW37iibeG#@ebQ`-Tk(_K($=^{tDvg0`kGiC);Q*`bp1sL=r$C)^OH`LI
zTucW~$$4b46$x6~w=TLJIzt^92=z!A>XT3zs@@hYw_}43Y8TP{Z^V1Ipr7-dumVxX
z#W$Z)Gabc|;ewZ6=a-I{xsm<;D5H+R7_(62vd&{<>>a76#^Cl>|K5Ef&j!ggUu?hq
zjZZd8&z9h*)D_ro3$k9=DPUM|7o0~9Seb`CY=A-&P?=eNaV%6-212#KxDhbuqx;aIhaZMUuicT41UudkH=zj!+#&27L?B6jH|sE5+A}X}z<3?nuAr
z{@8M?dp8~0=qTpP3N;DSYMH<1?FYlwZg+KWGZ8chxrwPqlC`2h<3JuJ5-Bc-8DoAm}-
zjfVmvpCebnaLpXYx14&z{-8q*ce`X9WQH&>kQoZ$WQMW^!0#Qqc}R~k
zDG+>T0K_J9QyI;+aQsbCC96yJ2lny&@OlNl)JnepYq|cUz>JKHzX?&4-`{v0X9Xn%
z8m3;X0_Ea^i0di;$v7qj78Mn73S!Jc|68_TaY;ji0;sYcpy!pBvImqy-TFT>^Vh|c
zBi4QAN9$|gY{nq=?iX%{*gdOg}d?&
zTlx@{p(8`KuJEaKcLUC!CjRrMT^JW{Zv=g;IkWQkE;HanfVI187wm?)x%sT?E>Q9I
ze{FL9i|T$HelDo}Fl!<1a0tNF3}aMA-4Zpov)Brd@~N4b7mMKjkM;i!<8k<1kf>Gm
zUa?Z!T;o~bFn<5?k_{L?+f0YCwZR*aV5mc!lsxe|piBC;e*PXX7|j(2Y+FUe6j~8K
z9RNdgv-ny@Dg!LNq%k@sUE-Mvu<*}=6QtKCYEYGx@@oe`+FnT31p?Tq=ATcI$~<$U
zNY&MWHxj|6uU`cZU;3ojB=hL%O%(^{0ERIZkScqukZBH=lC3ttkx~6$6!lKf86_z6T9hyROQAeVu(LN_Fk!%l6A?(Cr^dPEEBbOXvr~WO0&m
z#OvRmBlt8{YCSw{yY+u;ZgQ=U@}T*PZ8*2XXy3m53bwF?VgF8QlLUO}#%1ZumODqa
z!Eth30F2sf?^)5}ZH7cU8K7!!SQ?_v8m5tN16L;%@Jc^nqM5OF1P~9rE
zTxjOYbZ`h){rmev|NA|1By!yvvlcp79?c)Y4V=lz9lZ>KLc@&AW_4w3vjBhlauG_5@s3!Sh(
zx>IaXiFl%C;SIQ_>$s?#BfmGTY@Oh5mHam^fIEPHc_v_2e=KrdKb<*cn@xA!&^-3r
z-vuB)`9mv{t<3&x2E<`6&&*>~#%lD89savR(9ZntPH^Tr?tUlva}yO%rlCHAC_ZDQ
zYvjH@)F%e+)+2GWz?;am03Yzb!N2R-H`8P5e92hZHMw1+3!r&{Fb8Ydxi%|tbZ3#2
zsKtx5`jrakf3G*4Xn}VCJQBYfEj=u6z1Ih!HI&@)8sKoTL5=EW>2n+e@z3WCt{b!N
zJVF<%H6j9a5{-;tFA%i25I`SPcAL0I9cl9LnKl1p6VIzN6a2Yl)&;~R|5J3SX+dI
z_4UU1g$B{3a=RDd%}Xj<-&BKX_xnq_t3lo8S&aBwXW=)QnV$W{-N7>(zolFsOm7Ur
zYrJbrM?H$=ypRzQ{XY%DWhoKsFkHOaHsj8hKud2n#*bALfBf2rGT5n8mo0VXpP==*89KCsIG381CK3J_zxEKympl+}JFnvVy6zDm
z35~OcyyjH^RGx+B2OWI65iY&-Ir0_XZ#_p@<$OyR(;NkjId`mtzhwdT3IxLGr+|{ebk~dMYW@Cr
zYg?tdFHHC<{KgXpKoL-NgO3-fz|%4eKAHBw5S6+Vg{%i1^+!ttQJfvYXAp0QdHyu{
z{95?-7nQr0UV!Fd60cAzD8O>qS&FRf@5X-)Js}?2H@t|oH8VRB9vu9B(RA;Np($I6
zfEVR_owZpuGWF+(mhx4puFh=O!wJO9zV|Pd`@*ekPrWL?h2n`>XxXIXo;Go0tks}z
zjtZ&xj^0DJY~saMW(p)VDiktdnijf4nIySD*${PfVB$aRtevP?2;G5ueQpmc^7DT~hum5%-)P?X)BW_c<_lXs
z^|eBlt^x9pi2CRTV~*`HwiRO|^powxngaOfUwGSn_UkTlL*alCGo186a^u?e{v!AH
zSg98H{n0uS2`{G-j{}@S0yLFC&c
zpv%yZ>rlc0fj`-Epv5BY1|~9A>P`jd(UN*Dhd+5yA3mF00*%nqn@#TZxOaafLPC)N
zty-{kFjoBncRqYQBW+EXt&=MWFJVB-Obwz?oe
zL*s0FEQbepzdI*0IK4#P_(?lBgK~QwWe0r{RQB$uHCQ#zY$XD^>q3ex6&tk!Uyzr#
z@Mc-3XZR9Sp|)J_$~UyMTA3RzQa8(M+)c0c-|x-z}6X)gR@Mf4x0GnaY{$(l0#Gm6F4&r|g
zI?$=b82^*$-?GsRqKEf1^~=thme2GYL|-yYu>#*%#!jVq&AVp?*7FmDikkYMnHM=1
zus}cn7R?6Tzk9Nskk%#+;S2IcQja0y!v2OoSVr;?s*Q
z`lNhP3Cqd*1JokTi^lWvX34yD;T+5Sac@=7#z&OueOh!sW*aI|A=YyW8wm3-FT7{LWl_k*nfojI7H5Y+f(k2DB3)
z$-=(&_6uRRVd==XKG_0X2VZqJE<+rvgLP+~Y9VE*J@!RMJ^&qvw-D%@6xc2Y
z-g7S#Pv3%{JO_}wN^^$M%XBj~31RJC$da<4#VOAgO^j%{hEJj1y*NBxG+3TTkQ;p^
zWkjka&dj##XezCW`R5^LmL^Y{9)lhgt<8aNW9l4lA+0xnd`5CL40#>4a1~xvg|m5v
z;C>_!T})&6IMA-B&SL)!-w6k}W`2mED57KIgFl7t2U`4D`~2pZN;5O2VV@dG~B+n{;UQ`*VrOnkqcxUlj;u7=
zOR^fgZTIkkS++)m%WQ_Ep+`D$5OwN|S5m`+-+eujlKrp3dxR>!zq|1dqsYPe2_y+1
zvF&7QiNe0pd)}9!n@Q|r*NGi-t%f3n!Pg+<_t%0dmTs5t$)z2(Xa@WHx1&Bepa*t8
z--+blxE5s5ZYxEv_Y%$fVl)wv+g_X@?Z-FSJ^il!n;3V&wM1ofOHReCe9jFL8HtYw
zi$vZqLcdq?ckWdnCSoUnfQTC50%rBWh`n$loCbMN%oZ$;-FIAdV%GBRC05H8`>H3q
z%Ru@FG0@V7wzF&>8lQ=M{UhSgw~E6QWPEJg~9ex->jawwcy
z`%YXp)XvfyN`&nx1l^kVEzP+nY8T&J8-A@vHUYEce4?4fh={Uu2XX=3A_sT!+7e#=*|=vgp3&NB*RI=3ZDDQS
zV)cJOiUE(IvuM)4>cSs4x#l?px$i9+`*$Roc&INv+VZ8s&M!ePuTQashdr?
zwu}2|yHL%o-oIFlOA(6GO{J#BTvy(JzHPFA%|99k`|oJcZduCGQ)OM}u>1OV89}^9
z0EjSTI7LP8ky9aUpgENIHr^@*apiv3N_K*@mzQOveM6LdS)Zam@N7b#g@Q)r6@9jq
zkEOGSh+>lUk&=N9gb+ZvZXrbrLau#SwkQ9|m~jz$$TGjMaPmq>G@HH5FS+ep1S|I5
zfACXTszXdWca%W-&g9Ftr!}z+Z@G<$`8d*bm+>k+2Tu_@b8+_0jWnmoX3-u3EaFI2XNS9k~xT
zQruZ3r!s6ERoLLQ-D+V{V{i~&QF$k2$`2hY
zhBT@!pi@{ENTsVHy{@c)KkH?a0JsBRPA-|`wkJw!_C@A}Z8zM?y)LVzWC}SuH`rml
z>V&_vHM7Lpy|-X7cSLhBu^`u~Gq*wdrGOLd+S->G{PmZf^MU~MD(88u{S
zZ(<|6`T2%gS(qhGjExsNGWgSt`|6CGodC?WN3$$X%ZqS_(O)K)A#mL$yD&$G9qJSQ
zDp)ERaMMtFrdsn8=>!AR4gO}LtL^hr9=;Zj5}`NN8yCb>T%uOt)Q=WLbREk5+2aD<
znlQ43C)w8ag!bTMyX?qK`kwrXXNX<{_JB{1j@bMfehO}nWE7?@07)714dGqa@BaNP
z0jlcxi*#mE`6s_E@d6<`Z5?@IOSmP|_)3$mC)mcAdsidM9Zqfk>HqmrNJ{Y`7z%5B2=3IyV@+^RuR$I1>2v_3+U_
zxBLlSOTqO*e;_jze2@F7rq|HLic<#UPr`K7%|$8h8m05eR8=#LwQv1?d3L0_-)|r7
z73oZj7U%k`&DFfs9GdGdxp+&vmAKrej--z1k2_w~NOOqZ*Q`jLPs1Q<*Mb`XqZwZE
z8w8%}H+Uh9HMuk%?v_C@DE=2<3harwjr4SV*vWfs%d37aUD!WuAHX#7$}!|r@BZ?l
zUN`@D?3M&>onF#kmeY(6NbpIf?w$UTF%z=?$USkALsaJo4BxK6c6J-Q7SI%84K!?G
zVweg9w8YR&IfiS~Jw$dObMvxm!KJdnh`S_@VxjH*JDa61!FPZH@CmUavv3o%t*pn>
zwH9O&99y$kAl6U2n~oG}<+yT?oZY)#fsznlfP=>P=-Sh~EoZ2S4u}56ulj$}>iD~>
zxp;(Mh$lM%+hsS`QAkXY;qYk@JLfPj@5LfFNqC#Zo6@{w>Nn&@Deb}<(=Hf3J&!3OpFA4L9g)9+ida2;*lBLWwC
zUILRRq`2qOEH;mAC|gX#JaLtwuS{Y6eVlkd77o}nJW?7-J0nth8)fW%>mJMEBYm*D
zxFOTba1ps$1m)QI+_j?ug-DM;v+zq8Wi>#%+3Qc(uWDpHKVv7WUuN;3n9%g}&~ZkG
z&(h74hm6RP{fUlT@4w38sE+vff3md94aW^HwOr~^wJ8D^G-tO7l|Foe;S}nq4j;F^
zYXTE0s;X=S&*dJ;R~nm)nZ;}GC538vLAbbBSQC_w8*PU@Nk!2;U9S-+JF9zk{nti%
z$BD%l669D3kD}0b8N4DUPhPnCm|*I7`2GO_wzfI{a198%R8vDx51CTLw2mXT%DvR=
z3SxHJKGdomKL+;0=o7*6s2SHs8fHn-d!xi@5en!#%KC&{eIh*C)zE?KETlI@S{oRt
zvDT#mrn~YrgWVagXepOcMr*?iL7c|R`486tTEg{zjmpCY8eHohRFM_zKD9X5JBM|4
z`gx_j{BBvi*<~BXLxAr^JOtFD0nx~l+&9Mc3(iTfOk6+3?W=!<85K}O1C=!PX+4Vl
z`NyOHpFb~q1E7-Pn5+2hVl{W{RU03I{(R6_Q_K^lfviNb7XFB7?dZgbA=>rl2#3($
zPTD`sL(eetzxk7U6h`rI&`mw!N`$_kPBtIioOIsb5Vfh#__Pm;1l`&2Z5pFJJRUG_
zMrtzxWOqO(TjS0LDR)0tkXG|{f;9k%tWatJ8yg4WX6J~yug45s;cREBd~FkH0snNK
zgptSCuMRBw>;VD8|3n1=gX-76--@=a_x9)unEf-SRRb~X0w;g+>~^w4);~oaw9sg0
zSVlMyIw5r!NZCXZZWN`as%jrT{Y_!ur?i+a|vi(s)fzLn+OKvhXr)*2Q%M6=-j)PYaTV?9e41Q99M3%$9NtIb*|PXK&523-nI
zD7BuKn+RV7Xu8dP`LzB=Iw>~8Oq}Rx=8r`DY|pwSESn4S@O$-jxV21qdHBh}NN3wt
zE4X*X?mx$z6Lvi&o-)#nuMKBFX8w`0tK3D@ef11+?3YCpX2DYCjh$i#W}ji~+C#L!
z(A=+cPDy#DDf;Q}%h@N2Y5ypHD_W7}LNxeZJ0BA&lA%6OJ2@w+A_Cp3x*5+}8>Aes!#@9WAn#^m
z_feGVAnlD;y2x4pt>B8JWFWOed-j^3^1g#Bhwr6}(CeR?@wm2Vnv$xmmbAv_ukYC8
z_G>%HRXAb%b8~;28P1;i0EIn6Sd1N0Tvu4pWALpgU@j6>R{eJfa(V1WxiaF4rRh2I
z)F_Dva^l+1!&x2!v3B+Vx?!Z08B?|14NOxc-=BvqYkPMU0)b6PmVM2A`=mM!X7j*41v17bcWrhs6c^IW3o``pAFY5A#x6?~
z-JL7Ffv7cGy4_+T$E@xTmzDU5SP3VEU!7Xxx$DROUKlo;
z2sEbTBXX&X8xsG^q!=c*>lEyOrTOHKtZOx=jVLuzc*AQ?8cz3ugX-CH9F=j0Xedu&
z>cHP_8tbGXZP?dc`P-~I-?q9rzd7mc(ke474~x(%j<8<=VqZePHOGqx7bfW}OU<2X
z_a9Sb+Mfiti=$mtxID8%Gsvwnf=y<9{^ShBFozrD1mJc)xDPb%0!+yuR$}H61wxa4
z0&C9UUwH8Z1#scda_(=!jUA*SfsP<};=vC#RPBKxBm_*zXJFe;H~wf($W31h$s2eM
zV!!C6N8+UbP-0WKyCJ$SqQ4VI;a_Fwa$8;rU09|YS}|aWaJjvSY3s?tu8{0>FT6VX>oeS5GeD=-3751+Y
z8+NDaSE}T$Q(?~#rOBysu6~ZVeJu-ur9R-$c=}IN)g^{)-hqicYt8w2=B?ms>G;&?x5e;7ehRdgfnGV^m+TzP_0(7uEtu!
zkQH+o>Wo35lIIzh^K&@*k>b?;Rix6dtZP6{gU6wk`J>s_g`7)OSOfV2*hJwkm;NUQ
zECnwjlo%_5G8CIJX5bB3L3YE;;LUv=9xVdj%$qR|QR@l#i3$~A?h6A}67&I^
z{y|erhcDJL-wioU&*G_gea)X%6H*;?==K-oqRD30tG3y0$O_0+iv8g#7yl$fHs+Av
z9%gguHkEz+^0R?c$&uu@V~&zgQy_}Q;!{5vk#vy+!aYvjE-<4q9yerz{I`x+%8bUY
zJ3AmL3+$i_c_lAGpQ)C=#P7mLfa1m{!s+oFqcaEtsf#4AMHO15EnQHzutOf5A&Fe<
z3;L^>_uDGbg?&ubt-lG8YtS;)sAX92RZ8^mD`5j>GnOe(3=!>ptV0{Qp7z405ZV&y
zJBesGS&TFt$hb072VaoBXicbl%BLnh0j>t-W4G4Uf+$h(K+J1IPt#P%GlX@k72`x?
zk6TrXdfZyw%?nOzjtQKxXxO<{u-l{bsE3IL{Yw@*Vrn5HC>&KdC@d}UO^d%)4YS#P
zRT)o?Y!i^(4^Lk1iin5jqMct{O3C50wiSrF3WepeLqVheBE$3
z@3yQXeA>4~a~wJ;)a7#ylr~#Q{7ri6
z9oga1vFu8q_t4qd8N_Lgign*A+I(}VZ>2`?mAxlA8;pz0{8@F2qZEOMfT(Ird
z>uR948Qy}THXH$H$~3f{N21nd)6!OP^#RKQ{{r3vmNLkOHY?ur=|R&4ROsl;;!Ltj
z&7LkGID9O~u}`>^#-rYcUGvee-)SYDqHuFkcSuf)=HKL}s<$_>HfBkYIB_NG#=-1D
zy#};xLzCvn_va>dVDrCZSNW}?@pl(nNIDFo)keI@G)BF0gXH4bmdA`9eki2+l*PHx
ziaQ+_KHbV0TbjpUUm)IhcjIU8M5+H;ewm2s0*cOfl=3MfR4MJS<zh(@{b)FxvxOy`PW79>w9ex60Kgrt(;&<
z&jk|7+#jUoSV$dPYTiQ-Bt&w;-%#C?0&Wlrc)=##YpYfj{lGjPQw?U00G)`h>HVlq
zu-81Aw8DI$4j!48
zj&;@PU<(&VQVRHFK^4OOlYi$8allgPE+acs>z9$#%A_?o0bhb7*wmP-l&XZ{*7@nx
zF<5t-;6~z2sf!>D4iJ!-zgcYe=v48YA^vVha0vPWAJK1+>)4qi6sjB2;OXRNhs5y%
zmh%96-TMb)dbUOr;|vjqVhE~6wt{*&N(2R}>jp3P9vqOjZbxEs;Zy3$A&>dX1hSC2
zW2~;rOC?Wqd_nR;(9JUGQ#LRR8IL$Zs<+PElKg&Um-Ut#&3?vtdSOQ9&4`}{;9;&g
zC$PX*7Lm2DBo3o-6XJ|ymzuwwzKnB(S6%bpZY?Fu4<-ff#30r(IF%Vnoa#>Eb@1Rt
zKvV8=Nf5}=*QKo+CT&}&!REwQ&sa%a1m*?VQdhT=}uG!(of
z?kZyVSF}f^0lSyMnr2;>dcdusc*M5cqj2D5CeD{vBY&N<>=~}WqGLP4cQ!S;WS~+w
zN>~dg)WMM`jI=-IlZha>(MIce7SboX4?HTry3|@$J|&f#p{GR6Nghu)AZ`e9Cj0KL
z@<1*Ht#^V{s1)YM%@0;>UnM|NAIJh`adb4@yU0~iS>8d@U8dn;`nbhrxK13^#@zrbtKT42elzcc_sb2IYuUJ&=rErF%`UE#PHEAQ{Bnu
zP`rvh-1_Vp^$g*XL^GfN1VluCY`_qHE%Uo^q%4W-@=aq?)UP+ZzUwM-@75xqAkZuZ
zf|35G9{d3s)w7rRkEzz9%fQ##?+mA-@Z?txgsGYKjhHy8WN-?MdDwnkEU+Qr-EoCa
zn@&9`M&e@-i&Kkyn&XWWJljul!{FsTubqaeb=IR?AI@WH_~RMcKOSs6d65&Gh61sW
z<})^RrE(F`wT0r!Tf$T`oBok%SmsjgR=Is+*QKUf?H^MWHe38sCa7Bad^!lAifP<;
zYGswQ0+DXVt1O#^8P18_@Pt#Ukq5joh2@!lFP9VzII13mu9%mlZ?Jxse8NlJ0N;bQ
zgA?taIiRG@uX)092N87@lsJ^ot-;c8NP{$6XKQf>Q4Y2%M1W1&b*PW$PN@n3tN_TYC1Ve`MN_0`IY6>GY0o
zqesI(qt{fGu6FMH`KMl*>#Jnc3I5eHuB(C5^=Z0~nruO#mQ#lwFV&T1nT|9hQ6I6|
z(i5*uz2>3#sU8bMO0C~_4fr?$
zdXUU?t*B(NfHj2qpu75biNhS^u}llJ+Wc)Q-c{)91QriV$c%hax~CoKYG+j|!U!wJ
z>woVwUTC&llJLxezp6QTx8=qEZ?dd#n1rBXM}5L+Z!g=}{TbVDyeIp}IWX9JK&tp|
zqJ_j7L+{wV6Q#gP5|kCrF5J{;p*8WKv1bjV=+b$}(NXn?t?$BjP3F-%SI5p7Wo13M
zGub;oaL0xvd8pJBxOMF}c~qZTvx*`{n;za1yF488-AFy
zeaMpGuyu)Ii_?5B!H5y@5v`ka<#Q-rjTE}~`(gLIuvJdPr4TQ3
z3YjaXV^SJc+WZ?$gT-MxaxJt4H8`ivjL7@fDkxGg6694pTIO-DJT(C#i?GSoKK~2>
ze3i7tbKzmWN%B_KfGt-_>H+?Z=gD*Fd4NywojV*ZUJRD+#XQZK>83%^zrw=bTj
zZ$chemdm$Ub<{vhgy~>YQ&W%R(+qVFq*%~a#*>79k<8=85HkGt6mAbnM{H@5e)#TY
ztaZruslojY?MM(}=m0JX{bfPH{$}QB6Ky;*K3=dPWMK>DBpXV|RS7q=MH5vqd3mSS
zN`J1MohU=M%(HZFl*?P~u67mPjlAFK*shW2(lb9OZOu7}V0-^_93QrXwLYAo@LlVF
zt&XxQN&+E8sU5t#Xb7ve{=Oj@^??hK@Ao0WN9$gj&Kx{n@_`W`#=
z?jgYDRqABRwgxmNzqi~dvLhH3{J=rjVNOz`RS$O;P{WaOX`5xR-)nO<6FCy7
z#sO%{Apy?HQTpbw9nOB`o91w<{bZD0p1UrfbGAfL3KEyL!iugN!flzo^S0L?^?A?i
zf3Je3xu;7rSLF1giluow3I{eK$yM8${$qPMxs5$^M;H1MV4glBgc**T&a{lJ13~cuiSz?(q*nz(7vO;#Z
zEF6F6auZ(8b%H%s2JBVA<=V|!=e$jG842FNV{^}JaC2{Nw9L(Zw%&*G
zS6(uX01jI~_Jekd+*YfD3cE=2{`e&$ts%`zBP#gK^$6DFzdNt5HY2S?+lZ(3njsQB
zc|QtvHzA@NG%n3nop!L@q2;UZyX${;)UBIxoE*`=NfZNEx->TrvHC(^ZGMVF`-P?hU=po~
z$NHB7AiN0vvQsEo(uls4cx3+}G?++TDW=FN>2Hs`&G@o+=~a8oD|3V(_ZZI^18GSH)>@n@ZX*HgGi`O-jluVBoHpZBm~z-BpG%|rl{y!HwBOO2w&G`
zu92$fp!N|*@)^*3bcuo`ZvHrCdVV_~PI*zdw0D;9Bk_IIgfDA*b%q3j`*%QYJ-88P
z9@W$!eQ)&7?Zvcw=1LJw8M&Qgs>PZ}Ctv!1cQ@->=_2=j<|76DwTghZpt{NCxIYhf
zkVOw3fKo!gbYV>~#uZhc0jHTWbPcsX@;gEb);_?z%J1poH9T!p0`Vr!ddV7+6clro
zjo_1bhKUZ#`{$9+$I>aqy$y8XkWLtmYfM?7TISFi4|2ks+WPl6F0yr!@X9Dl{OSV7
z!}hK%|J3eA$=xRIOq;joh!5gXNRE}^0})-%R7q+54$3L2W8zY+xa|e}pu-I$Ab{Q+
zF&xrFFct)oJVDK?E|VYsHB&D-VleKnSrq6z67O&?Jx_#D;8O+
zdNm+uOI^sx(`9Db0!v5GdHQ%E>1``NmsIkNquGTl2Gl`}bovwC&iyyX@wNaS2<8oU
zAR;QiNb`Aj^KwTzp+@;RLLsa}k=1@w>Ka;h#r@3%u1beXktpWf7(~AI$Hj={SMSiS
zP#nWuFgw=}?2%~)QWbrjZ)j4nt-#_{+_Ren!Uj$?>{oO*9GixS5
z>MK?HYOjUNC>Kwfo&958llgog%|OSIj#T5eYqQDW3~;>1*3$v~^nWH5s99{dX)JqM
z(ijc7@R0Z&q7EW$y0YIU=&`5tFW6b67k#R|+erq;G0bAat>FF>ldGh_Te3$a&F>ru
zRz;M81PvuHFi@vEM-|vQf*8f-Y1JLWfk|1e=mw$_>u&ib5(RvRY(3-m`)MrsG00do
zik$M&wM-MR#}yQ=(5s|!Hk=c*=Tpf`Fx&|ZIX7ffy0ogMvfqgM2b=fF2A{IWO4gdV
zTOg2h8iP-y8@rL#A~EADT65a(%I}`)-n1C){ksi|gUdyMaqYBPergNU#u^PrA}rF>
zA@mA1rdkSB6a#8(9)cAYB-YCYRE2+)Vh=BaeuMY
z+znai-(3l+qfYfO%_NGrPn_-zw3Sckm=Zz=6c$(K5+5)w8wpZCC34Ar+RDHBh_f}!
z)&A14$W?1cz`DT)funS@%UvA?WNAR9c0gl)xK$iS_nR>fs+4*8U2{U6VrQZ;#QA2)?4=bFS%
zdH`zG^ZC2S;4CTPj5o;w)Dmb*IdbpzaR4)aLLF2ppEjw1AWZAM((cfdAlcqGC-oDJ
zi)&AkcJ4HdhpW?kIFed*x0~Sq=z&}ZEy#==yDtOH5yE1I5YrAtuAV4VeDK<#e2(;P
ze+mMur;SXlD7PD{NEmZKE&d|Mw!j2FLwstpN@QM$1QCEqn&(K_eu>DA=4#2UO-Nw6
zG{|+~Boj2xE(a9dLPstNS0HLZ880qz)oP(&9L6bU6S;FK736n@i_%p(k%
z?T^2nwZva*&)O4YiQj`_C-lqyHG=|T1-0_>+RL9H7!|u+ygl31IE#Fl$Y(*5vmgMh
z^LvqE$Tm?0n#4c0@+9}%SErDMTDvrM$?4ZN2+W%s&uBKTV7S;S$E7;0o{%Gm1hqL|
z92ZvjIq?N}v44~xTLCwAXBfCmfx1lu@w6Pt4S8$B_BbLH8Tq8}l4~S`5eg;Iz7=Hi
z7k`x~4i|Wj^PzsJXqrw<@BWa?mVj?v%hZVQ`6_u)0`vKW
z5V{)qa(iyZ^6yTW_zG%?f7A?IRZfxd>)ztfc#~_S@88yhZei5+lElv9dVATV=N|=5
zT`H5a{2_Tj6^Zd_r$$cobJq5YcrBCJe?TxFd8@yFwl2*%%>DD+O=)Lli6)$ALH?+=riu|zr-p{_g;h)lU{&h6}BVF_Upju%-LI`u(a
z@$#tsN5yKZAALKoXs`xre}Q-vix{s$m5N&1F{r30V76bwdQXNuG6W~$QgrydHJwq*
zKeBiTX$Gnbq*P>rN_b1kat|JsE(UI>J9I
zPvHNz2$S2~`zv8@-^tC^lUR#X<|)Gd4_3Ynq@VcBpl3o*k)KD2>33W2YgXKj>};4F
zlPXu`ILhIH)CT(kW$
zfLmXf57*3l?ou~Z)J?C>O3ab@#lPTD`J~ajK*xKZ83C0@Ru%tr=K9mM@DaFl-uuz|Nq+nU;Wup%+Akla=)P9gFcl)m=2A9WM
zJUPrL4f+fr?+F$O63X`7kzfRUw9K)PwgT>PX3%9Se4@X75aR~2^xlh4|AHMV}zUBP$zJmx6Z*ImWytr&08P>Q6D#}5{;%>$pG^jP`uU0|F^B{Nn_eJU;_
zDz&?`rDd({Zv@43xUOge@|z?^QZhcNtsJ)Q!wUa;i=!l85CD^fg!^O$p9KJRVDapO
z^1TwuAbsZ)l6bs?IkNEZb@KL}c=tzFxVSuaTmM}SdQ#)n=wLAMeMcR&+xN?+1IA^9
z`NHTJ#`VdN-MZ?T%IZ8y*81t1D1U<0>B5M%f&Gjw(8}87u~DJ49x35H-KMl3y(j((
z`tS(bx=?+&>pdo5X0a=uA?+>ZQNOj+kXWC!wzF8gr=K6dU)87nyTOamUbwYdj}WWs
zvYJH&prj2QcC=?Q4!{;(&A_9~<2$xnOUii`R#*4v!6U-Aopn_fq+13Wv>zzgBP`~=
z>zPd)JVG$M1@TD7XA^oLU_eIDcp-mSlNW)L@&fqd6DHS`org@W?1zv#@f9Zd
zErVZkVuw_gSOL_EoAc^lgo*Ay_62cl)-HH5tG{YcjM4k`
z90#?*9(yD2IoizMwmp*@aVN~HfI~eEpGc+GROdx@5=TQivCb|boMt9tG}aJBRwR?a
zgE0(|0o~Ys95t0A9UJ5vHO99PJ<8PH^;!>paWD(Rt%0?qbwNEM2}e(0dCgKh%?Su9JJQ~Sqig0mV{rFiQp0c-oSlOa5`jXU6oChfrGq%^?drdoYyK+?QSyXeRxg{OjaCpuB37e4_-LH`Fhef%bgEZN?lW3cO#6Rw^HZ1qCWZ8!
zMO}$eBa~V#WXZdMjn+EfpsQ?+!+xI<9I_I|Eu{9Bh|qs9zne+#
z6|tQ+iaq1#Ti@H&uZ+(6Rs`-}`0rIe(&%#A;nf79-E*v_Z{Kw1)^*rBYcvK1+CJnV
zd=+2T+R;&d_<}CU$w*a@c!ez<&m;rAJ?7E)V+kp#gNFV)CTG*}YE5`inXXZI!z(*j
zlQ5@vVNtiY`c^&29VoU(f3C;|#I^&13zWXR$c&wD>h82?
z4yy#(4lp4N$9INV3QavdSlLI$@+PHV?1~-G7}XvO7m=%aEIj)Zii!dXqe0Np`f^7E
zu%`cu%>EB53LX=#|F<`L($m%ybRa7y&H`ryG2ICQ$k>UsxuSisVk?+X!
zFuyUw4E5e{mP70vTO)fldYeSb`}aanV9&}m!Fi3|Rch=TlF-l~b3DeQcmyzmm9D)L
zG6!EEZg%}WbUq$U8f=&&(669d}~z#r~sSECw~t<`8(g56W@A;b#=inu8BA@6-K1
z|C@>E;i8HE{B29Z!B&0t?*#*GH~|0la2Q9fTqftWW||;#oPPNK+Xo)j1HR1d*=i)f
z3?IW4`kXWP@mvR70GBbFbHP`2(_Y`@;Km#n83N3%@5lK5pI3GG*PmbSQTnM;jFDh6
z0eR~>*kNbf{+=X+zpZHy-@bIAO}ASSsqb3R!Nns>8B5-i
zMePI;ap?RVv^MzDYaFWMsT1pI&NgjhAxlb
z9E6@D41J;NK&mTp@7}%J0G0%r93P)-q2>RLg{I9|u?f4P_6k&j0t*2zc~Og21P_`h
zxXRc}6{doBDhZ-E`f$a%&Km&+*ebx8*GM%1#9c5oke&?LTb5ZnsX^)0Ku}WIGaoje
z71NJ``3C2RgDtIgK3qu&=0&MGbvW^%y`&xH{KSpEt+~yHEo9{g0IZJFikP|GEgYQr
zOG_~GYjt(95|!!yl5#XOKa=X(2HDLzc}Gnfh`<#
z1s|i0$6giN2kvRQ+nZ=PV;5Lm?Mc3r_qAsdn+dt`;qBW~xL~Dddw`@?wU*U&2M?YJ
zoPF!F5968`A)#Ox-1z+}2OHnKPn6*H;B*z;OLYuAo7)Ec(MO}}IW0_BPnMgEiJhYd
zh$J|^5f}0wRf4f`QuPXD
zo9c@Nm8f63C@-KIW}T_z;(EzR=*~`2pg_L+Irn*i!`07VK3Ne)?ZO2)`WO&KLv|xm
zR8~4@4U6#a-fAZet(ieHe|8FAq(tB5ioWp+!|cHnSl$QmT}03PpMPbg0&O}^a8Pm)
z1CA2;yoWcWue?|VeRXwh;%c=^hODc-?YY}^j!65A+vv)UTGc#yZjv{s%JRs~8oxx!
z%!43Pc0#q;YzR+=VogFzPN#=M?g3mXu0B>2b~#VRumuf7BYbP1%?K39k`Fb&AXYYO
zN#J#e0~(BJTRQ0vw)y2X>n8n{m+J6_%B`)w7dz=#Zaz~bUv`$0$7kbe;0mUEnM1`L
zWX+fB3C~nJsILxGVm#sFg
z-eAshZU$4Xac{N&bf*thF)Q_{X7D{VNCe_$g=L^T-q?#kK5#@9sbteu+XrN^aUFFp`~Te?8E#xF$0T+
zXkF1@o!|XGTG9Bdu1jBE8Rr(vly=t2UKlO*(B|W4z6#`Xg~fR5q;VkGnt0syzc|yt(d?
zjWz4+t1|@F0`f`*1f018o<}(7$@iAxiqUZFTk64OZs2UqF%-I6gF8{=Gm>J7k~A$%
z*)7PO8!k2tpc#m8?l-up{1VRGQWI_6W!drzYuzjUW+k6%0pP+zzVmk^&Dqu?z-a
zyP!IV8$om}`@h~pSx5MA-s2>se75Ebxp>eD
zZL!q>_e9q|J*R&9=Jan*pM&jI%fzD30RX2D8o$&nTDozEaAE
zMhVJ+8!t_Keun+bNqoKW1zAW(?0Wfe|7!Yu(4z^4ytK%>X;8{wDw9(7YVhF<@#N)v;A-T^a{o
zGqqnaHi1Qg`f}JD`xA$c1$qdH1RC?B?#R~?(LZNN?^5Wq*C!`D91r~O-bn?*{>LZf
z47%Lrc(JeJF08*QIn07YMl3sii!9?5c&D%IXr=^&T+QsFc|O@*c1FKv)dUC*>=Dp7
z?gmvHeY&o`ZuUhnaNs9ghi-Wi^-MZj|7%X@qQ$y@_Z1n_fg^L}r6Vqo7lEia&4_zON%|TszMKrIj
z%Iw>r4ngKG#2n$cp@1%me{K9eoM9bH^Zma9NAgejQ_wel&cgs64(EB$<4F+Y2a?~K
zrFqj^bsqHev|jx?Niy=L?m3nl#}Kf?(Rk(iqd_x!o@1kdV5eKSPO@hn3>DWY1*G9`
zFnicXE7K`nFfBCi1HNum$Cb$C(~|91v=ne<0r=5pq_qg4tR$@@FEkL*-VP3XfACKJ
zo@sBWE}TZ`c80Ugm^EFx;agakJY&cr0EA6KvhxYjaWZia_YdgK>waE24FGV*T>Kd*
z5;%&r{A4Q}@IgYx@)_LtnI?V_Byjphop(3!`?*SN{vK_D7yr<#r7f)x$@i-IpN?}n
zKvUDeHQ`d1-cIe3;(oaY3HQ6?a^I59-)Ia(S^{1)Kl@_yQJ`S3aWuZBjMzqM5x>}c
z5=aY_HWk
z5ikrza$_eI!{06Kqwwb9-H2DqEDNCQmNQElhf;M83shuI9QFlr>U9v}I)#sqnS3ow
z0mav8Ewpr?au^_(@*#KF3*PXL_+qyEKq`n*q^GBe^L^T^nyAbB}!5loNv
zC1t^-d!ESq8fgf5jh>LaptzVViY@J{r7Mqv>mV$#83jw7-rSefYk|TaR-3=|e#p
z>^gYcS=CJYO8iUS9`CPMGW&tIT^y*p>;;L|t=~ULk5_M5egb@4R%G2lyL+OgbmNO2
z`%hmqmR!=3lUytL9Vz9CZsl+T;ECOEzcPMOQEnRRPdP8*+JWSs9$1}@@L^a#DUDKL=^^a+5W5`^={R>zgcka_D
zf$rSahkG`@2RtsrD-r~A$W@RJj4kfCiFC~Eo(9qI$KU6oQ>6q^%68G}==v4=w$0VZ
zHzCtkGci03n`T^s?#H(7H1+xM605c%MC96pz3t{TNiX*v(f=b4Tp*YjsD)>b8!BWH
z5IQ|K-uBxvAD^=p%^shkFQtzmFV|@m`DCJF+QGYHSnOZ&Z
zZ3Vu6QY>4B4sw!;PuF((*DU4+N~AQmFmbDJ{{{7LcB(+dqkgw(?qr_S<;UFq>C$wi
zbhq4+vNLNxG(T-xX^?7al8MyqbnJz&X)2I08f*qxjS4JSbzlTx8PZGd1H;;gimn}D
z1<_-w1v?Ci$)vDvu-vhNVb`U&>LFJW7!L2DL1W(HM}`eqHD@xK64j4d-LgqeI2;ZF
zP-GOrQ@j(_6&fdZ*W6gs8saf(Y4HL3#7)_QI!BzaWTEkXuOQcYt3V(Z+6FX(-KqM&
z{>kz8;hk`qLrBpdLTiLDy%O=U$x-^DLPRm;GG>XDyvI300z5rc3ds=d(
zA8j$GCU;k(Ae>$B8viJ446tl5-ze+ygS$S;ag2W+w9V9zKO};}lv3wW=pimH$N%n{
z1fV{zus`LlaEB-PCBTHvoclpKI{M~qtR>u4T#A$V%*+NUwxUF
zwaMU1Dvd!*o%5Ko&vC$9PE8g}CSZEw$&&
z*9h7NMAfDHZ2hzI4R!j=R~b5Bl;5idLFPwEScxc*0=BWwUkM}a11#N*`BSnkE!Bo|
zC%a4Z0$7PRZQfkI-SYAQoQeePuAVG05WAdgl}M%qVLI#JJ=3lKR^f(mlI=?P;qhAX
zXc$Q?PfGc5g987)px<+X8*Q*vNga7nQLNk1O72gj$Y6SU0g(r6mH#42ZvnI8e)eI5
z5PX!DHial_@1eB8F_n;#j<>d@*F;{M31R62;f-1K!jTU_=fO^1+$942Gglx*rk5Cj
zG`m51I>0^4f(p&M4CJc^y<5_a8bVDk9W6rIym*4MTz2aVYtUz->&FiU%dMv0JC}$%
z{{_Hx@b&h+JXZ`X_{KtX$`f4x+ZeQAvYpDDzj;bzc<+9*)~Fv4|Mq+anUkw^Dwd^t;C-qb&jLy6anQ8a-KLr~NS~U1k=e*fLlI^IQ`g4)!i^TVZfL>@A
zPp0WkQ{_w>-?7os9}7#{tge^6D;~3-`>K!xiv#7^tyIe=6aW6JD#(?)_+NnqtcU#B
z4&ZfiZh~E}46Lw5EF}=R`V@9b>Rx-KG9?JkYu0MBY%fZqgZPK-v$9%UY2Jrq1g6)ruG!W5sC6t?z&*Ppjge>&ags~Z+NlPg1y$=GrJPZlo){QhdUi)zELiFh_XQN_S}
z>{>=u71bX#!!gj}m@@^02fq5kB)zF3x0osGl;n&(=sYfxu=j%^{Q3Lep)>)Xqe~xk
zTC&dWxz9Z(CU0BIunWVIfq3!B;8U7e&K_%#a|xyFrLzR&&@U1|g%Ot}XArFB<#
zwiSN?Qr5u2PbFab%sdE96tC5TmKrD#mh%|DDh3J=*!rfzB}dA~ANthqW*zZ02_u%t
z`l(`72PO-NRg#kJ{Iif>80!;AiC5;{QTzvu)0lm-=!+xbCVi(jf$7*XRk0e@iBH~*
zpzxYS*+LsMN}sb%_lyvY-_Jc8AyO_(i6g)X+ZGD`T!B7wg)8mYf;wF9vog
zS1k2Q*>(isB8s|@f>)rHs@jvh#z0jr-UF8U!m4ud)0_en!Q6zQoe41-on
zt#cl9@8K%vd%Mq9cW_jfVYM!9eFdvD3#&9`c=I*#^Hheb{64;GtuvC0sd-lA>5Bkl
ztp4Ye-@T|rgnmM9XC8HK%8JaODm;qdSoNJf{rA#2vwZ7po*%uSo(Sd^$V(VNq!k^i
zaXqS_=0G5GtVmA3xyrb4&zbN-#)7pFj~%Ag8d~Y5A*JL%Ro+?9)|CCN+KS&JG)=tS
zCj4~3S1}7XzgefMRg^Ev&q2$O5Bz=I)aG