Kaynağa Gözat

Template rewrite (#301)

Rafael Blumberg 3 yıl önce
ebeveyn
işleme
d3d7e5de51
100 değiştirilmiş dosya ile 4717 ekleme ve 1359 silme
  1. 0 993
      build/appinfo.json
  2. 2 1
      build/env.sh
  3. 77 104
      build/generators/generateAppList.sh
  4. 3 18
      build/generators/generateDocList.sh
  5. 3 4
      build/generators/generateREADME.sh
  6. 3 4
      build/generators/generateToolsREADME.sh
  7. 207 0
      build/info.json
  8. 150 0
      build/joinApps.sh
  9. 17 3
      build/pre-commit
  10. 86 0
      build/splitJson.sh
  11. 3 3
      docs/AppList.md
  12. 2 2
      docs/DocumentList.md
  13. 267 227
      pi-hosted_template/template/portainer-v2.json
  14. 67 0
      template/apps/airsonic-advanced.json
  15. 68 0
      template/apps/airsonic.json
  16. 54 0
      template/apps/archivebox.json
  17. 35 0
      template/apps/authelia.json
  18. 51 0
      template/apps/bazarr.json
  19. 45 0
      template/apps/beets.json
  20. 51 0
      template/apps/booksonic.json
  21. 55 0
      template/apps/bookstack.json
  22. 39 0
      template/apps/caddy.json
  23. 42 0
      template/apps/calibre-web.json
  24. 37 0
      template/apps/cardigann.json
  25. 63 0
      template/apps/chevereto.json
  26. 44 0
      template/apps/cloudflare-ddns.json
  27. 56 0
      template/apps/code-server.json
  28. 37 0
      template/apps/codiad.json
  29. 42 0
      template/apps/cops.json
  30. 46 0
      template/apps/couchpotato.json
  31. 41 0
      template/apps/daapd.json
  32. 26 0
      template/apps/dashmachine.json
  33. 43 0
      template/apps/davos.json
  34. 31 0
      template/apps/deemix.json
  35. 70 0
      template/apps/deluge-openvpn.json
  36. 47 0
      template/apps/deluge.json
  37. 40 0
      template/apps/domoticz.json
  38. 27 0
      template/apps/dozzle.json
  39. 19 0
      template/apps/dradis.json
  40. 60 0
      template/apps/drupal.json
  41. 44 0
      template/apps/duck-dns.json
  42. 50 0
      template/apps/duplicati.json
  43. 35 0
      template/apps/eclipse-mosquitto.json
  44. 53 0
      template/apps/emby.json
  45. 27 0
      template/apps/embystat.json
  46. 28 0
      template/apps/filebrowser.json
  47. 37 0
      template/apps/flame.json
  48. 48 0
      template/apps/foundryvtt-server.json
  49. 37 0
      template/apps/freshrss.json
  50. 47 0
      template/apps/gazee.json
  51. 57 0
      template/apps/gitea-with-mariadb.json
  52. 47 0
      template/apps/gitea.json
  53. 44 0
      template/apps/gotify.json
  54. 44 0
      template/apps/grocy.json
  55. 28 0
      template/apps/guacamole.json
  56. 45 0
      template/apps/headphones.json
  57. 40 0
      template/apps/heimdall.json
  58. 22 0
      template/apps/home-assistant.json
  59. 52 0
      template/apps/homebridge---debian.json
  60. 52 0
      template/apps/homebridge.json
  61. 44 0
      template/apps/homer.json
  62. 39 0
      template/apps/htpc-manager.json
  63. 26 0
      template/apps/huginn.json
  64. 31 0
      template/apps/influxdb-1.8.10.json
  65. 42 0
      template/apps/jackett.json
  66. 48 0
      template/apps/jdownloader.json
  67. 53 0
      template/apps/jellyfin.json
  68. 39 0
      template/apps/kodi-headless.json
  69. 42 0
      template/apps/lazylibrarian.json
  70. 74 0
      template/apps/let's-encrypt.json
  71. 26 0
      template/apps/libreddit.json
  72. 38 0
      template/apps/librespeed.json
  73. 46 0
      template/apps/lidarr.json
  74. 59 0
      template/apps/lychee-with-mariadb.json
  75. 69 0
      template/apps/lychee.json
  76. 58 0
      template/apps/mariadb.json
  77. 84 0
      template/apps/mealie.json
  78. 46 0
      template/apps/medusa.json
  79. 34 0
      template/apps/minecraft-server.json
  80. 36 0
      template/apps/minetest.json
  81. 35 0
      template/apps/minisatip.json
  82. 42 0
      template/apps/mstream.json
  83. 57 0
      template/apps/murmur.json
  84. 48 0
      template/apps/musicbrainz.json
  85. 40 0
      template/apps/muximux.json
  86. 46 0
      template/apps/mylar.json
  87. 44 0
      template/apps/n8n.json
  88. 63 0
      template/apps/netdata.json
  89. 52 0
      template/apps/nextcloud.json
  90. 44 0
      template/apps/nextcloudpi.json
  91. 55 0
      template/apps/nginx-proxy-manager.json
  92. 39 0
      template/apps/nginx.json
  93. 36 0
      template/apps/node-red.json
  94. 41 0
      template/apps/nzbget.json
  95. 43 0
      template/apps/nzbhydra-2.json
  96. 45 0
      template/apps/omada-eap-controller.json
  97. 40 0
      template/apps/ombi.json
  98. 44 0
      template/apps/openvpn-access-server.json
  99. 38 0
      template/apps/organizr-v2.json
  100. 38 0
      template/apps/oscam.json

+ 0 - 993
build/appinfo.json

@@ -1,993 +0,0 @@
-{
-	"apps": [
-		{
-			"Title": "Airsonic",
-			"Web": "https://airsonic.github.io/",
-			"OfficialDoc": "https://airsonic.github.io/docs/install/docker/"
-		},
-		{
-			"Title": "Airsonic Advanced",
-			"Web": "https://github.com/airsonic-advanced/airsonic-advanced",
-			"OfficialDoc": "https://github.com/linuxserver/docker-airsonic-advanced"
-		},
-		{
-			"Title": "Archivebox",
-			"Web": "https://archivebox.io/",
-			"OfficialDoc": "https://github.com/ArchiveBox/ArchiveBox/wiki/Docker"
-		},
-		{
-			"Title": "Authelia",
-			"Web": "https://www.authelia.com/",
-			"OfficialDoc": "https://www.authelia.com/docs/configuration/"
-		},
-		{
-			"Title": "Bazarr",
-			"Web": "https://www.bazarr.media/",
-			"OfficialDoc": "https://wiki.bazarr.media/Getting-Started/Installation/Docker/docker/"
-		},
-		{
-			"Title": "Beets",
-			"Web": "https://beets.io/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-beets"
-		},
-		{
-			"Title": "Booksonic",
-			"Web": "https://booksonic.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-booksonic-air"
-		},
-		{
-			"Title": "Bookstack",
-			"Web": "https://www.bookstackapp.com/",
-			"OfficialDoc": "https://www.bookstackapp.com/docs/admin/installation/#docker"
-		},
-		{
-			"Title": "COPS",
-			"Web": "https://blog.slucas.fr/projects/calibre-opds-php-server/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-cops"
-		},
-		{
-			"Title": "Caddy",
-			"ScriptID": 1,
-			"Web": "https://caddyserver.com/",
-			"OfficialDoc": "https://hub.docker.com/_/caddy"
-		},
-		{
-			"Title": "Calibre Web",
-			"Web": "https://calibre-ebook.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-calibre-web"
-		},
-		{
-			"Title": "Cardigann",
-			"Web": "https://github.com/cardigann/cardigann",
-			"OfficialDoc": "https://hub.docker.com/r/linuxserver/cardigann/"
-		},
-		{
-			"Title": "Chevereto",
-			"Web": "https://chevereto.com/",
-			"OfficialDoc": "https://hub.docker.com/r/nmtan/chevereto"
-		},
-		{
-			"Title": "Cloudflare DDNS",
-			"Web": "https://www.cloudflare.com/en-gb/learning/dns/glossary/dynamic-dns/",
-			"OfficialDoc": "https://hub.docker.com/r/oznu/cloudflare-ddns/"
-		},
-		{
-			"Title": "Code Server",
-			"Web": "https://coder.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-code-server"
-		},
-		{
-			"Title": "Codiad",
-			"Web": "http://codiad.com/",
-			"OfficialDoc": "https://github.com/Codiad/Codiad/wiki/Quick-installation-using-Docker"
-		},
-		{
-			"Title": "CouchPotato",
-			"Web": "https://couchpota.to/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-couchpotato"
-		},
-		{
-			"Title": "Daapd",
-			"Web": "https://owntone.github.io/owntone-server/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-daapd"
-		},
-		{
-			"Title": "DashMachine",
-			"Web": "https://github.com/rmountjoy92/DashMachine",
-			"OfficialDoc": "https://github.com/rmountjoy92/DashMachine"
-		},
-		{
-			"Title": "Davos",
-			"Web": "https://github.com/linuxserver/davos",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-davos"
-		},
-		{
-			"Title": "DeeMix",
-			"Web": "https://deemix.app/",
-			"OfficialDoc": "https://gitlab.com/Bockiii/deemix-docker"
-		},
-		{
-			"Title": "Deluge",
-			"Web": "https://www.deluge-torrent.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-deluge"
-		},
-		{
-			"Title": "Deluge openvpn",
-			"Web": "https://www.deluge-torrent.org/",
-			"OfficialDoc": "https://github.com/sgtsquiggs/docker-deluge-openvpn"
-		},
-		{
-			"Title": "Domoticz",
-			"Web": "https://domoticz.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-domoticz"
-		},
-		{
-			"Title": "Dozzle",
-			"Web": "https://dozzle.dev/",
-			"OfficialDoc": "https://github.com/amir20/dozzle"
-		},
-		{
-			"Title": "Dradis",
-			"Web": "https://dradisframework.com/",
-			"OfficialDoc": "https://github.com/raesene/dockerized-security-tools"
-		},
-		{
-			"Title": "Drupal",
-			"ScriptID": 2,
-			"Web": "https://www.drupal.org/",
-			"OfficialDoc": "https://www.drupal.org/docs/develop/local-server-setup/docker-development-environments/docker-with-solr-cloud-integration/docker-configuration"
-		},
-		{
-			"Title": "Duck DNS",
-			"Web": "https://www.duckdns.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-duckdns"
-		},
-		{
-			"Title": "Duplicati",
-			"Web": "https://www.duplicati.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-duplicati"
-		},
-		{
-			"Title": "Eclipse Mosquitto",
-			"Web": "https://mosquitto.org/",
-			"OfficialDoc": "https://hub.docker.com/_/eclipse-mosquitto"
-		},
-		{
-			"Title": "Emby",
-			"Web": "https://emby.media/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-emby"
-		},
-		{
-			"Title": "EmbyStat",
-			"Web": "https://github.com/mregni/EmbyStat",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-embystat"
-		},
-		{
-			"Title": "FileBrowser",
-			"VideoID": 4,
-			"Web": "https://filebrowser.org/",
-			"OfficialDoc": "https://filebrowser.org/installation#docker"
-		},
-		{
-			"Title": "Flame",
-			"Web": "https://github.com/pawelmalak/flame",
-			"OfficialDoc": "https://github.com/pawelmalak/flame#with-docker-recommended"
-		},
-		{
-			"Title": "FoundryVTT Server",
-			"Web": "https://foundryvtt.com/",
-			"OfficialDoc": "https://hub.docker.com/r/felddy/foundryvtt"
-		},
-		{
-			"Title": "FreshRSS",
-			"Web": "https://www.freshrss.org/",
-			"OfficialDoc": "https://github.com/FreshRSS/FreshRSS/tree/edge/Docker"
-		},
-		{
-			"Title": "Gazee",
-			"Web": "https://github.com/hubbcaps/gazee",
-			"OfficialDoc": "https://hub.docker.com/r/linuxserver/gazee"
-		},
-		{
-			"Title": "Gitea",
-			"Web": "https://gitea.com/",
-			"OfficialDoc": "https://docs.gitea.io/en-us/install-with-docker/"
-		},
-		{
-			"Title": "Gitea with Mariadb",
-			"Web": "https://gitea.com/",
-			"OfficialDoc": "https://docs.gitea.io/en-us/install-with-docker/#mysql-database"
-		},
-		{
-			"Title": "Gotify",
-			"Web": "https://gotify.net/",
-			"OfficialDoc": "https://gotify.net/docs/install"
-		},
-		{
-			"Title": "Grocy",
-			"Web": "https://grocy.info/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-grocy"
-		},
-		{
-			"Title": "Guacamole",
-			"VideoID": 3,
-			"Web": "https://guacamole.apache.org/",
-			"OfficialDoc": "https://hub.docker.com/r/oznu/guacamole"
-		},
-		{
-			"Title": "HTPC Manager",
-			"Web": "https://htpc.io/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-htpcmanager"
-		},
-		{
-			"Title": "Headphones",
-			"Web": "https://github.com/rembo10/headphones",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-headphones"
-		},
-		{
-			"Title": "Heimdall",
-			"Web": "https://heimdall.site/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-heimdall"
-		},
-		{
-			"Title": "Home Assistant",
-			"Web": "https://www.home-assistant.io/",
-			"OfficialDoc": "https://www.home-assistant.io/installation/raspberrypi#install-home-assistant-container"
-		},
-		{
-			"Title": "Homebridge",
-			"Web": "https://homebridge.io/",
-			"OfficialDoc": "https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker"
-		},
-		{
-			"Title": "Homebridge - Debian",
-			"Web": "https://homebridge.io/",
-			"OfficialDoc": "https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker"
-		},
-		{
-			"Title": "Homer",
-			"VideoID": 2,
-			"Web": "https://github.com/bastienwirtz/homer",
-			"OfficialDoc": "https://github.com/bastienwirtz/homer/blob/main/docs/configuration.md"
-		},
-		{
-			"Title": "Huginn",
-			"Web": "https://github.com/huginn/huginn",
-			"OfficialDoc": "https://github.com/huginn/huginn/tree/master/docker"
-		},
-		{
-			"Title": "Influxdb 1.8.10",
-			"Web": "https://www.influxdata.com/",
-			"OfficialDoc": "https://docs.influxdata.com/influxdb/v2.0/install/?t=Docker"
-		},
-		{
-			"Title": "JDownloader",
-			"VideoID": 4,
-			"Web": "https://my.jdownloader.org/",
-			"OfficialDoc": "https://github.com/jaymoulin/docker-jdownloader"
-		},
-		{
-			"Title": "Jackett",
-			"Web": "https://github.com/Jackett/Jackett",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-jackett"
-		},
-		{
-			"Title": "Jellyfin",
-			"Web": "https://jellyfin.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-jellyfin"
-		},
-		{
-			"Title": "Kodi Headless",
-			"Web": "https://kodi.tv/",
-			"OfficialDoc": "https://hub.docker.com/r/lsioarmhf/kodi-headless-aarch64/"
-		},
-		{
-			"Title": "LazyLibrarian",
-			"Web": "https://lazylibrarian.gitlab.io/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-lazylibrarian"
-		},
-		{
-			"Title": "Let's Encrypt",
-			"Web": "https://letsencrypt.org/",
-			"OfficialDoc": "https://hub.docker.com/r/linuxserver/letsencrypt"
-		},
-		{
-			"Title": "LibreSpeed",
-			"Web": "https://librespeed.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-librespeed"
-		},
-		{
-			"Title": "Lychee",
-			"Web": "https://lycheeorg.github.io/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-lychee"
-		},
-		{
-			"Title": "Lychee With Mariadb",
-			"Web": "https://lycheeorg.github.io/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-lychee"
-		},
-		{
-			"Title": "MariaDB",
-			"Web": "https://mariadb.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-mariadb"
-		},
-		{
-			"Title": "Mealie",
-			"Web": "https://hay-kot.github.io/mealie/",
-			"OfficialDoc": "https://hay-kot.github.io/mealie/documentation/getting-started/install/"
-		},
-		{
-			"Title": "Medusa",
-			"Web": "https://pymedusa.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-medusa"
-		},
-		{
-			"Title": "Minecraft Server",
-			"Web": "https://www.minecraft.net/en-us",
-			"OfficialDoc": "https://github.com/itzg/docker-minecraft-server#using-docker-compose"
-		},
-		{
-			"Title": "Minetest",
-			"Web": "https://www.minetest.net/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-minetest"
-		},
-		{
-			"Title": "Minisatip",
-			"Web": "https://github.com/catalinii/minisatip",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-minisatip"
-		},
-		{
-			"Title": "Mstream",
-			"Web": "https://mstream.io/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-mstream"
-		},
-		{
-			"Title": "Murmur",
-			"Web": "https://www.mumble.info/",
-			"OfficialDoc": "https://github.com/yhaenggi/murmur-docker"
-		},
-		{
-			"Title": "MusicBrainz",
-			"Web": "https://musicbrainz.org/",
-			"OfficialDoc": "https://github.com/linuxserver-archive/docker-musicbrainz"
-		},
-		{
-			"Title": "Muximux",
-			"Web": "https://github.com/mescon/Muximux",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-muximux"
-		},
-		{
-			"Title": "Mylar",
-			"Web": "https://github.com/mylar3/mylar3",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-mylar3"
-		},
-		{
-			"Title": "NZBGet",
-			"Web": "https://nzbget.net/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-nzbget"
-		},
-		{
-			"Title": "NZBHydra 2",
-			"Web": "https://github.com/theotherp/nzbhydra2",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-nzbhydra2"
-		},
-		{
-			"Title": "Netdata",
-			"Web": "https://www.netdata.cloud/",
-			"OfficialDoc": "https://learn.netdata.cloud/docs/agent/packaging/docker"
-		},
-		{
-			"Title": "Nextcloud",
-			"Web": "https://nextcloud.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-nextcloud"
-		},
-		{
-			"Title": "NextcloudPi",
-			"ExtraID": 8,
-			"VideoID": 8,
-			"Web": "https://ownyourbits.com/nextcloudpi/",
-			"OfficialDoc": "https://ownyourbits.com/2017/06/08/nextcloudpi-docker-for-raspberry-pi/"
-		},
-		{
-			"Title": "Nginx",
-			"Web": "https://nginx.org/en/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-nginx"
-		},
-		{
-			"Title": "Nginx Proxy Manager",
-			"DocID": 2,
-			"ScriptID": 7,
-			"VideoID": 9,
-			"Web": "https://nginxproxymanager.com/",
-			"OfficialDoc": "https://nginxproxymanager.com/setup/#using-mysql-mariadb-database"
-		},
-		{
-			"Title": "Node Red",
-			"Web": "https://nodered.org/",
-			"OfficialDoc": "https://nodered.org/docs/getting-started/docker"
-		},
-		{
-			"Title": "OScam",
-			"Web": "https://trac.streamboard.tv/oscam/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-oscam"
-		},
-		{
-			"Title": "Omada EAP Controller",
-			"Web": "https://www.tp-link.com/us/business-networking/omada-sdn-controller/",
-			"OfficialDoc": "https://hub.docker.com/r/mbentley/omada-controller"
-		},
-		{
-			"Title": "Ombi",
-			"Web": "https://ombi.io/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-ombi"
-		},
-		{
-			"Title": "OpenVPN Access Server",
-			"Web": "https://openvpn.net/access-server/",
-			"OfficialDoc": "https://hub.docker.com/r/linuxserver/openvpn-as/"
-		},
-		{
-			"Title": "Organizr v2",
-			"Web": "https://organizr.app/",
-			"OfficialDoc": "https://hub.docker.com/r/organizr/organizr"
-		},
-		{
-			"Title": "Paperless",
-			"Web": "https://github.com/jonaswinkler/paperless-ng",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-paperless-ng"
-		},
-		{
-			"Title": "PhotoPrism",
-			"DocID": 9,
-			"ScriptID": 12,
-			"Web": "https://photoprism.app/",
-			"OfficialDoc": "https://docs.photoprism.app/getting-started/docker-compose/"
-		},
-		{
-			"Title": "PhotoShow",
-			"Web": "https://github.com/thibaud-rohmer/PhotoShow",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-photoshow"
-		},
-		{
-			"Title": "Pi-Hole",
-			"DocID": 7,
-			"Web": "https://pi-hole.net/",
-			"OfficialDoc": "https://github.com/pi-hole/docker-pi-hole/#running-pi-hole-docker"
-		},
-		{
-			"Title": "Pi-Hole DoH/DoT",
-			"DocID": 7,
-			"Web": "https://pi-hole.net/",
-			"OfficialDoc": "https://hub.docker.com/r/oijkn/pihole-doh-dot"
-		},
-		{
-			"Title": "Pi-Hole-Unbound",
-			"DocID": 7,
-			"Web": "https://pi-hole.net/",
-			"OfficialDoc": "https://github.com/chriscrowe/docker-pihole-unbound/tree/master/one-container"
-		},
-		{
-			"Title": "Piwigo",
-			"Web": "http://piwigo.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-piwigo"
-		},
-		{
-			"Title": "Plex",
-			"Web": "https://www.plex.tv/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-plex"
-		},
-		{
-			"Title": "Pritunl",
-			"Web": "https://pritunl.com/",
-			"OfficialDoc": "https://hub.docker.com/r/goofball222/pritunl"
-		},
-		{
-			"Title": "PrivateBin",
-			"Web": "https://privatebin.info/",
-			"OfficialDoc": "https://hub.docker.com/r/privatebin/nginx-fpm-alpine"
-		},
-		{
-			"Title": "ProjectSend",
-			"Web": "https://www.projectsend.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-projectsend"
-		},
-		{
-			"Title": "ProtonMail Bridge",
-			"Web": "https://protonmail.com/bridge/",
-			"OfficialDoc": "https://hub.docker.com/r/shenxn/protonmail-bridge"
-		},
-		{
-			"Title": "Pydio",
-			"Web": "https://www.pydio.com/",
-			"OfficialDoc": "https://hub.docker.com/r/linuxserver/pydio"
-		},
-		{
-			"Title": "Quassel IRC",
-			"Web": "https://quassel-irc.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-quassel-core"
-		},
-		{
-			"Title": "RDesktop",
-			"Web": "http://xrdp.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-rdesktop"
-		},
-		{
-			"Title": "Radarr",
-			"Web": "https://radarr.video/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-radarr"
-		},
-		{
-			"Title": "Raspberry Pi Docker Monitor",
-			"DocID": 3,
-			"ScriptID": 9,
-			"VideoID": 7,
-			"Web": "https://github.com/pi-hosted/pi-hosted/blob/master/docs/rpi_docker_monitor.md",
-			"OfficialDoc": "https://github.com/pi-hosted/pi-hosted/blob/master/docs/rpi_docker_monitor.md"
-		},
-		{
-			"Title": "Reactive-Resume",
-			"Web": "https://rxresu.me/",
-			"OfficialDoc": "https://hub.docker.com/r/martadinata666/reactive-resume"
-		},
-		{
-			"Title": "Redmine",
-			"Web": "https://www.redmine.org/",
-			"OfficialDoc": "https://hub.docker.com/_/redmine"
-		},
-		{
-			"Title": "Resilio Sync",
-			"Web": "https://www.resilio.com/individuals/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-resilio-sync"
-		},
-		{
-			"Title": "SABnzbd",
-			"Web": "https://sabnzbd.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-sabnzbd"
-		},
-		{
-			"Title": "Samba",
-			"VideoID": 10,
-			"Web": "https://www.samba.org/",
-			"OfficialDoc": "https://github.com/dperson/samba"
-		},
-		{
-			"Title": "SearXNG",
-			"DocID": 10,
-			"Web": "https://docs.searxng.org/",
-			"OfficialDoc": "https://docs.searxng.org/admin/installation-docker.html"
-		},
-		{
-			"Title": "Shiori",
-			"Web": "https://github.com/go-shiori/shiori",
-			"OfficialDoc": "https://github.com/nicholaswilde/docker-shiori"
-		},
-		{
-			"Title": "SickChill",
-			"Web": "https://docs.linuxserver.io/images/docker-sickchill",
-			"OfficialDoc": "https://sickchill.github.io/"
-		},
-		{
-			"Title": "SickGear",
-			"Web": "https://github.com/SickGear/SickGear/wiki",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-sickgear"
-		},
-		{
-			"Title": "SmokePing",
-			"Web": "https://oss.oetiker.ch/smokeping/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-smokeping"
-		},
-		{
-			"Title": "Snippet-box",
-			"Web": "https://github.com/pawelmalak/snippet-box",
-			"OfficialDoc": "https://github.com/pawelmalak/snippet-box#with-docker"
-		},
-		{
-			"Title": "Sonarr",
-			"Web": "https://sonarr.tv/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-sonarr"
-		},
-		{
-			"Title": "Speedtest Tracker",
-			"Web": "https://github.com/henrywhitaker3/Speedtest-Tracker",
-			"OfficialDoc": "https://github.com/henrywhitaker3/Speedtest-Tracker#using-docker"
-		},
-		{
-			"Title": "Sshwifty",
-			"Web": "https://sshwifty.herokuapp.com/",
-			"OfficialDoc": "https://github.com/nirui/sshwifty#docker-image"
-		},
-		{
-			"Title": "SyncThing",
-			"Web": "https://syncthing.net/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-syncthing"
-		},
-		{
-			"Title": "Tautulli",
-			"Web": "https://tautulli.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-tautulli"
-		},
-		{
-			"Title": "TheLounge",
-			"Web": "https://thelounge.chat/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-thelounge"
-		},
-		{
-			"Title": "TiddlyWiki",
-			"Web": "https://tiddlywiki.com/",
-			"OfficialDoc": "https://github.com/djmaze/tiddlywiki-docker"
-		},
-		{
-			"Title": "Traefik",
-			"ScriptID": 10,
-			"Web": "https://doc.traefik.io/traefik/",
-			"OfficialDoc": "https://doc.traefik.io/traefik/getting-started/install-traefik/"
-		},
-		{
-			"Title": "Transmission",
-			"Web": "https://transmissionbt.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-transmission"
-		},
-		{
-			"Title": "Transmission OpenVPN Version 4",
-			"Web": "https://transmissionbt.com/",
-			"OfficialDoc": "https://haugene.github.io/docker-transmission-openvpn/run-container/"
-		},
-		{
-			"Title": "Transmission-OpenVPN",
-			"VideoID": 5,
-			"Web": "https://transmissionbt.com/",
-			"OfficialDoc": "https://haugene.github.io/docker-transmission-openvpn/run-container/"
-		},
-		{
-			"Title": "Tvheadend",
-			"Web": "https://tvheadend.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-tvheadend"
-		},
-		{
-			"Title": "Ubooquity",
-			"Web": "https://vaemendis.net/ubooquity/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-ubooquity"
-		},
-		{
-			"Title": "UnPoller Monitor",
-			"DocID": 1,
-			"ScriptID": 11,
-			"Web": "https://unpoller.com/",
-			"OfficialDoc": "https://github.com/novaspirit/pi-hosted/blob/master/docs/UnPoller-Monitor.md"
-		},
-		{
-			"Title": "UniFi Controller",
-			"Web": "https://ui.com/consoles",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-unifi-controller"
-		},
-		{
-			"Title": "UniFi Video",
-			"Web": "https://github.com/pducharme/UniFi-Video-Controller",
-			"OfficialDoc": "https://github.com/pducharme/UniFi-Video-Controller"
-		},
-		{
-			"Title": "Uptime Kuma",
-			"Web": "https://github.com/louislam/uptime-kuma",
-			"OfficialDoc": "https://github.com/louislam/uptime-kuma/wiki/%F0%9F%94%A7-How-to-Install#-docker"
-		},
-		{
-			"Title": "Vaultwarden",
-			"Web": "https://github.com/dani-garcia/vaultwarden",
-			"OfficialDoc": "https://github.com/dani-garcia/vaultwarden/wiki"
-		},
-		{
-			"Title": "Vikunja With Frontend",
-			"ScriptID": 6,
-			"Web": "https://vikunja.io/",
-			"OfficialDoc": "https://vikunja.io/docs/full-docker-example/#example-with-nginx-as-proxy"
-		},
-		{
-			"Title": "Watchtower",
-			"VideoID": 6,
-			"Web": "https://containrrr.dev/watchtower/",
-			"OfficialDoc": "https://containrrr.dev/watchtower/usage-overview/"
-		},
-		{
-			"Title": "WebGrab+Plus",
-			"Web": "http://www.webgrabplus.com/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-webgrabplus"
-		},
-		{
-			"Title": "Whoogle",
-			"VideoID": 11,
-			"Web": "https://github.com/benbusby/whoogle-search",
-			"OfficialDoc": "https://github.com/benbusby/whoogle-search#g-manual-docker"
-		},
-		{
-			"Title": "Wikijs",
-			"Web": "https://js.wiki/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-wikijs"
-		},
-		{
-			"Title": "Windows 2000",
-			"VideoID": 12,
-			"Web": "https://github.com/hectorm/docker-qemu-win2000",
-			"OfficialDoc": "https://github.com/hectorm/docker-qemu-win2000#start-an-instance"
-		},
-		{
-			"Title": "Wireguard Server",
-			"DocID": 4,
-			"Web": "https://github.com/WeeJeWel/wg-easy/",
-			"OfficialDoc": "https://github.com/WeeJeWel/wg-easy/#1-install-docker"
-		},
-		{
-			"Title": "Wordpress",
-			"DocID": 5,
-			"Web": "https://wordpress.com/",
-			"OfficialDoc": "https://github.com/docker-library/docs/tree/master/wordpress#-via-docker-stack-deploy-or-docker-compose"
-		},
-		{
-			"Title": "Yacht",
-			"Web": "https://yacht.sh/",
-			"OfficialDoc": "https://yacht.sh/docs/Installation/Install#via-docker-compose"
-		},
-		{
-			"Title": "YouTubeDL-Material",
-			"Web": "https://github.com/Tzahi12345/YoutubeDL-Material",
-			"OfficialDoc": "https://github.com/Tzahi12345/YoutubeDL-Material#docker"
-		},
-		{
-			"Title": "ZNC",
-			"Web": "https://wiki.znc.in/ZNC",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-znc"
-		},
-		{
-			"Title": "libreddit",
-			"Web": "https://libreddit.silkky.cloud/",
-			"OfficialDoc": "https://github.com/spikecodes/libreddit#2-docker"
-		},
-		{
-			"Title": "lidarr",
-			"Web": "https://lidarr.audio/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-lidarr"
-		},
-		{
-			"Title": "n8n",
-			"Web": "https://n8n.io/",
-			"OfficialDoc": "https://docs.n8n.io/getting-started/installation/#docker"
-		},
-		{
-			"Title": "qBittorrent",
-			"Web": "https://www.qbittorrent.org/",
-			"OfficialDoc": "https://docs.linuxserver.io/images/docker-qbittorrent"
-		},
-		{
-			"Title": "ruTorrent",
-			"Web": "https://github.com/Novik/ruTorrent",
-			"OfficialDoc": "https://github.com/crazy-max/docker-rtorrent-rutorrent"
-		}
-	],
-	"youtube": [
-		{
-			"ID": 1,
-			"Title": "Raspberry Pi 4 Server Setup, Docker Install, Portainer Install, Shell In A Box",
-			"URL": "https://www.youtube.com/watch?v=cO2-gQ09Jj0&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=1"
-		},
-		{
-			"ID": 2,
-			"Title": "Installing and Configuring Homer Dashboard",
-			"URL": "https://www.youtube.com/watch?v=_d3J88ootYo&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=2"
-		},
-		{
-			"ID": 3,
-			"Title": "Manually Installing Guacamole on Portainer",
-			"URL": "https://www.youtube.com/watch?v=cKAhnf8X1lo&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=3"
-		},
-		{
-			"ID": 4,
-			"Title": "Installing JDownloader and File Browser On The Pi Docker Server",
-			"URL": "https://www.youtube.com/watch?v=30MYRgCObu8&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=4"
-		},
-		{
-			"ID": 5,
-			"Title": "Torrent with Docker and OPENVPN with Transmission and PIA",
-			"URL": "https://www.youtube.com/watch?v=tGLVEq913_4&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=5"
-		},
-		{
-			"ID": "Extra1",
-			"Title": "Portainer.io App Template for Raspberry Pi arm/arm64 I Need Your Help!",
-			"URL": "https://www.youtube.com/watch?v=Zn-VELlaIN4&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=6"
-		},
-		{
-			"ID": 6,
-			"Title": "Upgrading Portainer and Updating Containers",
-			"URL": "https://www.youtube.com/watch?v=q3wKqk8qVS8&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=7"
-		},
-		{
-			"ID": 7,
-			"Title": "Raspberry Pi Docker Monitoring",
-			"URL": "https://www.youtube.com/watch?v=IoD3vFuep64&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=8",
-			"DocID": 3
-		},
-		{
-			"ID": 8,
-			"Title": "Installing Nextcloud on Raspberry Pi Docker",
-			"URL": "https://www.youtube.com/watch?v=E6IrT3g5Gqc&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=9"
-		},
-		{
-			"ID": 9,
-			"Title": "Installing Nginx Proxy Manager on Docker",
-			"URL": "https://www.youtube.com/watch?v=yl2Laxbqvo8&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=10",
-			"DocID": 2
-		},
-		{
-			"ID": 10,
-			"Title": "Setting up Raspberry Pi Samba Server For File Sharing on Docker",
-			"URL": "https://www.youtube.com/watch?v=2zZ3_1GRWrM&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=11"
-		},
-		{
-			"ID": 11,
-			"Title": "How to Install Whoogle to replace using Google and repo notes",
-			"URL": "https://www.youtube.com/watch?v=j3ZGxo3ibUs&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=12"
-		},
-		{
-			"ID": 12,
-			"Title": "Checking out Windows 2000 Docker",
-			"URL": "https://www.youtube.com/watch?v=57Gnp0424Qc&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=13"
-		}
-	],
-	"docs": [
-		{
-			"ID": 1,
-			"File": "UnPoller-Monitor.md",
-			"Description": "Install and setup instructions for the RPI Unifi (UnPoller) Monitor"
-		},
-		{
-			"ID": 2,
-			"File": "nginx_proxy_manager.md",
-			"Description": "Install and setup instructions for Nginx Proxy Manager (NPM)"
-		},
-		{
-			"ID": 3,
-			"File": "rpi_docker_monitor.md",
-			"Description": "Install and setup instructions for the RPI Docker Monitor"
-		},
-		{
-			"ID": 4,
-			"File": "wireguard-install.md",
-			"Description": "Install and setup instructions for the WireGuard VPN Server"
-		},
-		{
-			"ID": 5,
-			"File": "wordpress_installation.md",
-			"Description": "WORDPRESS + SSL SETUP"
-		},
-		{
-			"ID": 6,
-			"File": "throttled.md",
-			"Description": "Install and Setup Instructions for the Throttled Script"
-		},
-		{
-			"ID": 7,
-			"File": "pi-hole.md",
-			"Description": "Install and Setup Pi-Hole for Network-Wide Ad Block"
-		},
-		{
-			"ID": 8,
-			"File": "macvlan_setup.md",
-			"Description": "Attach a container directly to local network (macvlan)"
-		},
-		{
-			"ID": 9,
-			"File": "photoprism.md",
-			"Description": "Install and Setup Instructions for PhotoPrism Stack"
-		},
-		{
-			"ID": 10,
-			"File": "searxng.md",
-			"Description": "Install and Setup Instructions for SearXNG Meta Search"
-		}
-	],
-	"tools": [
-		{
-			"ID": 1,
-			"File": "install_caddy.sh",
-			"Type": "Preinstall",
-			"Exec": "bash",
-			"Description": "Preinstall Setup for Caddy",
-			"wget": "https://git.io/JMsEe"
-		},
-		{
-			"ID": 2,
-			"File": "install_drupal.sh",
-			"Type": "Preinstall",
-			"Exec": "bash",
-			"Description": "Preinstall Setup for Drupal",
-			"wget": "https://git.io/JMsEj"
-		},
-		{
-			"ID": 3,
-			"File": "install_portainer_agent.sh",
-			"Type": "Preinstall",
-			"Description": "Install Portainer Agent<br>Portainer agent is used for remote management of the host you install it on."
-		},
-		{
-			"ID": 4,
-			"File": "update_portainer_agent.sh",
-			"Type": "Update",
-			"Description": "Upgrade Portainer Agent"
-		},
-		{
-			"ID": 5,
-			"File": "install_throttled.sh",
-			"Type": "Install",
-			"Exec": "bash",
-			"Description": "Preinstall Setup for the Throttled Script",
-			"DocID": 6,
-			"wget": "https://git.io/JXzw0"
-		},
-		{
-			"ID": 6,
-			"File": "install_vikunja.sh",
-			"Type": "Preinstall",
-			"Exec": "bash",
-			"Description": "Preinstall Setup for Vikunja",
-			"wget": "https://git.io/JMsuZ"
-		},
-		{
-			"ID": 7,
-			"File": "nginx-proxy-manager.sh",
-			"Type": "Preinstall",
-			"Exec": "bash",
-			"Description": "Preinstall Setup for NPM",
-			"DocID": 2,
-			"wget": "https://git.io/JPXF5"
-		},
-		{
-			"ID": 8,
-			"File": "reset_premissions_nextcloud.sh",
-			"Type": "Extra",
-			"Exec": "bash",
-			"Description": "Basic Script to reset the premissions of NextcloudPi",
-			"wget": "https://git.io/JDklN"
-		},
-		{
-			"ID": 9,
-			"File": "rpi_docker_monitor.sh",
-			"Type": "Preinstall",
-			"Exec": "bash",
-			"Description": "Preinstall Setup for Docker Monitor",
-			"DocID": 3,
-			"wget": "https://git.io/JPXba"
-		},
-		{
-			"ID": 10,
-			"File": "traefik.sh",
-			"Type": "Preinstall",
-			"Exec": "bash",
-			"Description": "Preinstall Setup for Traefik",
-			"wget": "https://git.io/JMsuA"
-		},
-		{
-			"ID": 11,
-			"File": "unpoller-install.sh",
-			"Type": "Preinstall",
-			"Exec": "bash",
-			"Description": "Preinstall Setup for UnPoller",
-			"DocID": 1,
-			"wget": "https://git.io/JMszE"
-		},
-		{
-			"ID": 12,
-			"File": "install_photoprism.sh",
-			"Type": "Preinstall",
-			"Exec": "bash",
-			"DocID": 9,
-			"Description": "Install Photo Prism",
-			"wget": "https://git.io/JM5Tr"
-		},
-		{
-			"ID": 13,
-			"File": "update_libseccomp2.sh",
-			"Type": "Update",
-			"Exec": "bash",
-			"Description": "PI OS 32 libseccomp2 Repair utility",
-			"wget": "https://git.io/JPXdj"
-		}
-	]
-}

+ 2 - 1
build/env.sh

@@ -1,6 +1,7 @@
 #!/bin/bash
 #!/bin/bash
 
 
 # Portainer Templates
 # Portainer Templates
+appsfolder="${homedir}template/apps"
 pt32="${homedir}template/portainer-v2-arm32.json"
 pt32="${homedir}template/portainer-v2-arm32.json"
 pt64="${homedir}template/portainer-v2-arm64.json"
 pt64="${homedir}template/portainer-v2-arm64.json"
 
 
@@ -17,7 +18,7 @@ DocList="${homedir}docs/DocumentList.md"
 DocList_TEMPLATE="${homedir}build/templates/template_DocumentList.md"
 DocList_TEMPLATE="${homedir}build/templates/template_DocumentList.md"
 
 
 # appinfo file
 # appinfo file
-appinfo="${homedir}build/appinfo.json"
+appinfo="${homedir}build/info.json"
 
 
 # Internal folders
 # Internal folders
 Scripts="../tools/"
 Scripts="../tools/"

+ 77 - 104
build/generators/generateAppList.sh

@@ -10,125 +10,100 @@ docIconBlue="![](../build/images/blue_doc_icon.png)"
 docIconRed="![](../build/images/red_doc_icon.png)"
 docIconRed="![](../build/images/red_doc_icon.png)"
 scriptIcon="![](../build/images/script_icon.png)"
 scriptIcon="![](../build/images/script_icon.png)"
 
 
-# Temp helper files
-TempList=$(mktemp)
-App32=$(mktemp)
-App64=$(mktemp)
-AppTitle=$(mktemp)
-AppType=$(mktemp)
-AppArch=$(mktemp)
-
-# Delete TempFiles on exit
-CleanExit () {
-	rm -f "$TempList"
-	rm -f "$App32"
-	rm -f "$App64"
-	rm -f "$AppTitle"
-	rm -f "$AppType"
-	rm -f "$AppArch"
-}
-trap CleanExit 0 1
-
-# Apps Title for both Templates
-jq '.templates[].title' "$pt32" | tr -d '"' > "$App32"
-jq '.templates[].title' "$pt64" | tr -d '"' > "$App64"
-cat "$App32" "$App64" | sort -uf > "$AppTitle"
-
-# Apps Type for both Templates
-jq '.templates[].type' "$pt32" | paste -d'|' "$App32" - > "$TempList"
-jq '.templates[].type' "$pt64" | paste -d'|' "$App64" - >> "$TempList"
-sort -uf "$TempList" > "$AppType"
-
 # Create AppList title
 # Create AppList title
 cp -f "$AppList_TEMPLATE" "$AppList"
 cp -f "$AppList_TEMPLATE" "$AppList"
 
 
 # Generate App Table
 # Generate App Table
-while IFS="" read -u 9 -r App || [ -n "$App" ]
-do
-	# Check System Version
-	grep -qx "$App" "$App32" && has32='32'
-	grep -qx "$App" "$App64" && has64='64'
+while IFS='' read -u 9 -r appfile || [[ -n $appfile ]]; do
+
+	# Clear previous variables
+	unset doc script extra vid oweb odoc type has32 has64
+
+	# Get app json
+	appconf=$( jq '.' "$appfile" )
+
+	# App Title
+	App=$( echo "$appconf" | jq '.title' | tr -d '"' )
+
+	# App Architecture
+	if echo "$appconf" | jq -e '.image' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile' &> /dev/null ; then
+		has32='32'
+		has64='64'
+	else
+		if echo "$appconf" | jq -e '.image32' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile32' &> /dev/null ; then has32='32' ; fi
+		if echo "$appconf" | jq -e '.image64' &> /dev/null || echo "$appconf" | jq -e '.repository.stackfile64' &> /dev/null ; then has64='64' ; fi
+
+	fi
 	[[ -n "$has32" && -n "$has64" ]] && Arch='32/64 bit' || Arch="$has32$has64 bit"
 	[[ -n "$has32" && -n "$has64" ]] && Arch='32/64 bit' || Arch="$has32$has64 bit"
 
 
-	# Get App Info
-	info=$(jq ".apps[] | select(.Title==\"$App\")" "$appinfo")
-	if [ "$info" != "" ] ; then
+	# Apps Type
+	apptype=$( echo "$appconf" | jq '.type' | tr -d '"' )
 
 
-		# Get App Webpage from app info
-		oweb=$(echo "$info" | jq ".Web" | tr -d '"' )
-		if [ "$oweb" != "null" ]; then
-			oweb="[$App]($oweb)"
-		else
-			oweb="$App"
-		fi
+	# Get App Webpage from app info
+	oweb=$(echo "$appconf" | jq ".webpage" | tr -d '"' )
+	if [ "$oweb" != "null" ]; then
+		oweb="[$App]($oweb)"
+	else
+		oweb="$App"
+	fi
 
 
-		# Get App Official Doc from app info
-		odoc=$(echo "$info" | jq ".OfficialDoc" | tr -d '"' )
-		if [ "$odoc" != "null" ]; then
-			odoc="[$docIconBlue]($odoc)"
-		else
-			unset odoc
-		fi
+	# Get App Official Doc from app info
+	odoc=$(echo "$appconf" | jq ".officialDoc" | tr -d '"' )
+	if [ "$odoc" != "null" ]; then
+		odoc="[$docIconBlue]($odoc)"
+	else
+		unset odoc
+	fi
 
 
-		# Get Doc from app info
-		docID=$(echo "$info" | jq ".DocID")
-		if [ "$docID" != "null" ]; then
-			doc=$(jq ".docs[] | select(.ID==$docID) | .File" "$appinfo" | tr -d '"')
-			doc="[$docIconRed]($Docs$doc)"
-		else
-			unset doc
-		fi
+	# Get Doc from app info
+	doc=$(echo "$appconf" | jq ".piHostedDoc" | tr -d '"' )
+	if [ "$doc" != "null" ]; then
+		doc="[$docIconRed]($Docs$doc)"
+	else
+		unset doc
+	fi
 
 
-		# Get Install Script from app info
-		scriptID=$(echo "$info" | jq ".ScriptID")
-		if [ "$scriptID" != "null" ]; then
-			script=$(jq ".tools[] | select(.ID==$scriptID) | .File" "$appinfo" | tr -d '"')
-			script="[$scriptIcon]($Scripts$script)"
-		else
-			unset script
-		fi
+	# Get Install Script from app info
+	script=$(echo "$appconf" | jq ".preInstallScript" | tr -d '"' )
+	if [ "$script" != "null" ]; then
+		script="[$scriptIcon]($Scripts$script)"
+	else
+		unset script
+	fi
 
 
-		# Get Extra Script from app info
-		extraID=$(echo "$info" | jq ".ExtraID")
-		if [ "$extraID" != "null" ]; then
-			# If only one entry
-			if [ "$(echo "$extraID" | wc -l )" == "1" ]; then
-				extra=$(jq ".tools[] | select(.ID==$extraID) | .File" "$appinfo" | tr -d '"')
-				extra="[$extra]($Extras$extra)"
-			
-			# If multiples entries
-			else
-				n_ext=$(echo "$extraID" | jq '. | length')
-				for n in $(seq 0 $(( n_ext - 1 ))); do
-					extID=$(echo "$extraID" | jq ".[$n]" | tr -d \")
-					ext=$(jq ".tools[] | select(.ID==$extID) | .File" "$appinfo" | tr -d '"')
-					if [ "$n" == "0" ]; then
-						txt="[$ext]($Extras$ext)"
-					else
-						txt="$txt<br>[$ext]($Extras$ext)"
-					fi
-				done
-				extra=$txt
-			fi
-		else
-			unset extra
-		fi
+	# Get Extra Script from app info
+	if ExtraScript=$( echo "$appconf" | jq -e '.extraScript' ) ; then
+		# If only one entry
+		if [ "$(echo "$ExtraScript" | wc -l )" == "1" ]; then
+			extra="[${ExtraScript:1:-1}]($Extras${ExtraScript:1:-1})"
 
 
-		# Get Video from app info
-		vid=$(echo "$info" | jq ".VideoID")
-		if [ "$vid" != "null" ] ; then
-			vidURL=$(jq ".youtube[] | select(.ID==$vid) | .URL" "$appinfo" | tr -d \")
-			vid="[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]($vidURL)"
+		# If multiples entries
 		else
 		else
-			unset vid
+			n_ext=$(echo "$ExtraScript" | jq '. | length')
+			for n in $(seq 0 $(( n_ext - 1 ))); do
+				ext=$(echo "$ExtraScript" | jq ".[$n]" | tr -d '"')
+				if [ "$n" == "0" ]; then
+					extra="[$ext]($Extras$ext)"
+				else
+					extra="$extra<br>[$ext]($Extras$ext)"
+				fi
+			done
 		fi
 		fi
-	
 	else
 	else
-		unset doc script extra vid oweb odoc
+		unset extra n_ext ExtraScript
 	fi
 	fi
 
 
+	# Get Video from app info
+	vid=$(echo "$appconf" | jq ".videoID")
+	if [ "$vid" != "null" ] ; then
+		vidURL=$(jq ".youtube[] | select(.ID==$vid) | .URL" "$appinfo" | tr -d '"')
+		vid="[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]($vidURL)"
+	else
+		unset vid
+	fi
+	
 	# Building App Line
 	# Building App Line
-	line="|$oweb|$Arch|$(grep "$App|" "$AppType" | cut -d'|' -f2 )| $odoc | $doc | $script | $extra | $vid |"
+	line="|$oweb|$Arch|$apptype| $odoc | $doc | $script | $extra | $vid |"
 
 
 	# Change container type to string (Default to Container when not set)
 	# Change container type to string (Default to Container when not set)
 	line="${line//|1|/|Container|}"
 	line="${line//|1|/|Container|}"
@@ -138,6 +113,4 @@ do
 	# Add line to List
 	# Add line to List
 	echo "$line" >> "$AppList"
 	echo "$line" >> "$AppList"
 
 
-	# Unset System variables
-	unset has32 has64
-done 9< "$AppTitle"
+done 9< <( LC_COLLATE=en_US.utf8 ls $appsfolder/*.json )

+ 3 - 18
build/generators/generateDocList.sh

@@ -11,10 +11,7 @@ homedir='../../'
 unset table
 unset table
 nDocs=$( jq '.docs | length' "$appinfo")
 nDocs=$( jq '.docs | length' "$appinfo")
 for doc in $(seq 0 $(( nDocs - 1 ))); do
 for doc in $(seq 0 $(( nDocs - 1 ))); do
-	info=$( jq ".docs | sort_by(.File) | .[$doc]" "$appinfo" )
-
-	# Get Doc ID
-	ID=$( echo "$info" | jq '.ID' | tr -d '"' )
+	info=$( jq ".docs | sort_by(.File | ascii_upcase) | .[$doc]" "$appinfo" )
 
 
 	# Get Doc Path
 	# Get Doc Path
 	FILE=$( echo "$info" | jq '.File' | tr -d '"' )
 	FILE=$( echo "$info" | jq '.File' | tr -d '"' )
@@ -23,23 +20,11 @@ for doc in $(seq 0 $(( nDocs - 1 ))); do
 	DESC=$( echo "$info" | jq '.Description' | tr -d '"' )
 	DESC=$( echo "$info" | jq '.Description' | tr -d '"' )
 
 
 	# YouTube Video
 	# YouTube Video
-	YT=$( jq ".youtube[] | select(.DocID==$ID) | .URL" "$appinfo" )
+	YT=$( jq ".youtube[] | select(.Doc==\"$FILE\") | .URL" "$appinfo" )
 	[ "$YT" != "" ] && YT="[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]($YT)"
 	[ "$YT" != "" ] && YT="[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]($YT)"
 
 
 	# Apps
 	# Apps
-	APPS=$( jq ".apps[] | select(.DocID==$ID) | .Title" "$appinfo" | tr -d '"' )
-	if [ "$APPS" != "" ] && [ "$( echo "$APPS" | wc -l)" -gt "1" ] ; then
-		unset temp_app
-		while IFS="" read -r app || [ -n "$app" ]
-		do
-			if [ -z "$temp_app" ] ; then
-				temp_app="$app"
-			else
-				temp_app="$temp_app<br>$app"
-			fi
-		done < <( echo "$APPS" )
-		APPS="$temp_app"
-	fi
+	APPS=$( grep -RlZ "$FILE" "$appsfolder" | xargs -0 jq '.title' | tr -d '"' | sed -e ':a' -e 'N' -e '$!ba' -e 's/\n/<br>/g' )
 
 
 	line="|[$FILE]($Docs$FILE)|$DESC|$APPS|$YT|"
 	line="|[$FILE]($Docs$FILE)|$DESC|$APPS|$YT|"
 	if [ "$doc" == "0" ] ; then
 	if [ "$doc" == "0" ] ; then

+ 3 - 4
build/generators/generateREADME.sh

@@ -45,10 +45,9 @@ for vid in $(seq 0 $(( nVideos - 1 ))); do
 	TITLE=$( echo "$info" | jq '.Title' | tr -d '"' )
 	TITLE=$( echo "$info" | jq '.Title' | tr -d '"' )
 
 
 	# Get Video Documentation
 	# Get Video Documentation
-	DocID=$( echo "$info" | jq '.DocID' )
-	if [ "$DocID" != "null" ] ; then
-		DocFile=$( jq ".docs[] | select(.ID==$DocID) | .File" "$appinfo" | tr -d '"' )
-		DocMD="[Install Doc]($Docs$DocFile)"
+	Doc=$( echo "$info" | jq '.Doc' | tr -d '"' )
+	if [ "$Doc" != "null" ] ; then
+		DocMD="[Install Doc]($Docs$Doc)"
 	else
 	else
 		unset DocMD
 		unset DocMD
 	fi
 	fi

+ 3 - 4
build/generators/generateToolsREADME.sh

@@ -37,10 +37,9 @@ for tool in $(seq 0 $(( nTools - 1 ))); do
 	fi
 	fi
 
 
 	# Get Tool Installation Doc
 	# Get Tool Installation Doc
-	DocID=$( echo "$info" | jq '.DocID')
-	if [ "$DocID" != "null" ]; then
-		DocFile=$(jq ".docs[] | select(.ID==$DocID) | .File" "$appinfo" | tr -d '"')
-		DocLink="[Documentation]($Docs$DocFile)"
+	Doc=$( echo "$info" | jq '.Doc' | tr -d '"' )
+	if [ "$Doc" != "null" ]; then
+		DocLink="[Documentation]($Docs$Doc)"
 	else
 	else
 		unset DocLink
 		unset DocLink
 	fi
 	fi

+ 207 - 0
build/info.json

@@ -0,0 +1,207 @@
+{
+	"youtube": [
+		{
+			"ID": 1,
+			"Title": "Raspberry Pi 4 Server Setup, Docker Install, Portainer Install, Shell In A Box",
+			"URL": "https://www.youtube.com/watch?v=cO2-gQ09Jj0&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=1"
+		},
+		{
+			"ID": 2,
+			"Title": "Installing and Configuring Homer Dashboard",
+			"URL": "https://www.youtube.com/watch?v=_d3J88ootYo&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=2"
+		},
+		{
+			"ID": 3,
+			"Title": "Manually Installing Guacamole on Portainer",
+			"URL": "https://www.youtube.com/watch?v=cKAhnf8X1lo&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=3"
+		},
+		{
+			"ID": 4,
+			"Title": "Installing JDownloader and File Browser On The Pi Docker Server",
+			"URL": "https://www.youtube.com/watch?v=30MYRgCObu8&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=4"
+		},
+		{
+			"ID": 5,
+			"Title": "Torrent with Docker and OPENVPN with Transmission and PIA",
+			"URL": "https://www.youtube.com/watch?v=tGLVEq913_4&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=5"
+		},
+		{
+			"ID": "Extra1",
+			"Title": "Portainer.io App Template for Raspberry Pi arm/arm64 I Need Your Help!",
+			"URL": "https://www.youtube.com/watch?v=Zn-VELlaIN4&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=6"
+		},
+		{
+			"ID": 6,
+			"Title": "Upgrading Portainer and Updating Containers",
+			"URL": "https://www.youtube.com/watch?v=q3wKqk8qVS8&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=7"
+		},
+		{
+			"ID": 7,
+			"Title": "Raspberry Pi Docker Monitoring",
+			"URL": "https://www.youtube.com/watch?v=IoD3vFuep64&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=8",
+			"Doc": "rpi_docker_monitor.md"
+		},
+		{
+			"ID": 8,
+			"Title": "Installing Nextcloud on Raspberry Pi Docker",
+			"URL": "https://www.youtube.com/watch?v=E6IrT3g5Gqc&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=9"
+		},
+		{
+			"ID": 9,
+			"Title": "Installing Nginx Proxy Manager on Docker",
+			"URL": "https://www.youtube.com/watch?v=yl2Laxbqvo8&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=10",
+			"Doc": "nginx_proxy_manager.md"
+		},
+		{
+			"ID": 10,
+			"Title": "Setting up Raspberry Pi Samba Server For File Sharing on Docker",
+			"URL": "https://www.youtube.com/watch?v=2zZ3_1GRWrM&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=11"
+		},
+		{
+			"ID": 11,
+			"Title": "How to Install Whoogle to replace using Google and repo notes",
+			"URL": "https://www.youtube.com/watch?v=j3ZGxo3ibUs&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=12"
+		},
+		{
+			"ID": 12,
+			"Title": "Checking out Windows 2000 Docker",
+			"URL": "https://www.youtube.com/watch?v=57Gnp0424Qc&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=13"
+		}
+	],
+	"docs": [
+		{
+			"File": "UnPoller-Monitor.md",
+			"Description": "Install and setup instructions for the RPI Unifi (UnPoller) Monitor"
+		},
+		{
+			"File": "nginx_proxy_manager.md",
+			"Description": "Install and setup instructions for Nginx Proxy Manager (NPM)"
+		},
+		{
+			"File": "rpi_docker_monitor.md",
+			"Description": "Install and setup instructions for the RPI Docker Monitor"
+		},
+		{
+			"File": "wireguard-install.md",
+			"Description": "Install and setup instructions for the WireGuard VPN Server"
+		},
+		{
+			"File": "wordpress_installation.md",
+			"Description": "WORDPRESS + SSL SETUP"
+		},
+		{
+			"File": "throttled.md",
+			"Description": "Install and Setup Instructions for the Throttled Script"
+		},
+		{
+			"File": "pi-hole.md",
+			"Description": "Install and Setup Pi-Hole for Network-Wide Ad Block"
+		},
+		{
+			"File": "macvlan_setup.md",
+			"Description": "Attach a container directly to local network (macvlan)"
+		},
+		{
+			"File": "photoprism.md",
+			"Description": "Install and Setup Instructions for PhotoPrism Stack"
+		},
+		{
+			"File": "searxng.md",
+			"Description": "Install and Setup Instructions for SearXNG Meta Search"
+		}
+	],
+	"tools": [
+		{
+			"File": "install_caddy.sh",
+			"Type": "Preinstall",
+			"Exec": "bash",
+			"Description": "Preinstall Setup for Caddy",
+			"wget": "https://git.io/JMsEe"
+		},
+		{
+			"File": "install_drupal.sh",
+			"Type": "Preinstall",
+			"Exec": "bash",
+			"Description": "Preinstall Setup for Drupal",
+			"wget": "https://git.io/JMsEj"
+		},
+		{
+			"File": "install_portainer_agent.sh",
+			"Type": "Preinstall",
+			"Description": "Install Portainer Agent<br>Portainer agent is used for remote management of the host you install it on."
+		},
+		{
+			"File": "update_portainer_agent.sh",
+			"Type": "Update",
+			"Description": "Upgrade Portainer Agent"
+		},
+		{
+			"File": "install_throttled.sh",
+			"Type": "Install",
+			"Exec": "bash",
+			"Description": "Preinstall Setup for the Throttled Script",
+			"Doc": "throttled.md",
+			"wget": "https://git.io/JXzw0"
+		},
+		{
+			"File": "install_vikunja.sh",
+			"Type": "Preinstall",
+			"Exec": "bash",
+			"Description": "Preinstall Setup for Vikunja",
+			"wget": "https://git.io/JMsuZ"
+		},
+		{
+			"File": "nginx-proxy-manager.sh",
+			"Type": "Preinstall",
+			"Exec": "bash",
+			"Description": "Preinstall Setup for NPM",
+			"Doc": "nginx_proxy_manager.md",
+			"wget": "https://git.io/JPXF5"
+		},
+		{
+			"File": "reset_premissions_nextcloud.sh",
+			"Type": "Extra",
+			"Exec": "bash",
+			"Description": "Basic Script to reset the premissions of NextcloudPi",
+			"wget": "https://git.io/JDklN"
+		},
+		{
+			"File": "rpi_docker_monitor.sh",
+			"Type": "Preinstall",
+			"Exec": "bash",
+			"Description": "Preinstall Setup for Docker Monitor",
+			"Doc": "rpi_docker_monitor.md",
+			"wget": "https://git.io/JPXba"
+		},
+		{
+			"File": "traefik.sh",
+			"Type": "Preinstall",
+			"Exec": "bash",
+			"Description": "Preinstall Setup for Traefik",
+			"wget": "https://git.io/JMsuA"
+		},
+		{
+			"File": "unpoller-install.sh",
+			"Type": "Preinstall",
+			"Exec": "bash",
+			"Description": "Preinstall Setup for UnPoller",
+			"Doc": "UnPoller-Monitor.md",
+			"wget": "https://git.io/JMszE"
+		},
+		{
+			"File": "install_photoprism.sh",
+			"Type": "Preinstall",
+			"Exec": "bash",
+			"Doc": "photoprism.md",
+			"Description": "Install Photo Prism",
+			"wget": "https://git.io/JM5Tr"
+		},
+		{
+			"File": "update_libseccomp2.sh",
+			"Type": "Update",
+			"Exec": "bash",
+			"Description": "PI OS 32 libseccomp2 Repair utility",
+			"wget": "https://git.io/JPXdj"
+		}
+	]
+}

+ 150 - 0
build/joinApps.sh

@@ -0,0 +1,150 @@
+#!/bin/bash
+
+# Blank portainer template (32 and 64 bits)
+json32='{"version":"2","templates":[]}'
+json64='{"version":"2","templates":[]}'
+
+# File variables
+appinfo='build/info.json'
+Oldtemplate32='pi-hosted_template/template/portainer-v2.json'
+template32='template/portainer-v2-arm32.json'
+template64='template/portainer-v2-arm64.json'
+
+# App info
+repo='https://github.com/pi-hosted/pi-hosted/blob/master/'
+header='<h3>Template created by Pi-Hosted Series</h3><b>Check our Github page: <a href="https://github.com/pi-hosted/pi-hosted" target="_blank">https://github.com/pi-hosted/pi-hosted</a></b><br>'
+
+# Run script from base directory
+scriptDir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
+cd "$scriptDir/.." || exit
+
+# Parsing all json files in apps folder
+for app in template/apps/*.json; do
+	# Adding app template to 32 and 64 bits variables
+	appjson=$( cat "$app" )
+
+	# Improve Notes
+	note=$( echo "$appjson" | jq '.note' )
+	# Clean Notes
+	[ "$note" == "null" ] && unset note
+	note=${note:1: -1}
+
+	# Official Webpage
+	if oweb=$( echo "$appjson" | jq -e '.webpage' ) ; then
+		oweb="<br><b>Official Webpage: </b><a href=\"${oweb:1:-1}\" target=\"_blank\">${oweb:1:-1}</a>"
+		appjson=$( echo "$appjson" | jq 'del(.webpage)' )
+	else
+		unset oweb
+	fi
+
+	# Official Documentation
+	if odoc=$( echo "$appjson" | jq -e '.officialDoc' ) ; then
+		odoc="<br><b>Official Docker Documentation: </b><a href=\"${odoc:1:-1}\" target=\"_blank\">${odoc:1:-1}</a>"
+		appjson=$( echo "$appjson" | jq 'del(.officialDoc)' )
+	else
+		unset odoc
+	fi
+
+	# Pi-Hosted Documentation
+	if PHDoc=$( echo "$appjson" | jq -e '.piHostedDoc' ) ; then
+		PHDoc="<br><b>Pi-Hosted dedicated documentation: </b><a href=\"${repo}docs/${PHDoc:1:-1}\" target=\"_blank\">${PHDoc:1:-1}</a>"
+		appjson=$( echo "$appjson" | jq 'del(.piHostedDoc)' )
+	else
+		unset PHDoc
+	fi
+
+	if Script=$( echo "$appjson" | jq -e '.preInstallScript' ) ; then
+		Script="<br><b>Pre-installation script: </b><a href=\"${repo}tools/${Script:1:-1}\" target=\"_blank\">${Script:1:-1}</a>"
+		appjson=$( echo "$appjson" | jq 'del(.preInstallScript)' )
+	else
+		unset Script
+	fi
+
+	if VideoID=$( echo "$appjson" | jq -e '.videoID' ) ; then
+		VideoURL=$( jq '.youtube[] | select(.ID=='"$VideoID"') | .URL' "$appinfo" )
+		VideoTitle=$( jq '.youtube[] | select(.ID=='"$VideoID"') | .Title' "$appinfo" | tr -d '"')
+		VideoURL="<br><b>Youtube Video: </b><a href=$VideoURL target=\"_blank\">$VideoTitle</a><br>"
+		appjson=$( echo "$appjson" | jq 'del(.videoID)' )
+	else
+		unset VideoID VideoURL
+	fi
+
+	if ExtraScript=$( echo "$appjson" | jq -e '.extraScript' ) ; then
+		appjson=$( echo "$appjson" | jq 'del(.extraScript)' )
+		# If only one entry
+		if [ "$(echo "$ExtraScript" | wc -l )" == "1" ]; then
+			ExtraHTML="<br><b>Extra useful script: </b><a href=\"${repo}tools/${ExtraScript:1:-1}\" target=\"_blank\">${ExtraScript:1:-1}</a>"
+
+		# If multiples entries
+		else
+			n_ext=$(echo "$ExtraScript" | jq '. | length')
+			ExtraHTML="<br><b>Extra useful scripts:</b><br><ul>"
+			for n in $(seq 0 $(( n_ext - 1 ))); do
+				ext=$(echo "$ExtraScript" | jq ".[$n]" | tr -d '"')
+				ExtraHTML="$ExtraHTML<li><a href=\"${repo}tools/${ext}\" target=\"_blank\">$ext</a></li>"
+			done
+			ExtraHTML="$ExtraHTML</ul>"
+		fi
+	else
+		unset ExtraHTML ExtraScript
+	fi
+
+	# Full Compiled Note
+	note="$header$oweb$odoc$PHDoc<br>$Script$ExtraHTML<br>$VideoURL<br>$note"
+
+	appjson=$( echo "$appjson" | jq --arg n "$note" '.note = $n' )
+
+	# Splitting into 32 and 64 bit jsons
+	appjson32=$appjson
+	appjson64=$appjson
+
+	# Check if app is to be applied to all (no arch identified)
+	# If there is no indication of architecture (32 or 64) on image or stackfile keys
+	#   it's to assume that app is to be applied to both templates
+	#   else apply specific image/stackfile to indicated architecture
+	if  ! echo "$appjson" | grep -qE '"(image|stackfile)":' ; then
+
+		# Parsing 32 bit apps (check if there is an image32 or stackfile32)
+		if  echo "$appjson32" | grep -qE '"(image|stackfile)32":' ; then
+			# Remove 64 bit info
+			appjson32=$( echo "$appjson32" | sed -E 's/"(image|stackfile)32":/"\1":/' )
+		else
+			# App does not contain 32bit template
+			unset appjson32
+		fi
+
+		# Parsing 64 bit apps
+		if  echo "$appjson64" | grep -qE '"(image|stackfile)64":' ; then
+			appjson64=$( echo "$appjson64" | sed -E 's/"(image|stackfile)64":/"\1":/' )
+		else
+			# App does not contain 64bit template
+			unset appjson64
+		fi
+
+	fi
+
+
+	# Appending to json32
+	if [[ -n "$appjson32" ]]; then
+		# Cleaning App json before adding to template
+		appjson32=$( echo "$appjson32" | jq 'del(.image32, .image64, .repository.stackfile32, .repository.stackfile64)')
+		json32=$( echo "$json32" | jq --argjson newApp "$appjson32" '.templates += [$newApp]' )
+	fi
+
+	# Appending to json64
+	if [[ -n "$appjson64" ]]; then
+		# Cleaning App json before adding to template
+		appjson64=$( echo "$appjson64" | jq 'del(.image32, .image64, .repository.stackfile32, .repository.stackfile64)')
+		json64=$( echo "$json64" | jq --argjson newApp "$appjson64" '.templates += [$newApp]' )
+	fi
+
+	# clean variables before next loop
+	unset appjson32 appjson64 note
+done
+
+# Create Templates
+echo "$json32" | jq --tab '.templates |= sort_by(.title | ascii_upcase)' > "$template32"
+echo "$json64" | jq --tab '.templates |= sort_by(.title | ascii_upcase)' > "$template64"
+
+# Keep old template up to date
+cp -f "$template32" "$Oldtemplate32"

+ 17 - 3
build/pre-commit

@@ -11,7 +11,7 @@ git --version &> /dev/null || error "git is required, please install it with 'su
 sha256sum --version &> /dev/null || error "sha256sum is required, please install it with 'sudo apt install coreutils'"
 sha256sum --version &> /dev/null || error "sha256sum is required, please install it with 'sudo apt install coreutils'"
 
 
 # Check if script from build or script from hook and cd into build folder
 # Check if script from build or script from hook and cd into build folder
-scriptDir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null || pwd )"
+scriptDir="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
 if [ "$( echo "$scriptDir" | rev | cut -d/ -f1 | rev )" == "build" ]; then
 if [ "$( echo "$scriptDir" | rev | cut -d/ -f1 | rev )" == "build" ]; then
 	cd -- "$scriptDir" &> /dev/null || exit
 	cd -- "$scriptDir" &> /dev/null || exit
 else
 else
@@ -22,13 +22,25 @@ fi
 homedir='../'
 homedir='../'
 . env.sh
 . env.sh
 
 
+# Variable to update
+doUpdate=false
+
+# Check if there is a new app
+CurrentNumOfApps=$( ls "$appsfolder" | wc -l )
+PreviousNumOfApps=$( head -n -1 "$verificationFile" | wc -l)
+[[ $CurrentNumOfApps -eq $PreviousNumOfApps ]] || doUpdate=true
+
 # Check if Template or appinfo has changed
 # Check if Template or appinfo has changed
-if ! sha256sum -c --quiet "$verificationFile" &> /dev/null ; then
+sha256sum -c --quiet "$verificationFile" &> /dev/null || doUpdate=true
+
+if $doUpdate ; then
+
 	# Make sure tmp folder exists
 	# Make sure tmp folder exists
 	mkdir -p "$( dirname -- "$verificationFile" )"
 	mkdir -p "$( dirname -- "$verificationFile" )"
 
 
 	echo "Updating documentation..."
 	echo "Updating documentation..."
 	# Run all scripts
 	# Run all scripts
+	./joinApps.sh
 	./generators/generateAppList.sh
 	./generators/generateAppList.sh
 	./generators/generateDocList.sh
 	./generators/generateDocList.sh
 	./generators/generateREADME.sh
 	./generators/generateREADME.sh
@@ -36,11 +48,13 @@ if ! sha256sum -c --quiet "$verificationFile" &> /dev/null ; then
 	echo "Update finished"
 	echo "Update finished"
 
 
 	# Update lastrun.sha256
 	# Update lastrun.sha256
-	sha256sum "$appinfo" "$pt32" "$pt64" > "$verificationFile" 
+	sha256sum "$appinfo" > "$verificationFile" 
+	find "$appsfolder" -type f -name '*.json' -exec sha256sum {} + >> "$verificationFile"
 
 
 	# Add files to stagging
 	# Add files to stagging
 	git add -- "$README"
 	git add -- "$README"
 	git add -- "$TOOLSREADME"
 	git add -- "$TOOLSREADME"
 	git add -- "$AppList"
 	git add -- "$AppList"
 	git add -- "$DocList"
 	git add -- "$DocList"
+
 fi
 fi

+ 86 - 0
build/splitJson.sh

@@ -0,0 +1,86 @@
+#!/bin/bash
+
+t32b='../template/portainer-v2-arm32.json'
+t64b='../template/portainer-v2-arm64.json'
+appinfo='./appinfo.json'
+appsfolder='../template/apps'
+
+mkdir -p "$appsfolder"
+
+Napps=$( jq '.templates | length' "$t64b" )
+for app in $(seq 0 $(( Napps - 1 ))); do
+	info=$( jq ".templates[$app]" "$t64b" )
+	Title=$( echo "$info" | jq ".title" )
+	Type=$( echo "$info" | jq ".type" )
+
+	fileName="$appsfolder/$( echo "$Title" | tr -d '"' | tr '[:upper:]' '[:lower:]' | tr ' /' '--' ).json"
+
+	info=$( echo "$info" | sed 's/"image":/"image64":/g' | sed 's/"stackfile":/"stackfile64":/g' )
+
+	has32=$( jq 'any(.templates[].title=='"$Title"'; .)' "$t32b" )
+	if $has32; then
+		if [ "$Type" == "3" ]; then
+			stack32=$( jq '.templates[] | select(.title=='"$Title"') | .repository.stackfile' "$t32b" )
+			info=$( echo "$info" | jq '.repository += {"stackfile32": '"$stack32"'}' )
+		else
+			img32=$( jq '.templates[] | select(.title=='"$Title"') | .image' "$t32b" )
+			info=$( echo "$info" | jq '. += {"image32": '"$img32"'}' )
+		fi
+	fi
+
+	json=$( jq '.apps[] | select(.Title=='"$Title"')' "$appinfo" )
+
+	# Web
+	if value=$( echo "$json" | jq -e '.Web' | tr -d '"' ) ; then
+		info=$( echo "$info" | jq --arg v "$value" '. += {"webpage": $v}' )
+	fi
+
+	# Official Documentation
+	if value=$( echo "$json" | jq -e '.OfficialDoc' | tr -d '"' ) ; then
+		info=$( echo "$info" | jq --arg v "$value" '. += {"officialDoc": $v}' )
+	fi
+
+	# Youtube Video
+	if value=$( echo "$json" | jq -e '.VideoID' ) ; then
+		info=$( echo "$info" | jq '. += {"videoID": '"$value"'}' )
+	fi
+
+	# Pi-Hosted Doc
+	if id=$( echo "$json" | jq -e '.DocID' ) ; then
+		value=$( jq '.docs[] | select(.ID=='"$id"') | .File' "$appinfo" | tr -d '"' )
+		info=$( echo "$info" | jq --arg v "$value" '. += {"piHostedDoc": $v}' )
+	fi
+
+	# Pre-Install Script Doc
+	if id=$( echo "$json" | jq -e '.ScriptID' ) ; then
+		value=$( jq '.tools[] | select(.ID=='"$id"') | .File' "$appinfo" | tr -d '"' )
+		info=$( echo "$info" | jq --arg v "$value" '. += {"preInstallScript": $v}' )
+	fi
+
+	# Extra scripts
+	if ExtraID=$( echo "$json" | jq -e '.ExtraID' ) ; then
+		# If only one entry
+		if [ "$(echo "$ExtraID" | wc -l )" == "1" ]; then
+			value=$(jq ".tools[] | select(.ID==$ExtraID) | .File" "$appinfo" | tr -d '"' )
+			info=$( echo "$info" | jq --arg v "$value" '. += {"extraScript": $v}' )
+
+		# If multiples entries
+		else
+			n_ext=$(echo "$ExtraID" | jq '. | length')
+			value='['
+			for n in $(seq 0 $(( n_ext - 1 ))); do
+				extID=$(echo "$ExtraID" | jq ".[$n]" | tr -d \")
+				v=$(jq ".tools[] | select(.ID==$extID) | .File" "$appinfo" | tr -d '"')
+				value="$value $v,"
+			done
+			value="${value:0:-1} ]"
+			info=$( echo "$info" | jq --arg v "$value" '. += {"extraScript": $v}' )
+		fi
+	else
+		unset ExtraURL ExtraID
+	fi
+
+	echo "$info" | jq --tab --sort-keys '.' > "$fileName"
+
+	unset has32 info Title Type img32 stack32 fileName
+done

+ 3 - 3
docs/AppList.md

@@ -6,8 +6,8 @@ List of all apps included in this project with info related to it.
 
 
 |App Title|System|Type |Official<br>Doc|PiHosted<br>Doc|Install Script|Extra Scripts|Youtube Video|
 |App Title|System|Type |Official<br>Doc|PiHosted<br>Doc|Install Script|Extra Scripts|Youtube Video|
 |:--------|:----:|:---:|:-------------:|:-------------:|:------------:|:------------|:-----------:|
 |:--------|:----:|:---:|:-------------:|:-------------:|:------------:|:------------|:-----------:|
-|[Airsonic](https://airsonic.github.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://airsonic.github.io/docs/install/docker/) |  |  |  |  |
 |[Airsonic Advanced](https://github.com/airsonic-advanced/airsonic-advanced)|64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/linuxserver/docker-airsonic-advanced) |  |  |  |  |
 |[Airsonic Advanced](https://github.com/airsonic-advanced/airsonic-advanced)|64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/linuxserver/docker-airsonic-advanced) |  |  |  |  |
+|[Airsonic](https://airsonic.github.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://airsonic.github.io/docs/install/docker/) |  |  |  |  |
 |[Archivebox](https://archivebox.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/ArchiveBox/ArchiveBox/wiki/Docker) |  |  |  |  |
 |[Archivebox](https://archivebox.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/ArchiveBox/ArchiveBox/wiki/Docker) |  |  |  |  |
 |[Authelia](https://www.authelia.com/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://www.authelia.com/docs/configuration/) |  |  |  |  |
 |[Authelia](https://www.authelia.com/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://www.authelia.com/docs/configuration/) |  |  |  |  |
 |[Bazarr](https://www.bazarr.media/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://wiki.bazarr.media/Getting-Started/Installation/Docker/docker/) |  |  |  |  |
 |[Bazarr](https://www.bazarr.media/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://wiki.bazarr.media/Getting-Started/Installation/Docker/docker/) |  |  |  |  |
@@ -51,8 +51,8 @@ List of all apps included in this project with info related to it.
 |[Headphones](https://github.com/rembo10/headphones)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-headphones) |  |  |  |  |
 |[Headphones](https://github.com/rembo10/headphones)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-headphones) |  |  |  |  |
 |[Heimdall](https://heimdall.site/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-heimdall) |  |  |  |  |
 |[Heimdall](https://heimdall.site/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-heimdall) |  |  |  |  |
 |[Home Assistant](https://www.home-assistant.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://www.home-assistant.io/installation/raspberrypi#install-home-assistant-container) |  |  |  |  |
 |[Home Assistant](https://www.home-assistant.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://www.home-assistant.io/installation/raspberrypi#install-home-assistant-container) |  |  |  |  |
-|[Homebridge](https://homebridge.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker) |  |  |  |  |
 |[Homebridge - Debian](https://homebridge.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker) |  |  |  |  |
 |[Homebridge - Debian](https://homebridge.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker) |  |  |  |  |
+|[Homebridge](https://homebridge.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker) |  |  |  |  |
 |[Homer](https://github.com/bastienwirtz/homer)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/bastienwirtz/homer/blob/main/docs/configuration.md) |  |  |  | [![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)](https://www.youtube.com/watch?v=_d3J88ootYo&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=2) |
 |[Homer](https://github.com/bastienwirtz/homer)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/bastienwirtz/homer/blob/main/docs/configuration.md) |  |  |  | [![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)](https://www.youtube.com/watch?v=_d3J88ootYo&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=2) |
 |[HTPC Manager](https://htpc.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-htpcmanager) |  |  |  |  |
 |[HTPC Manager](https://htpc.io/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-htpcmanager) |  |  |  |  |
 |[Huginn](https://github.com/huginn/huginn)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/huginn/huginn/tree/master/docker) |  |  |  |  |
 |[Huginn](https://github.com/huginn/huginn)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/huginn/huginn/tree/master/docker) |  |  |  |  |
@@ -96,8 +96,8 @@ List of all apps included in this project with info related to it.
 |[Paperless](https://github.com/jonaswinkler/paperless-ng)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-paperless-ng) |  |  |  |  |
 |[Paperless](https://github.com/jonaswinkler/paperless-ng)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-paperless-ng) |  |  |  |  |
 |[PhotoPrism](https://photoprism.app/)|64 bit|Stack| [![](../build/images/blue_doc_icon.png)](https://docs.photoprism.app/getting-started/docker-compose/) | [![](../build/images/red_doc_icon.png)](../docs/photoprism.md) | [![](../build/images/script_icon.png)](../tools/install_photoprism.sh) |  |  |
 |[PhotoPrism](https://photoprism.app/)|64 bit|Stack| [![](../build/images/blue_doc_icon.png)](https://docs.photoprism.app/getting-started/docker-compose/) | [![](../build/images/red_doc_icon.png)](../docs/photoprism.md) | [![](../build/images/script_icon.png)](../tools/install_photoprism.sh) |  |  |
 |[PhotoShow](https://github.com/thibaud-rohmer/PhotoShow)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-photoshow) |  |  |  |  |
 |[PhotoShow](https://github.com/thibaud-rohmer/PhotoShow)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-photoshow) |  |  |  |  |
-|[Pi-Hole](https://pi-hole.net/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/pi-hole/docker-pi-hole/#running-pi-hole-docker) | [![](../build/images/red_doc_icon.png)](../docs/pi-hole.md) |  |  |  |
 |[Pi-Hole DoH/DoT](https://pi-hole.net/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://hub.docker.com/r/oijkn/pihole-doh-dot) | [![](../build/images/red_doc_icon.png)](../docs/pi-hole.md) |  |  |  |
 |[Pi-Hole DoH/DoT](https://pi-hole.net/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://hub.docker.com/r/oijkn/pihole-doh-dot) | [![](../build/images/red_doc_icon.png)](../docs/pi-hole.md) |  |  |  |
+|[Pi-Hole](https://pi-hole.net/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/pi-hole/docker-pi-hole/#running-pi-hole-docker) | [![](../build/images/red_doc_icon.png)](../docs/pi-hole.md) |  |  |  |
 |[Pi-Hole-Unbound](https://pi-hole.net/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/chriscrowe/docker-pihole-unbound/tree/master/one-container) | [![](../build/images/red_doc_icon.png)](../docs/pi-hole.md) |  |  |  |
 |[Pi-Hole-Unbound](https://pi-hole.net/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://github.com/chriscrowe/docker-pihole-unbound/tree/master/one-container) | [![](../build/images/red_doc_icon.png)](../docs/pi-hole.md) |  |  |  |
 |[Piwigo](http://piwigo.org/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-piwigo) |  |  |  |  |
 |[Piwigo](http://piwigo.org/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-piwigo) |  |  |  |  |
 |[Plex](https://www.plex.tv/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-plex) |  |  |  |  |
 |[Plex](https://www.plex.tv/)|32/64 bit|Container| [![](../build/images/blue_doc_icon.png)](https://docs.linuxserver.io/images/docker-plex) |  |  |  |  |

+ 2 - 2
docs/DocumentList.md

@@ -7,13 +7,13 @@ List of all Documents used within this project with related Apps and Videos.
 
 
 | File Name | Description | Related Apps | YouTube |
 | File Name | Description | Related Apps | YouTube |
 | --------- | ----------- | ------------ |:-------:|
 | --------- | ----------- | ------------ |:-------:|
-|[UnPoller-Monitor.md](../docs/UnPoller-Monitor.md)|Install and setup instructions for the RPI Unifi (UnPoller) Monitor|UnPoller Monitor||
 |[macvlan_setup.md](../docs/macvlan_setup.md)|Attach a container directly to local network (macvlan)|||
 |[macvlan_setup.md](../docs/macvlan_setup.md)|Attach a container directly to local network (macvlan)|||
 |[nginx_proxy_manager.md](../docs/nginx_proxy_manager.md)|Install and setup instructions for Nginx Proxy Manager (NPM)|Nginx Proxy Manager|[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]("https://www.youtube.com/watch?v=yl2Laxbqvo8&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=10")|
 |[nginx_proxy_manager.md](../docs/nginx_proxy_manager.md)|Install and setup instructions for Nginx Proxy Manager (NPM)|Nginx Proxy Manager|[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]("https://www.youtube.com/watch?v=yl2Laxbqvo8&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=10")|
 |[photoprism.md](../docs/photoprism.md)|Install and Setup Instructions for PhotoPrism Stack|PhotoPrism||
 |[photoprism.md](../docs/photoprism.md)|Install and Setup Instructions for PhotoPrism Stack|PhotoPrism||
-|[pi-hole.md](../docs/pi-hole.md)|Install and Setup Pi-Hole for Network-Wide Ad Block|Pi-Hole<br>Pi-Hole DoH/DoT<br>Pi-Hole-Unbound||
+|[pi-hole.md](../docs/pi-hole.md)|Install and Setup Pi-Hole for Network-Wide Ad Block|Pi-Hole-Unbound<br>Pi-Hole DoH/DoT<br>Pi-Hole||
 |[rpi_docker_monitor.md](../docs/rpi_docker_monitor.md)|Install and setup instructions for the RPI Docker Monitor|Raspberry Pi Docker Monitor|[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]("https://www.youtube.com/watch?v=IoD3vFuep64&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=8")|
 |[rpi_docker_monitor.md](../docs/rpi_docker_monitor.md)|Install and setup instructions for the RPI Docker Monitor|Raspberry Pi Docker Monitor|[![YouTube](https://img.shields.io/badge/YouTube-FF0000?style=plastic&logo=youtube&logoColor=white)]("https://www.youtube.com/watch?v=IoD3vFuep64&list=PL846hFPMqg3jwkxcScD1xw2bKXrJVvarc&index=8")|
 |[searxng.md](../docs/searxng.md)|Install and Setup Instructions for SearXNG Meta Search|SearXNG||
 |[searxng.md](../docs/searxng.md)|Install and Setup Instructions for SearXNG Meta Search|SearXNG||
 |[throttled.md](../docs/throttled.md)|Install and Setup Instructions for the Throttled Script|||
 |[throttled.md](../docs/throttled.md)|Install and Setup Instructions for the Throttled Script|||
+|[UnPoller-Monitor.md](../docs/UnPoller-Monitor.md)|Install and setup instructions for the RPI Unifi (UnPoller) Monitor|UnPoller Monitor||
 |[wireguard-install.md](../docs/wireguard-install.md)|Install and setup instructions for the WireGuard VPN Server|Wireguard Server||
 |[wireguard-install.md](../docs/wireguard-install.md)|Install and setup instructions for the WireGuard VPN Server|Wireguard Server||
 |[wordpress_installation.md](../docs/wordpress_installation.md)|WORDPRESS + SSL SETUP|Wordpress||
 |[wordpress_installation.md](../docs/wordpress_installation.md)|WORDPRESS + SSL SETUP|Wordpress||

Dosya farkı çok büyük olduğundan ihmal edildi
+ 267 - 227
pi-hosted_template/template/portainer-v2.json


+ 67 - 0
template/apps/airsonic-advanced.json

@@ -0,0 +1,67 @@
+{
+	"categories": [
+		"Music"
+	],
+	"description": "Airsonic Advanced is a free, web-based media streamer, providing ubiqutious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"default": "airsonic",
+			"label": "CONTEXT_PATH",
+			"name": "CONTEXT_PATH"
+		},
+		{
+			"default": "-Xms256m -Xmx512m",
+			"label": "JAVA_OPTS",
+			"name": "JAVA_OPTS"
+		}
+	],
+	"image64": "linuxserver/airsonic-advanced:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/airsonic-logo.png",
+	"name": "airsonic-advanced",
+	"officialDoc": "https://github.com/linuxserver/docker-airsonic-advanced",
+	"platform": "linux",
+	"ports": [
+		"4040:4040/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Airsonic Advanced",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Music",
+			"container": "/music"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Airsonic-Advanced/Playlists",
+			"container": "/playlists"
+		},
+		{
+			"bind": "/portainer/Podcasts",
+			"container": "/podcasts"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Airsonic-Advanced/Media",
+			"container": "/media"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Airsonic-Advanced/config/",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://github.com/airsonic-advanced/airsonic-advanced"
+}

+ 68 - 0
template/apps/airsonic.json

@@ -0,0 +1,68 @@
+{
+	"categories": [
+		"Music"
+	],
+	"description": "[DEPRECATED] Airsonic is a free, web-based media streamer, providing ubiqutious access to your music. Use it to share your music with friends, or to listen to your own music while at work. You can stream to multiple players simultaneously, for instance to one player in your kitchen and another in your living room.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"default": "airsonic",
+			"label": "CONTEXT_PATH",
+			"name": "CONTEXT_PATH"
+		},
+		{
+			"default": "-Xms256m -Xmx512m",
+			"label": "JAVA_OPTS",
+			"name": "JAVA_OPTS"
+		}
+	],
+	"image32": "linuxserver/airsonic:arm32v7-latest",
+	"image64": "linuxserver/airsonic:arm64v8-latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/airsonic-logo.png",
+	"name": "airsonic",
+	"officialDoc": "https://airsonic.github.io/docs/install/docker/",
+	"platform": "linux",
+	"ports": [
+		"4040:4040/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Airsonic",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Music",
+			"container": "/music"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Airsonic/Playlists",
+			"container": "/playlists"
+		},
+		{
+			"bind": "/portainer/Podcasts",
+			"container": "/podcasts"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Airsonic/Media",
+			"container": "/media"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Airsonic/config/",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://airsonic.github.io/"
+}

+ 54 - 0
template/apps/archivebox.json

@@ -0,0 +1,54 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "ArchiveBox is a powerful, self-hosted internet archiving solution to collect, save, and view sites you want to preserve offline.",
+	"env": [
+		{
+			"default": "*",
+			"label": "ALLOWED_HOSTS",
+			"name": "ALLOWED_HOSTS"
+		},
+		{
+			"default": "750m",
+			"label": "MEDIA_MAX_SIZE",
+			"name": "MEDIA_MAX_SIZE"
+		},
+		{
+			"default": "true",
+			"label": "PUBLIC_INDEX",
+			"name": "PUBLIC_INDEX"
+		},
+		{
+			"default": "true",
+			"label": "PUBLIC_SNAPSHOTS",
+			"name": "PUBLIC_SNAPSHOTS"
+		},
+		{
+			"default": "false",
+			"label": "PUBLIC_ADD_VIEW",
+			"name": "PUBLIC_ADD_VIEW"
+		}
+	],
+	"image32": "archivebox/archivebox:master",
+	"image64": "archivebox/archivebox:master",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/archivebox.png",
+	"name": "archivebox",
+	"note": "By default an admin user is not created. You can do so by launching a shell in the container and executing 'archivebox manage createsuperuser'. Documentation is Available <a href='https://github.com/ArchiveBox/ArchiveBox/wiki'>here</a>.",
+	"officialDoc": "https://github.com/ArchiveBox/ArchiveBox/wiki/Docker",
+	"platform": "linux",
+	"ports": [
+		"8002:8000/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Archivebox",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/archivebox",
+			"container": "/data"
+		}
+	],
+	"webpage": "https://archivebox.io/"
+}

+ 35 - 0
template/apps/authelia.json

@@ -0,0 +1,35 @@
+{
+	"categories": [
+		"Other",
+		"Tools",
+		"Authentication"
+	],
+	"description": "An open-source authentication and authorization server providing 2-factor authentication and single sign-on (SSO) for your applications via a web portal.",
+	"env": [
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"image32": "authelia/authelia:latest",
+	"image64": "authelia/authelia:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/authelia.png",
+	"name": "authelia",
+	"note": "Requires a configuration.yml file in order to work. Documentation is Available <a href='https://docs.authelia.com/deployment/deployment-ha'>here</a>.",
+	"officialDoc": "https://www.authelia.com/docs/configuration/",
+	"platform": "linux",
+	"ports": [
+		"9091:9091/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Authelia",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Authelia",
+			"container": "/etc/authelia/"
+		}
+	],
+	"webpage": "https://www.authelia.com/"
+}

+ 51 - 0
template/apps/bazarr.json

@@ -0,0 +1,51 @@
+{
+	"categories": [
+		"Video",
+		"Music"
+	],
+	"description": "Bazarr is a companion application to Sonarr and Radarr. It can manage and download subtitles based on your requirements. You define your preferences by TV show or movie and Bazarr takes care of everything for you.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"image32": "linuxserver/bazarr:latest",
+	"image64": "linuxserver/bazarr:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/bazarr.png",
+	"name": "bazarr",
+	"officialDoc": "https://wiki.bazarr.media/Getting-Started/Installation/Docker/docker/",
+	"platform": "linux",
+	"ports": [
+		"6767:6767/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Bazarr",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Bazarr",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/TV",
+			"container": "/tv"
+		},
+		{
+			"bind": "/portainer/Movies",
+			"container": "/movies"
+		}
+	],
+	"webpage": "https://www.bazarr.media/"
+}

+ 45 - 0
template/apps/beets.json

@@ -0,0 +1,45 @@
+{
+	"categories": [
+		"Music"
+	],
+	"description": "The purpose of beets is to get your music collection right once and for all. It catalogs your collection, automatically improving its metadata as it goes using the MusicBrainz database. Then it provides a bouquet of tools for manipulating and accessing your music.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/beets:latest",
+	"image64": "linuxserver/beets:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/beets-icon.png",
+	"name": "beets",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-beets",
+	"platform": "linux",
+	"ports": [
+		"8337:8337/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Beets",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Beets",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		},
+		{
+			"bind": "/portainer/Music",
+			"container": "/music"
+		}
+	],
+	"webpage": "https://beets.io/"
+}

+ 51 - 0
template/apps/booksonic.json

@@ -0,0 +1,51 @@
+{
+	"categories": [
+		"Books",
+		"Other"
+	],
+	"description": "Booksonic is a server and an app for streaming your audiobooks to any pc or android phone. Most of the functionality is also availiable on other platforms that have apps for subsonic",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "booksonic",
+			"label": "CONTEXT_PATH",
+			"name": "CONTEXT_PATH"
+		}
+	],
+	"image32": "linuxserver/booksonic:latest",
+	"image64": "linuxserver/booksonic:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/booksonic.png",
+	"name": "booksonic",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-booksonic-air",
+	"platform": "linux",
+	"ports": [
+		"4041:4040/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Booksonic",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Books",
+			"container": "/books"
+		},
+		{
+			"bind": "/portainer/Files/Podcasts",
+			"container": "/podcast"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Booksonic",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://booksonic.org/"
+}

+ 55 - 0
template/apps/bookstack.json

@@ -0,0 +1,55 @@
+{
+	"categories": [
+		"Wiki"
+	],
+	"description": "Bookstack is a free and open source Wiki designed for creating beautiful documentation. Feautring a simple, but powerful WYSIWYG editor it allows for teams to create detailed and useful documentation with ease.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"label": "DATABASE_PASSWORD",
+			"name": "DATABASE_PASSWORD"
+		},
+		{
+			"label": "MYSQL_ROOT_PASSWORD",
+			"name": "MYSQL_ROOT_PASSWORD"
+		},
+		{
+			"default": "http://192.168.X.Y:6875",
+			"description": "Address to access Bookstack. If using a domain, add it here. If not set correctly the app will not be accessible",
+			"label": "APP_URL",
+			"name": "APP_URL"
+		},
+		{
+			"default": "6875",
+			"label": "PORT",
+			"name": "PORT"
+		}
+	],
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/bookstack2.png",
+	"name": "bookstack",
+	"note": "Default login is admin@admin.com with a password of password. The database created is called bookstackapp and the database user is called bookstack",
+	"officialDoc": "https://www.bookstackapp.com/docs/admin/installation/#docker",
+	"platform": "linux",
+	"repository": {
+		"stackfile32": "stack/bookstack.yml",
+		"stackfile64": "stack/bookstack.yml",
+		"url": "https://github.com/pi-hosted/pi-hosted"
+	},
+	"title": "Bookstack",
+	"type": 3,
+	"webpage": "https://www.bookstackapp.com/"
+}

+ 39 - 0
template/apps/caddy.json

@@ -0,0 +1,39 @@
+{
+	"categories": [
+		"Tools",
+		"Web",
+		"Webserver"
+	],
+	"description": "Caddy - The Ultimate Server with Automatic HTTPS.  Need to run tools/install_caddy.sh before installing the template.",
+	"image32": "caddy:latest",
+	"image64": "caddy:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/caddy.png",
+	"name": "caddy",
+	"note": "Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go",
+	"officialDoc": "https://hub.docker.com/_/caddy",
+	"platform": "linux",
+	"ports": [
+		"80:80/tcp",
+		"443:443/tcp",
+		"2019:2019/tcp"
+	],
+	"preInstallScript": "install_caddy.sh",
+	"restart_policy": "unless-stopped",
+	"title": "Caddy",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Caddy/Data",
+			"container": "/data"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Caddy/Config",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Caddy/Caddyfile",
+			"container": "/etc/caddy/Caddyfile"
+		}
+	],
+	"webpage": "https://caddyserver.com/"
+}

+ 42 - 0
template/apps/calibre-web.json

@@ -0,0 +1,42 @@
+{
+	"categories": [
+		"Cloud",
+		"Books"
+	],
+	"description": "Calibre Web is a web app providing a clean interface for browsing, reading and downloading eBooks using an existing Calibre database.\n\n  [br][br]\n  [b][u][span style='color: #E80000;']Configuration[/span][/u][/b][br]\n  [b]/config[/b] Where Calibre-web should store it's database[br]\n  [b]/books[/b] Path to your calibre library metadata.db file[br]",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/calibre-web:latest",
+	"image64": "linuxserver/calibre-web:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/calibre-web-icon.png",
+	"name": "calibre-web",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-calibre-web",
+	"platform": "linux",
+	"ports": [
+		"8083:8083/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Calibre Web",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Books",
+			"container": "/books"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Calibre-web",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://calibre-ebook.com/"
+}

+ 37 - 0
template/apps/cardigann.json

@@ -0,0 +1,37 @@
+{
+	"categories": [
+		"Downloaders"
+	],
+	"description": "Cardigann, a server for adding extra indexers to Sonarr, SickRage and CouchPotato via Torznab and TorrentPotato proxies. Behind the scenes Cardigann logs in and runs searches and then transforms the results into a compatible format.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/cardigann:latest",
+	"image64": "linuxserver/cardigann:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/cardigann.png",
+	"name": "cardigann",
+	"officialDoc": "https://hub.docker.com/r/linuxserver/cardigann/",
+	"platform": "linux",
+	"ports": [
+		"5060:5060/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Cardigann",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Cardigann",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://github.com/cardigann/cardigann"
+}

+ 63 - 0
template/apps/chevereto.json

@@ -0,0 +1,63 @@
+{
+	"categories": [
+		"Other",
+		"Tools",
+		"Photo"
+	],
+	"description": "Chevereto is a powerful and fast image hosting script that allows you to create your very own full featured image hosting website in just minutes. Please note that this offers only the free Chevereto version..",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "",
+			"label": "CHEVERETO_DB_HOST",
+			"name": "CHEVERETO_DB_HOST"
+		},
+		{
+			"default": "",
+			"label": "CHEVERETO_DB_USERNAME",
+			"name": "CHEVERETO_DB_USERNAME"
+		},
+		{
+			"default": "",
+			"label": "CHEVERETO_DB_PASSWORD",
+			"name": "CHEVERETO_DB_PASSWORD"
+		},
+		{
+			"default": "",
+			"label": "CHEVERETO_DB_NAME",
+			"name": "CHEVERETO_DB_NAME"
+		},
+		{
+			"default": "",
+			"label": "CHEVERETO_DB_PREFIX",
+			"name": "CHEVERETO_DB_PREFIX"
+		}
+	],
+	"image32": "nmtan/chevereto:latest",
+	"image64": "nmtan/chevereto:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/Chevereto.png",
+	"name": "Chevereto",
+	"officialDoc": "https://hub.docker.com/r/nmtan/chevereto",
+	"platform": "linux",
+	"ports": [
+		"7382:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Chevereto",
+	"type": 1,
+	"volumes": [
+		{
+			"container": "/var/www/html/images"
+		}
+	],
+	"webpage": "https://chevereto.com/"
+}

+ 44 - 0
template/apps/cloudflare-ddns.json

@@ -0,0 +1,44 @@
+{
+	"categories": [
+		"DNS",
+		"Tools"
+	],
+	"description": "Cloudflare DDNS - A small and fast DDNS updater for Cloudflare.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "",
+			"label": "CF_API_TOKEN",
+			"name": "CF_API_TOKEN"
+		},
+		{
+			"default": "",
+			"label": "DOMAINS (Comma Separated List)",
+			"name": "DOMAINS"
+		},
+		{
+			"default": "true",
+			"label": "PROXIED",
+			"name": "PROXIED"
+		}
+	],
+	"image32": "favonia/cloudflare-ddns:latest",
+	"image64": "favonia/cloudflare-ddns:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/cloudflare-ddns.png",
+	"name": "cloudflare-ddns",
+	"officialDoc": "https://hub.docker.com/r/oznu/cloudflare-ddns/",
+	"platform": "linux",
+	"restart_policy": "unless-stopped",
+	"title": "Cloudflare DDNS",
+	"type": 1,
+	"webpage": "https://www.cloudflare.com/en-gb/learning/dns/glossary/dynamic-dns/"
+}

+ 56 - 0
template/apps/code-server.json

@@ -0,0 +1,56 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Code-server is VS Code running on a remote server, accessible through the browser.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "GUID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"label": "PASSWORD",
+			"name": "PASSWORD"
+		},
+		{
+			"label": "SUDO_PASSWORD",
+			"name": "SUDO_PASSWORD"
+		},
+		{
+			"default": "example.my.domain",
+			"label": "PROXY_DOMAIN",
+			"name": "PROXY_DOMAIN"
+		}
+	],
+	"image32": "linuxserver/code-server:latest",
+	"image64": "linuxserver/code-server:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/code-server.png",
+	"name": "code-server",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-code-server",
+	"platform": "linux",
+	"ports": [
+		"8443:8443/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Code Server",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Code-Server",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://coder.com/"
+}

+ 37 - 0
template/apps/codiad.json

@@ -0,0 +1,37 @@
+{
+	"categories": [
+		"Productivity"
+	],
+	"description": "Codiad is a web-based IDE framework with a small footprint and minimal requirements.\n  ",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/codiad:latest",
+	"image64": "linuxserver/codiad:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/codiad-icon.png",
+	"name": "codiad",
+	"officialDoc": "https://github.com/Codiad/Codiad/wiki/Quick-installation-using-Docker",
+	"platform": "linux",
+	"ports": [
+		"7294:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Codiad",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Codiad",
+			"container": "/config"
+		}
+	],
+	"webpage": "http://codiad.com/"
+}

+ 42 - 0
template/apps/cops.json

@@ -0,0 +1,42 @@
+{
+	"categories": [
+		"Cloud",
+		"Books"
+	],
+	"description": "COPS links to your Calibre library database and allows downloading and emailing of books directly from a web browser and provides a OPDS feed to connect to your devices.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/cops:latest",
+	"image64": "linuxserver/cops:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/cops-icon.png",
+	"name": "cops",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-cops",
+	"platform": "linux",
+	"ports": [
+		"8945:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "COPS",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Books",
+			"container": "/books"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Cops",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://blog.slucas.fr/projects/calibre-opds-php-server/"
+}

+ 46 - 0
template/apps/couchpotato.json

@@ -0,0 +1,46 @@
+{
+	"categories": [
+		"Downloaders",
+		"Video"
+	],
+	"description": "CouchPotato (CP) is an automatic NZB and torrent downloader. You can keep a \"movies I want\"-list and it will search for NZBs/torrents of these movies every X hours. Once a movie is found, it will send it to SABnzbd or download the torrent to a specified directory.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/couchpotato:latest",
+	"image64": "linuxserver/couchpotato:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/couchpotato-icon.png",
+	"name": "couchpotato",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-couchpotato",
+	"platform": "linux",
+	"ports": [
+		"5050:5050/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "CouchPotato",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Couchpotato",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		},
+		{
+			"bind": "/portainer/Movies",
+			"container": "/movies"
+		}
+	],
+	"webpage": "https://couchpota.to/"
+}

+ 41 - 0
template/apps/daapd.json

@@ -0,0 +1,41 @@
+{
+	"categories": [
+		"Music"
+	],
+	"description": "DAAP (iTunes) media server with support for AirPlay devices, Apple Remote (and compatibles), MPD and internet radio.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/daapd:latest",
+	"image64": "linuxserver/daapd:latest",
+	"logo": "https://raw.githubusercontent.com/linuxserver/beta-templates/master/lsiodev/img/daapd-icon.png",
+	"name": "daapd",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-daapd",
+	"platform": "linux",
+	"ports": [
+		"3689:3689/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Daapd",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Daapd",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Music",
+			"container": "/music"
+		}
+	],
+	"webpage": "https://owntone.github.io/owntone-server/"
+}

+ 26 - 0
template/apps/dashmachine.json

@@ -0,0 +1,26 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Another application bookmark dashboard, with fun features.",
+	"image32": "failed2run/dashmachine:latest",
+	"image64": "failed2run/dashmachine:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/dashmachine_logo.png",
+	"name": "dashmachine",
+	"officialDoc": "https://github.com/rmountjoy92/DashMachine",
+	"platform": "linux",
+	"ports": [
+		"5100:5000/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "DashMachine",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Dashmachine",
+			"container": "/dashmachine/dashmachine/user_data"
+		}
+	],
+	"webpage": "https://github.com/rmountjoy92/DashMachine"
+}

+ 43 - 0
template/apps/davos.json

@@ -0,0 +1,43 @@
+{
+	"categories": [
+		"FTP",
+		"Other",
+		"Tools"
+	],
+	"description": "davos is an FTP automation tool that periodically scans given host locations for new files. It can be configured for various purposes, including listening for specific files to appear in the host location, ready for it to download and then move, if required. It also supports completion notifications as well as downstream API calls, to further the workflow.\r\n\r\n/config : AppData Location\r\n/download : File Download Location",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/davos:latest",
+	"image64": "linuxserver/davos:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/davos.png",
+	"name": "davos",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-davos",
+	"platform": "linux",
+	"ports": [
+		"7136:8080/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Davos",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Davos",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		}
+	],
+	"webpage": "https://github.com/linuxserver/davos"
+}

+ 31 - 0
template/apps/deemix.json

@@ -0,0 +1,31 @@
+{
+	"categories": [
+		"Other",
+		"Music"
+	],
+	"description": "Deemix is a deezer downloader built from the ashes of Deezloader Remix.",
+	"image32": "registry.gitlab.com/bockiii/deemix-docker",
+	"image64": "registry.gitlab.com/bockiii/deemix-docker",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/deemix.png",
+	"name": "deemix",
+	"note": "Deemix may take a few minutes to install. Be sure to check the logs for details. Refer to <a href='https://notabug.org/RemixDevs/DeezloaderRemix/wiki/Login+via+userToken'>this page</a> for userToken details.",
+	"officialDoc": "https://gitlab.com/Bockiii/deemix-docker",
+	"platform": "linux",
+	"ports": [
+		"9666:9666/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "DeeMix",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/DeeMix",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		}
+	],
+	"webpage": "https://deemix.app/"
+}

+ 70 - 0
template/apps/deluge-openvpn.json

@@ -0,0 +1,70 @@
+{
+	"categories": [
+		"Other",
+		"VPN",
+		"Tools"
+	],
+	"description": "This container contains OpenVPN and Deluge with a configuration where Deluge is running only when OpenVPN has an active tunnel. It bundles configuration files for many popular VPN providers to make the setup easier.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PUID"
+		},
+		{
+			"default": "MULLVAD",
+			"description": "see https://github.com/sgtsquiggs/docker-deluge-openvpn",
+			"label": "OPENVPN_PROVIDER",
+			"name": "OPENVPN_PROVIDER"
+		},
+		{
+			"label": "OPENVPN_USERNAME",
+			"name": "OPENVPN_USERNAME"
+		},
+		{
+			"label": "OPENVPN_PASSWORD",
+			"name": "OPENVPN_PASSWORD"
+		},
+		{
+			"default": "CA Toronto",
+			"label": "OPENVPN_CONFIG",
+			"name": "OPENVPN_CONFIG"
+		},
+		{
+			"default": "192.168.0.0/16",
+			"label": "LOCAL_NETWORK",
+			"name": "LOCAL_NETWORK"
+		}
+	],
+	"image32": "sgtsquiggs/deluge-openvpn:arm32v7-latest",
+	"image64": "sgtsquiggs/deluge-openvpn:arm64v8-latest",
+	"name": "deluge-openvpn",
+	"officialDoc": "https://github.com/sgtsquiggs/docker-deluge-openvpn",
+	"platform": "linux",
+	"ports": [
+		"8112:8112/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Deluge openvpn",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/etc/localtime",
+			"container": "/etc/localtime"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/DelugeOpenVPN/config",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://www.deluge-torrent.org/"
+}

+ 47 - 0
template/apps/deluge.json

@@ -0,0 +1,47 @@
+{
+	"categories": [
+		"Downloaders"
+	],
+	"description": "Deluge is a lightweight, Free Software, cross-platform BitTorrent client providing: Full Encryption, WebUI, Plugin System, Much more...",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "022",
+			"label": "UMASK",
+			"name": "UMASK"
+		}
+	],
+	"image32": "linuxserver/deluge:latest",
+	"image64": "linuxserver/deluge:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/deluge-icon.png",
+	"name": "deluge",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-deluge",
+	"platform": "linux",
+	"ports": [
+		"6881:6881/tcp",
+		"8112:8112/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Deluge",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Deluge",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		}
+	],
+	"webpage": "https://www.deluge-torrent.org/"
+}

+ 40 - 0
template/apps/domoticz.json

@@ -0,0 +1,40 @@
+{
+	"categories": [
+		"HomeAutomation",
+		"Management"
+	],
+	"description": "Domoticz is a Home Automation System that lets you monitor and configure various devices like: Lights, Switches, various sensors/meters like Temperature, Rain, Wind, UV, Electra, Gas, Water and much more. Notifications/Alerts can be sent to any mobile device",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/domoticz:latest",
+	"image64": "linuxserver/domoticz:latest",
+	"logo": "https://github.com/domoticz/domoticz/raw/master/www/images/logo.png",
+	"name": "domoticz",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-domoticz",
+	"platform": "linux",
+	"ports": [
+		"1443:1443/tcp",
+		"6144:6144/tcp",
+		"8080:8080/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Domoticz",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Domoticz",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://domoticz.com/"
+}

+ 27 - 0
template/apps/dozzle.json

@@ -0,0 +1,27 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Dozzle is a real-time log viewer for docker containers.",
+	"image32": "amir20/dozzle:latest",
+	"image64": "amir20/dozzle:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/dozzle.png",
+	"name": "dozzle",
+	"note": "View logs for docker containers.",
+	"officialDoc": "https://github.com/amir20/dozzle",
+	"platform": "linux",
+	"ports": [
+		"8888:8080/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Dozzle",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/var/run/docker.sock",
+			"container": "/var/run/docker.sock"
+		}
+	],
+	"webpage": "https://dozzle.dev/"
+}

+ 19 - 0
template/apps/dradis.json

@@ -0,0 +1,19 @@
+{
+	"categories": [
+		"Security"
+	],
+	"description": "Dradis Framework: Collaboration and reporting for IT Security teams http://dradisframework.org",
+	"image32": "raesene/dradis:latest",
+	"image64": "raesene/dradis:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/dradis-logo.png",
+	"name": "dradis",
+	"officialDoc": "https://github.com/raesene/dockerized-security-tools",
+	"platform": "linux",
+	"ports": [
+		"3100:3000/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Dradis",
+	"type": 1,
+	"webpage": "https://dradisframework.com/"
+}

+ 60 - 0
template/apps/drupal.json

@@ -0,0 +1,60 @@
+{
+	"categories": [
+		"Other",
+		"CMD",
+		"Web",
+		"Tools"
+	],
+	"description": "Drupal CMS.  Make sure you run the install script under tools before installing.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"default": "drupal",
+			"label": "DATABASE_NAME",
+			"name": "DATABASE_NAME"
+		},
+		{
+			"default": "drupal",
+			"label": "DATABASE_USER",
+			"name": "DATABASE_USER"
+		},
+		{
+			"default": "",
+			"label": "DATABASE_PASSWORD",
+			"name": "DATABASE_PASSWORD"
+		},
+		{
+			"default": "",
+			"label": "MYSQL_ROOT_PASSWORD",
+			"name": "MYSQL_ROOT_PASSWORD"
+		}
+	],
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/drupal.png",
+	"name": "drupal",
+	"officialDoc": "https://www.drupal.org/docs/develop/local-server-setup/docker-development-environments/docker-with-solr-cloud-integration/docker-configuration",
+	"platform": "linux",
+	"preInstallScript": "install_drupal.sh",
+	"repository": {
+		"stackfile32": "stack/drupal.yml",
+		"stackfile64": "stack/drupal.yml",
+		"url": "https://github.com/pi-hosted/pi-hosted/"
+	},
+	"restart_policy": "unless-stopped",
+	"title": "Drupal",
+	"type": 3,
+	"webpage": "https://www.drupal.org/"
+}

+ 44 - 0
template/apps/duck-dns.json

@@ -0,0 +1,44 @@
+{
+	"categories": [
+		"DNS",
+		"Tools"
+	],
+	"description": "Duck DNS is a free service which will point a DNS (sub domains of duckdns.org) to an IP of your choice. The service is completely free, and doesn't require reactivation or forum posts to maintain its existence.\r\n\r\nFirst, go to duckdns site, register your subdomain and retrieve your token\r\nThen run the docker create command above with your subdomain(s) and token\r\nIt will update your IP with the DuckDNS service every 5 minutes\r\n\r\n",
+	"env": [
+		{
+			"default": "",
+			"label": "SUBDOMAINS (Comma Separated List)",
+			"name": "SUBDOMAINS"
+		},
+		{
+			"default": "",
+			"label": "TOKEN",
+			"name": "TOKEN"
+		},
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"image32": "linuxserver/duckdns:latest",
+	"image64": "linuxserver/duckdns:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/duckdns.png",
+	"name": "duckdns",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-duckdns",
+	"platform": "linux",
+	"restart_policy": "unless-stopped",
+	"title": "Duck DNS",
+	"type": 1,
+	"webpage": "https://www.duckdns.org/"
+}

+ 50 - 0
template/apps/duplicati.json

@@ -0,0 +1,50 @@
+{
+	"categories": [
+		"Backup",
+		"Cloud",
+		"Other",
+		"Productivity",
+		"Tools"
+	],
+	"description": "Free backup software to store encrypted backups online, Duplicati works with standard protocols like FTP, SSH, WebDAV as well as popular services like Microsoft OneDrive, Amazon Cloud Drive and S3, Google Drive, box.com, Mega, hubiC and many others.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/duplicati:latest",
+	"image64": "linuxserver/duplicati:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/duplicati-icon.png",
+	"name": "duplicati",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-duplicati",
+	"platform": "linux",
+	"ports": [
+		"8200:8200/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Duplicati",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Duplicati",
+			"container": "/config"
+		},
+		{
+			"container": "/tmp"
+		},
+		{
+			"container": "/backups"
+		},
+		{
+			"container": "/source"
+		}
+	],
+	"webpage": "https://www.duplicati.com/"
+}

+ 35 - 0
template/apps/eclipse-mosquitto.json

@@ -0,0 +1,35 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Eclipse Mosquitto is an open source implementation of a server for versions 5, 3.1.1, and 3.1 of the MQTT protocol.\r\nYou will need to create /portainer/Files/AppData/Config/Mosquitto/config/mosquitto.conf and if needed your password file.\r\nHave a look on https://mosquitto.org/man/mosquitto_passwd-1.html",
+	"hostname": "rpi-mosquitto",
+	"image32": "eclipse-mosquitto:latest",
+	"image64": "eclipse-mosquitto:latest",
+	"logo": "https://raw.githubusercontent.com/docker-library/docs/757578e3a44e5460a8a11d32a81776f8b74231a9/eclipse-mosquitto/logo.png",
+	"name": "mosquitto",
+	"officialDoc": "https://hub.docker.com/_/eclipse-mosquitto",
+	"platform": "linux",
+	"ports": [
+		"1883:1883/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Eclipse Mosquitto",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Mosquitto/config",
+			"container": "/mosquitto/config"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Mosquitto/data",
+			"container": "/mosquitto/data"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Mosquitto/log",
+			"container": "/mosquitto/log"
+		}
+	],
+	"webpage": "https://mosquitto.org/"
+}

+ 53 - 0
template/apps/emby.json

@@ -0,0 +1,53 @@
+{
+	"categories": [
+		"Video",
+		"Music",
+		"Photos"
+	],
+	"description": "Emby organizes video, music, live TV, and photos from personal media libraries and streams them to smart TVs, streaming boxes and mobile devices. This container is packaged as a standalone emby Media Server.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"image32": "linuxserver/emby:latest",
+	"image64": "linuxserver/emby:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/emby.png",
+	"name": "emby",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-emby",
+	"platform": "linux",
+	"ports": [
+		"8096:8096/tcp",
+		"8920:8920/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Emby",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Emby",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/TV",
+			"container": "/data/tvshows"
+		},
+		{
+			"bind": "/portainer/Movies",
+			"container": "/data/movies"
+		}
+	],
+	"webpage": "https://emby.media/"
+}

+ 27 - 0
template/apps/embystat.json

@@ -0,0 +1,27 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Embystat is a personal web server that can calculate all kinds of statistics from your (local) Emby server. Just install this on your server and let him calculate all kinds of fun stuff.",
+	"image32": "linuxserver/embystat:latest",
+	"image64": "linuxserver/embystat:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/embystat.png",
+	"name": "embystat",
+	"note": "Access the ui at your-ip:6555. Follow the setup wizard on initial install. Then configure the required services.",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-embystat",
+	"platform": "linux",
+	"ports": [
+		"6555:6555/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "EmbyStat",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/EmbyStat",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://github.com/mregni/EmbyStat"
+}

+ 28 - 0
template/apps/filebrowser.json

@@ -0,0 +1,28 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "[arm] Web File Browser which can be used as a middleware or standalone app.",
+	"image32": "filebrowser/filebrowser:latest",
+	"image64": "filebrowser/filebrowser:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/filebrowser.png",
+	"name": "filebrowser",
+	"note": "The default user and password is admin/admin.",
+	"officialDoc": "https://filebrowser.org/installation#docker",
+	"platform": "linux",
+	"ports": [
+		"8082:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "FileBrowser",
+	"type": 1,
+	"videoID": 4,
+	"volumes": [
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/srv"
+		}
+	],
+	"webpage": "https://filebrowser.org/"
+}

+ 37 - 0
template/apps/flame.json

@@ -0,0 +1,37 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Flame is self-hosted startpage for your server. Its design is inspired (heavily) by SUI. Flame is very easy to setup and use. With built-in editors, it allows you to setup your very own application hub in no time - no file editing necessary.",
+	"env": [
+		{
+			"default": "",
+			"label": "Flame Password",
+			"name": "PASSWORD"
+		}
+	],
+	"image32": "pawelmalak/flame:multiarch",
+	"image64": "pawelmalak/flame:multiarch",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/flame.png",
+	"name": "Flame",
+	"officialDoc": "https://github.com/pawelmalak/flame#with-docker-recommended",
+	"platform": "linux",
+	"ports": [
+		"5005:5005/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Flame",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Flame/data",
+			"container": "/app/data"
+		},
+		{
+			"bind": "/var/run/docker.sock",
+			"container": "/var/run/docker.sock"
+		}
+	],
+	"webpage": "https://github.com/pawelmalak/flame"
+}

+ 48 - 0
template/apps/foundryvtt-server.json

@@ -0,0 +1,48 @@
+{
+	"categories": [
+		"Other",
+		"Games"
+	],
+	"description": "This docker image provides the FoundryVTT system for hosting your own virtual table top games.",
+	"env": [
+		{
+			"default": "John",
+			"label": "Foundry Account Name",
+			"name": "FOUNDRY_USERNAME"
+		},
+		{
+			"default": "password",
+			"label": "Foundry Password",
+			"name": "FOUNDRY_PASSWORD"
+		},
+		{
+			"default": "changeme",
+			"label": "Instance Admin Password",
+			"name": "FOUNDRY_ADMIN_KEY"
+		},
+		{
+			"default": "true",
+			"label": "CONTAINER_PRESERVE_CONFIG",
+			"name": "CONTAINER_PRESERVE_CONFIG"
+		}
+	],
+	"image32": "felddy/foundryvtt:release",
+	"image64": "felddy/foundryvtt:release",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/foundrylogo.png",
+	"name": "FoundryVTT",
+	"officialDoc": "https://hub.docker.com/r/felddy/foundryvtt",
+	"platform": "linux",
+	"ports": [
+		"30000:30000/tcp"
+	],
+	"restart_polocy": "unless-stopped",
+	"title": "FoundryVTT Server",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/foundryvtt",
+			"container": "/data"
+		}
+	],
+	"webpage": "https://foundryvtt.com/"
+}

+ 37 - 0
template/apps/freshrss.json

@@ -0,0 +1,37 @@
+{
+	"categories": [
+		"Other"
+	],
+	"description": "A free, self-hostable rss aggregator…",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/freshrss:latest",
+	"image64": "freshrss/freshrss:arm",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/freshrss-icon.png",
+	"name": "freshrss",
+	"officialDoc": "https://github.com/FreshRSS/FreshRSS/tree/edge/Docker",
+	"platform": "linux",
+	"ports": [
+		"8132:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "FreshRSS",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/freshrss",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://www.freshrss.org/"
+}

+ 47 - 0
template/apps/gazee.json

@@ -0,0 +1,47 @@
+{
+	"categories": [
+		"Web",
+		"Books",
+		"Tools"
+	],
+	"description": "[DEPRECATED] A WebApp Comic Reader for your favorite digital comics. Reach and read your comic library from any web connected device with a modern web browser",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/gazee:latest",
+	"image64": "linuxserver/gazee:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/gazee-logo.png",
+	"name": "gazee",
+	"officialDoc": "https://hub.docker.com/r/linuxserver/gazee",
+	"platform": "linux",
+	"ports": [
+		"4243:4242/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Gazee",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Gazee",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Comics",
+			"container": "/comics"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Gazee",
+			"container": "/mylar"
+		}
+	],
+	"webpage": "https://github.com/hubbcaps/gazee"
+}

+ 57 - 0
template/apps/gitea-with-mariadb.json

@@ -0,0 +1,57 @@
+{
+	"categories": [
+		"SCM",
+		"Tools"
+	],
+	"description": "Gitea with Mariadb: A painless self-hosted Git service.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "USER_UID",
+			"name": "USER_UID"
+		},
+		{
+			"default": "1000",
+			"label": "USER_GID",
+			"name": "USER_GID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"default": "gitea",
+			"label": "DATABASE_NAME",
+			"name": "DATABASE_NAME"
+		},
+		{
+			"default": "gitea",
+			"label": "DATABASE_USER",
+			"name": "DATABASE_USER"
+		},
+		{
+			"default": "",
+			"label": "DATABASE_PASSWORD",
+			"name": "DATABASE_PASSWORD"
+		},
+		{
+			"default": "",
+			"label": "MYSQL_ROOT_PASSWORD",
+			"name": "MYSQL_ROOT_PASSWORD"
+		}
+	],
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/gitea.png",
+	"name": "gitea-mysql",
+	"note": "More possible Environment Variables: https://docs.gitea.io/en-us/install-with-docker/#managing-deployments-with-environment-variables",
+	"officialDoc": "https://docs.gitea.io/en-us/install-with-docker/#mysql-database",
+	"platform": "linux",
+	"repository": {
+		"stackfile64": "stack/gitea-mariadb.yml",
+		"url": "https://github.com/pi-hosted/pi-hosted/"
+	},
+	"restart_policy": "unless-stopped",
+	"title": "Gitea with Mariadb",
+	"type": 3,
+	"webpage": "https://gitea.com/"
+}

+ 47 - 0
template/apps/gitea.json

@@ -0,0 +1,47 @@
+{
+	"categories": [
+		"SCM",
+		"Tools"
+	],
+	"description": "A painless self-hosted Git service.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "USER_UID",
+			"name": "USER_UID"
+		},
+		{
+			"default": "1000",
+			"label": "USER_GID",
+			"name": "USER_GID"
+		}
+	],
+	"image64": "gitea/gitea:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/gitea.png",
+	"name": "gitea",
+	"note": "More possible Environment Variables: https://docs.gitea.io/en-us/install-with-docker/#managing-deployments-with-environment-variables",
+	"officialDoc": "https://docs.gitea.io/en-us/install-with-docker/",
+	"platform": "linux",
+	"ports": [
+		"8124:3000/tcp",
+		"222:22/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Gitea",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Gitea",
+			"container": "/data"
+		},
+		{
+			"bind": "/etc/timezone",
+			"container": "/etc/timezone:ro"
+		},
+		{
+			"bind": "/etc/localtime",
+			"container": "/etc/localtime:ro"
+		}
+	],
+	"webpage": "https://gitea.com/"
+}

+ 44 - 0
template/apps/gotify.json

@@ -0,0 +1,44 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "A simple server for sending and receiving messages",
+	"env": [
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"default": "admin",
+			"label": "GOTIFY_DEFAULTUSER_NAME",
+			"name": "GOTIFY_DEFAULTUSER_NAME"
+		},
+		{
+			"default": "admin123",
+			"label": "GOTIFY_DEFAULTUSER_PASS",
+			"name": "GOTIFY_DEFAULTUSER_PASS"
+		}
+	],
+	"image32": "gotify/server-arm7:latest",
+	"image64": "gotify/server-arm64:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/gotify.png",
+	"name": "gotify",
+	"note": "ARM7 Image. Documentation is Available <a href='https://gotify.net/docs/index'>here</a>.",
+	"officialDoc": "https://gotify.net/docs/install",
+	"platform": "linux",
+	"ports": [
+		"9008:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Gotify",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/gotify",
+			"container": "/app/data"
+		}
+	],
+	"webpage": "https://gotify.net/"
+}

+ 44 - 0
template/apps/grocy.json

@@ -0,0 +1,44 @@
+{
+	"categories": [
+		"Other",
+		"Tools",
+		"Finance"
+	],
+	"description": "Grocy is an ERP system for your kitchen! Cut down on food waste, and manage your chores with this brilliant utulity.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "Timezone",
+			"name": "TZ"
+		}
+	],
+	"image32": "linuxserver/grocy:latest",
+	"image64": "linuxserver/grocy:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/grocy_logo.png",
+	"name": "grocy",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-grocy",
+	"platform": "linux",
+	"ports": [
+		"9283:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Grocy",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Grocy",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://grocy.info/"
+}

+ 28 - 0
template/apps/guacamole.json

@@ -0,0 +1,28 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "[arm] A clientless remote desktop gateway.",
+	"image32": "oznu/guacamole:armhf",
+	"image64": "oznu/guacamole:armhf",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/guacamole.png",
+	"name": "guacamole",
+	"note": "The default login will be guacadmin/guacadmin. It is common practice to add a new admin user and remove the default user for Guacamole.",
+	"officialDoc": "https://hub.docker.com/r/oznu/guacamole",
+	"platform": "linux",
+	"ports": [
+		"8080:8080/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Guacamole",
+	"type": 1,
+	"videoID": 3,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Guacamole",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://guacamole.apache.org/"
+}

+ 45 - 0
template/apps/headphones.json

@@ -0,0 +1,45 @@
+{
+	"categories": [
+		"Music"
+	],
+	"description": null,
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/headphones:latest",
+	"image64": "linuxserver/headphones:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/headphones-icon.png",
+	"name": "headphones",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-headphones",
+	"platform": "linux",
+	"ports": [
+		"8181:8181/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Headphones",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Headphones",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/Downloads"
+		},
+		{
+			"bind": "/portainer/Music",
+			"container": "/music"
+		}
+	],
+	"webpage": "https://github.com/rembo10/headphones"
+}

+ 40 - 0
template/apps/heimdall.json

@@ -0,0 +1,40 @@
+{
+	"categories": [
+		"Tools",
+		"Web",
+		"Other"
+	],
+	"description": "Heimdall is a way to organise all those links to your most used web sites and web applications in a simple way.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/heimdall:latest",
+	"image64": "linuxserver/heimdall:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/heimdall-icon.png",
+	"name": "heimdall",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-heimdall",
+	"platform": "linux",
+	"ports": [
+		"7202:80/tcp",
+		"7203:443/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Heimdall",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Heimdall",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://heimdall.site/"
+}

+ 22 - 0
template/apps/home-assistant.json

@@ -0,0 +1,22 @@
+{
+	"description": "Home Assistant is a free and open-source software for home automation that is designed to be the central control system for smart home devices with focus on local control and privacy.",
+	"image32": "homeassistant/home-assistant:latest",
+	"image64": "homeassistant/home-assistant:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/homeassistant.png",
+	"name": "home-assistant",
+	"officialDoc": "https://www.home-assistant.io/installation/raspberrypi#install-home-assistant-container",
+	"platform": "linux",
+	"ports": [
+		"8999:8123/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Home Assistant",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/HomeAssistant/assets",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://www.home-assistant.io/"
+}

+ 52 - 0
template/apps/homebridge---debian.json

@@ -0,0 +1,52 @@
+{
+	"categories": [
+		"HomeAutomation"
+	],
+	"description": "Debian Homebridge allows you to integrate with smart home devices that do not natively support HomeKit. There are over 2,000 Homebridge plugins supporting thousands of different smart accessories.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1",
+			"label": "HOMEBRIDGE_CONFIG_UI",
+			"name": "HOMEBRIDGE_CONFIG_UI"
+		},
+		{
+			"default": "8581",
+			"label": "HOMEBRIDGE_CONFIG_UI_PORT",
+			"name": "HOMEBRIDGE_CONFIG_UI_PORT"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"image32": "oznu/homebridge:debian-arm32v7",
+	"image64": "oznu/homebridge:debian",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/homebridge.png",
+	"name": "homebridge-debian",
+	"network": "host",
+	"note": "Bringing HomeKit support where there is none",
+	"officialDoc": "https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker",
+	"platform": "linux",
+	"privileged": true,
+	"restart_policy": "unless-stopped",
+	"title": "Homebridge - Debian",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/debian-homebridge",
+			"container": "/homebridge"
+		}
+	],
+	"webpage": "https://homebridge.io/"
+}

+ 52 - 0
template/apps/homebridge.json

@@ -0,0 +1,52 @@
+{
+	"categories": [
+		"HomeAutomation"
+	],
+	"description": "Homebridge allows you to integrate with smart home devices that do not natively support HomeKit. There are over 2,000 Homebridge plugins supporting thousands of different smart accessories.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1",
+			"label": "HOMEBRIDGE_CONFIG_UI",
+			"name": "HOMEBRIDGE_CONFIG_UI"
+		},
+		{
+			"default": "8581",
+			"label": "HOMEBRIDGE_CONFIG_UI_PORT",
+			"name": "HOMEBRIDGE_CONFIG_UI_PORT"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"image32": "oznu/homebridge:latest",
+	"image64": "oznu/homebridge:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/homebridge.png",
+	"name": "homebridge",
+	"network": "host",
+	"note": "Bringing HomeKit support where there is none",
+	"officialDoc": "https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker",
+	"platform": "linux",
+	"privileged": true,
+	"restart_policy": "unless-stopped",
+	"title": "Homebridge",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/homebridge",
+			"container": "/homebridge"
+		}
+	],
+	"webpage": "https://homebridge.io/"
+}

+ 44 - 0
template/apps/homer.json

@@ -0,0 +1,44 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "A dead simple static HOMepage for your servER to keep your s ervices on hand, from a simple yaml configuration file.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "GID",
+			"name": "GID"
+		},
+		{
+			"default": "1000",
+			"label": "UID",
+			"name": "UID"
+		}
+	],
+	"image32": "b4bz/homer:latest",
+	"image64": "b4bz/homer:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/homer.png",
+	"name": "homer",
+	"note": "This container requires a yml file within the config volume. See the documentation here https://github.com/bastienwirtz/homer",
+	"officialDoc": "https://github.com/bastienwirtz/homer/blob/main/docs/configuration.md",
+	"platform": "linux",
+	"ports": [
+		"8902:8080/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Homer",
+	"type": 1,
+	"videoID": 2,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Homer/assets",
+			"container": "/www/assets"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Homer",
+			"container": "/www/config.yml"
+		}
+	],
+	"webpage": "https://github.com/bastienwirtz/homer"
+}

+ 39 - 0
template/apps/htpc-manager.json

@@ -0,0 +1,39 @@
+{
+	"categories": [
+		"Video",
+		"Music",
+		"Other"
+	],
+	"description": "HTPC Manaager, a front end for many htpc related applications. Hellowlol version.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/htpcmanager:latest",
+	"image64": "linuxserver/htpcmanager:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/htpcmanager-icon.png",
+	"name": "htpcmanager",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-htpcmanager",
+	"platform": "linux",
+	"ports": [
+		"8085:8085/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "HTPC Manager",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/HTPCmanager",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://htpc.io/"
+}

+ 26 - 0
template/apps/huginn.json

@@ -0,0 +1,26 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Create agents that monitor and act on your behalf.",
+	"image32": "mjysci/huginn:arm32v7",
+	"image64": "mjysci/huginn:arm32v7",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/huginn.png",
+	"name": "huginn",
+	"officialDoc": "https://github.com/huginn/huginn/tree/master/docker",
+	"platform": "linux",
+	"ports": [
+		"3005:3000/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Huginn",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/huginn",
+			"container": "/var/lib/mysql"
+		}
+	],
+	"webpage": "https://github.com/huginn/huginn"
+}

+ 31 - 0
template/apps/influxdb-1.8.10.json

@@ -0,0 +1,31 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "InfluxDB is an open source time series database for recording metrics, events, and analytics. You will need to add /portainer/Files/AppData/Config/Influxdb/config/influxdb.conf",
+	"hostname": "rpi-influxdb1810",
+	"image32": "influxdb:1.8.10",
+	"image64": "influxdb:1.8.10",
+	"logo": "https://raw.githubusercontent.com/docker-library/docs/43d87118415bb75d7bb107683e79cd6d69186f67/influxdb/logo.png",
+	"name": "influxdb1810",
+	"officialDoc": "https://docs.influxdata.com/influxdb/v2.0/install/?t=Docker",
+	"platform": "linux",
+	"ports": [
+		"8086:8086/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Influxdb 1.8.10",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Influxdb/data",
+			"container": "/var/lib/influxdb"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/Influxdb/config",
+			"container": "/var/lib/influxdb"
+		}
+	],
+	"webpage": "https://www.influxdata.com/"
+}

+ 42 - 0
template/apps/jackett.json

@@ -0,0 +1,42 @@
+{
+	"categories": [
+		"Downloaders",
+		"Tools"
+	],
+	"description": "Jackett works as a proxy server it translates queries from apps like Sonarr etc into tracker-site-specific http queries and parses the html response sending results back to the requesting software.[",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/jackett:latest",
+	"image64": "linuxserver/jackett:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/jacket-icon.png",
+	"name": "jackett",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-jackett",
+	"platform": "linux",
+	"ports": [
+		"9117:9117/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Jackett",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Jackett",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		}
+	],
+	"webpage": "https://github.com/Jackett/Jackett"
+}

+ 48 - 0
template/apps/jdownloader.json

@@ -0,0 +1,48 @@
+{
+	"categories": [
+		"Downloaders",
+		"Tools"
+	],
+	"description": "JDownloader docker image",
+	"env": [
+		{
+			"default": "",
+			"label": "MYJD_DEVICE_NAME",
+			"name": "MYJD_DEVICE_NAME"
+		},
+		{
+			"default": "",
+			"label": "MYJD_USER",
+			"name": "MYJD_USER"
+		},
+		{
+			"default": "",
+			"label": "MYJD_PASSWORD",
+			"name": "MYJD_PASSWORD"
+		}
+	],
+	"image32": "jaymoulin/jdownloader:latest",
+	"image64": "jaymoulin/jdownloader:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/jdownloader.png",
+	"name": "JDownloader",
+	"officialDoc": "https://github.com/jaymoulin/docker-jdownloader",
+	"platform": "linux",
+	"ports": [
+		"3129:3129/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "JDownloader",
+	"type": 1,
+	"videoID": 4,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/JDownloader",
+			"container": "/opt/JDownloader/cfg"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/opt/JDownloader/Downloads"
+		}
+	],
+	"webpage": "https://my.jdownloader.org/"
+}

+ 53 - 0
template/apps/jellyfin.json

@@ -0,0 +1,53 @@
+{
+	"categories": [
+		"Video",
+		"Music",
+		"Photos"
+	],
+	"description": "Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media. It is an alternative to the proprietary Emby and Plex, to provide media from a dedicated server to end-user devices via multiple apps.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"image32": "linuxserver/jellyfin:latest",
+	"image64": "linuxserver/jellyfin:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/jellyfin.png",
+	"name": "jellyfin",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-jellyfin",
+	"platform": "linux",
+	"ports": [
+		"8096:8096/tcp",
+		"8920:8920/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Jellyfin",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Jelllyfin",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/TV",
+			"container": "/data/tvshows"
+		},
+		{
+			"bind": "/portainer/Movies",
+			"container": "/data/movies"
+		}
+	],
+	"webpage": "https://jellyfin.org/"
+}

+ 39 - 0
template/apps/kodi-headless.json

@@ -0,0 +1,39 @@
+{
+	"categories": [
+		"Video"
+	],
+	"description": "Headless installation of Kodi™ (formerly known as XBMC™), to enable library updates.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "lsioarmhf/kodi-headless:latest",
+	"image64": "lsioarmhf/kodi-headless:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/kodi-icon.png",
+	"name": "kodi-headless",
+	"officialDoc": "https://hub.docker.com/r/lsioarmhf/kodi-headless-aarch64/",
+	"platform": "linux",
+	"ports": [
+		"8081:8080/tcp",
+		"9090:9090/tcp",
+		"9777:9777/udp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Kodi Headless",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Kodi",
+			"container": "/config/.kodi"
+		}
+	],
+	"webpage": "https://kodi.tv/"
+}

+ 42 - 0
template/apps/lazylibrarian.json

@@ -0,0 +1,42 @@
+{
+	"categories": [
+		"Books"
+	],
+	"description": "LazyLibrarian is a program to follow authors and grab metadata for all your digital reading needs.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/lazylibrarian:latest",
+	"image64": "linuxserver/lazylibrarian:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/lazylibrarian-icon.png",
+	"name": "lazylibrarian",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-lazylibrarian",
+	"platform": "linux",
+	"ports": [
+		"5299:5299/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "LazyLibrarian",
+	"type": 1,
+	"volumes": [
+		{
+			"container": "/config"
+		},
+		{
+			"container": "/downloads"
+		},
+		{
+			"container": "/books"
+		}
+	],
+	"webpage": "https://lazylibrarian.gitlab.io/"
+}

+ 74 - 0
template/apps/let's-encrypt.json

@@ -0,0 +1,74 @@
+{
+	"categories": [
+		"Tools",
+		"Web"
+	],
+	"description": "[DEPRECATED] This container sets up an Nginx webserver and reverse proxy with php support and a built-in letsencrypt client that automates free SSL server certificate generation and renewal processes. It also contains fail2ban for intrusion prevention.\r\n  \r\n  Before running this container, make sure that the url and subdomains are properly forwarded to this container's host.\r\n  \r\n  - Port 443 on the internet side of the router should be forwarded to this container's port 443.\r\n  - If you need a dynamic dns provider, you can use the free provider duckdns.org where the url will be yoursubdomain.duckdns.org and the subdomains    can be www,ftp,cloud\r\n  - The container detects changes to url and subdomains, revokes existing certs and generates new ones during start. \r\n  - It also detects changes to the DHLEVEL parameter and replaces the dhparams file.\r\n  \r\n  - If you'd like to password protect your sites, you can use htpasswd. Run the following command on your host to generate the htpasswd file docker exec -it letsencrypt htpasswd -c /config/nginx/.htpasswd &lt;username&gt;",
+	"env": [
+		{
+			"default": "-Xms256m -Xmx512m",
+			"label": "EMAIL",
+			"name": "EMAIL"
+		},
+		{
+			"default": "-Xms256m -Xmx512m",
+			"label": "URL",
+			"name": "URL"
+		},
+		{
+			"default": "www,",
+			"label": "SUBDOMAINS",
+			"name": "SUBDOMAINS"
+		},
+		{
+			"default": "false",
+			"label": "ONLY_SUBDOMAINS",
+			"name": "ONLY_SUBDOMAINS"
+		},
+		{
+			"default": "2048",
+			"label": "DHLEVEL",
+			"name": "DHLEVEL"
+		},
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "http",
+			"label": "VALIDATION",
+			"name": "VALIDATION"
+		},
+		{
+			"default": "http",
+			"label": "DNSPLUGIN",
+			"name": "DNSPLUGIN"
+		}
+	],
+	"image32": "linuxserver/letsencrypt:latest",
+	"image64": "linuxserver/letsencrypt:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/letsencrypt.png",
+	"name": "letsencrypt",
+	"officialDoc": "https://hub.docker.com/r/linuxserver/letsencrypt",
+	"platform": "linux",
+	"ports": [
+		"80:80/tcp",
+		"443:443/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Let's Encrypt",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/LetsEncrypt",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://letsencrypt.org/"
+}

+ 26 - 0
template/apps/libreddit.json

@@ -0,0 +1,26 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "An alternative private front-end to Reddit",
+	"image32": "spikecodes/libreddit:armv7",
+	"image64": "spikecodes/libreddit:arm",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/libreddit.png",
+	"name": "libreddit",
+	"officialDoc": "https://github.com/spikecodes/libreddit#2-docker",
+	"platform": "linux",
+	"ports": [
+		"8088:8080/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "libreddit",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/libreddit",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://libreddit.silkky.cloud/"
+}

+ 38 - 0
template/apps/librespeed.json

@@ -0,0 +1,38 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "A Free and Open Source Speedtest for HTML5 and more.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/librespeed:latest",
+	"image64": "linuxserver/librespeed:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/speedtest.png",
+	"name": "librespeed",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-librespeed",
+	"platform": "linux",
+	"ports": [
+		"83:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "LibreSpeed",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/LibreSpeed",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://librespeed.org/"
+}

+ 46 - 0
template/apps/lidarr.json

@@ -0,0 +1,46 @@
+{
+	"categories": [
+		"Downloaders",
+		"Music"
+	],
+	"description": "Lidarr is a music collection manager for Usenet and BitTorrent users.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/lidarr:latest",
+	"image64": "linuxserver/lidarr:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/lidarr.png",
+	"name": "lidarr",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-lidarr",
+	"platform": "linux",
+	"ports": [
+		"8686:8686/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "lidarr",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Lidarr",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		},
+		{
+			"bind": "/portainer/Music",
+			"container": "/music"
+		}
+	],
+	"webpage": "https://lidarr.audio/"
+}

+ 59 - 0
template/apps/lychee-with-mariadb.json

@@ -0,0 +1,59 @@
+{
+	"categories": [
+		"Cloud",
+		"Web",
+		"Management",
+		"Photos"
+	],
+	"description": "Lychee With Mariadb is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"default": "lychee",
+			"label": "DATABASE_NAME",
+			"name": "DATABASE_NAME"
+		},
+		{
+			"default": "lychee",
+			"label": "DATABASE_USER",
+			"name": "DATABASE_USER"
+		},
+		{
+			"default": "",
+			"label": "DATABASE_PASSWORD",
+			"name": "DATABASE_PASSWORD"
+		},
+		{
+			"default": "",
+			"label": "MYSQL_ROOT_PASSWORD",
+			"name": "MYSQL_ROOT_PASSWORD"
+		}
+	],
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/lychee-icon.png",
+	"name": "lychee-mariadb",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-lychee",
+	"platform": "linux",
+	"repository": {
+		"stackfile32": "stack/lychee-mariadb.yml",
+		"stackfile64": "stack/lychee-mariadb.yml",
+		"url": "https://github.com/pi-hosted/pi-hosted/"
+	},
+	"restart_policy": "unless-stopped",
+	"title": "Lychee With Mariadb",
+	"type": 3,
+	"webpage": "https://lycheeorg.github.io/"
+}

+ 69 - 0
template/apps/lychee.json

@@ -0,0 +1,69 @@
+{
+	"categories": [
+		"Cloud",
+		"Web",
+		"Management",
+		"Photos"
+	],
+	"description": "Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "mariadb",
+			"label": "DB_HOST",
+			"name": "DB_HOST"
+		},
+		{
+			"default": "lychee",
+			"label": "DB_USERNAME",
+			"name": "DB_USERNAME"
+		},
+		{
+			"default": "dbpassword_that_was_set_in_lychee-mariadb",
+			"label": "DB_PASSWORD",
+			"name": "DB_PASSWORD"
+		},
+		{
+			"default": "lychee",
+			"label": "DB_DATABASE",
+			"name": "DB_DATABASE"
+		},
+		{
+			"default": "3306",
+			"label": "DB_PORT",
+			"name": "DB_PORT"
+		}
+	],
+	"image32": "linuxserver/lychee:arm32v7-latest",
+	"image64": "linuxserver/lychee:arm64v8-latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/lychee-icon.png",
+	"name": "lychee",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-lychee",
+	"platform": "linux",
+	"ports": [
+		"84:84/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Lychee",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Lychee",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Pictures",
+			"container": "/pictures"
+		}
+	],
+	"webpage": "https://lycheeorg.github.io/"
+}

+ 58 - 0
template/apps/mariadb.json

@@ -0,0 +1,58 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "An Enhanced drop in replacement for Mysql",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "",
+			"label": "MYSQL_DATABASE",
+			"name": "MYSQL_DATABASE"
+		},
+		{
+			"default": "",
+			"label": "MYSQL_USER",
+			"name": "MYSQL_USER"
+		},
+		{
+			"default": "dbpassword",
+			"label": "MYSQL_PASSWORD",
+			"name": "MYSQL_PASSWORD"
+		},
+		{
+			"default": "rootpassword",
+			"label": "MYSQL_ROOT_PASSWORD",
+			"name": "MYSQL_ROOT_PASSWORD"
+		}
+	],
+	"image32": "linuxserver/mariadb:arm32v7-latest",
+	"image64": "linuxserver/mariadb:arm64v8-latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/mariadb-icon.png",
+	"name": "mariadb",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-mariadb",
+	"platform": "linux",
+	"ports": [
+		"3306:3306/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "MariaDB",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Mariadb",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://mariadb.org/"
+}

+ 84 - 0
template/apps/mealie.json

@@ -0,0 +1,84 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "A self-hosted recipe manager and meal planner",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"default": "2",
+			"label": "WEB_CONCURRENCY",
+			"name": "WEB_CONCURRENCY"
+		},
+		{
+			"default": "8",
+			"label": "MAX_WORKERS",
+			"name": "MAX_WORKERS"
+		},
+		{
+			"default": "true",
+			"label": "RECIPE_PUBLIC",
+			"name": "RECIPE_PUBLIC"
+		},
+		{
+			"default": "true",
+			"label": "RECIPE_SHOW_NUTRITION",
+			"name": "RECIPE_SHOW_NUTRITION"
+		},
+		{
+			"default": "true",
+			"label": "RECIPE_SHOW_ASSETS",
+			"name": "RECIPE_SHOW_ASSETS"
+		},
+		{
+			"default": "true",
+			"label": "RECIPE_LANDSCAPE_VIEW",
+			"name": "RECIPE_LANDSCAPE_VIEW"
+		},
+		{
+			"default": "false",
+			"label": "RECIPE_DISABLE_COMMENTS",
+			"name": "RECIPE_DISABLE_COMMENTS"
+		},
+		{
+			"default": "false",
+			"label": "RECIPE_DISABLE_AMOUNT",
+			"name": "RECIPE_DISABLE_AMOUNT"
+		}
+	],
+	"image32": "hkotel/mealie:v0.4.3",
+	"image64": "hkotel/mealie:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/mealie.png",
+	"name": "mealie",
+	"note": "Default Credentials: Username: changeme@email.com Password: MyPassword. Documentation is Available <a href='https://hay-kot.github.io/mealie/documentation/getting-started/install/'>here</a>.",
+	"officialDoc": "https://hay-kot.github.io/mealie/documentation/getting-started/install/",
+	"platform": "linux",
+	"ports": [
+		"9925:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Mealie",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/mealie",
+			"container": "/app/data"
+		}
+	],
+	"webpage": "https://hay-kot.github.io/mealie/"
+}

+ 46 - 0
template/apps/medusa.json

@@ -0,0 +1,46 @@
+{
+	"categories": [
+		"Downloaders",
+		"Video"
+	],
+	"description": "Medusa, automatic Video Library Manager for TV Shows. It watches for new episodes of your favorite shows, and when they are posted it does its magic.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/medusa:latest",
+	"image64": "linuxserver/medusa:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/medusa-icon.png",
+	"name": "medusa",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-medusa",
+	"platform": "linux",
+	"ports": [
+		"8081:8081/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Medusa",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Medusa",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/TV",
+			"container": "/tv"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		}
+	],
+	"webpage": "https://pymedusa.com/"
+}

+ 34 - 0
template/apps/minecraft-server.json

@@ -0,0 +1,34 @@
+{
+	"categories": [
+		"Other",
+		"Tools",
+		"Games"
+	],
+	"description": "This docker image provides a Minecraft Server that will automatically download the latest stable version at startup. You can also run/upgrade to any specific version or the latest snapshot. See the Versions section below for more information.",
+	"env": [
+		{
+			"default": "TRUE",
+			"label": "EULA",
+			"name": "EULA"
+		}
+	],
+	"image32": "itzg/minecraft-server:latest",
+	"image64": "itzg/minecraft-server:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/minecraft.png",
+	"name": "minecraft",
+	"officialDoc": "https://github.com/itzg/docker-minecraft-server#using-docker-compose",
+	"platform": "linux",
+	"ports": [
+		"25565:25565/tcp"
+	],
+	"restart_polocy": "unless-stopped",
+	"title": "Minecraft Server",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Minecraft-data",
+			"container": "/data"
+		}
+	],
+	"webpage": "https://www.minecraft.net/en-us"
+}

+ 36 - 0
template/apps/minetest.json

@@ -0,0 +1,36 @@
+{
+	"categories": [
+		"Other"
+	],
+	"description": "Server version of minetest, a free, open source alternative to minecraft.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/minetest:latest",
+	"image64": "linuxserver/minetest:latest",
+	"logo": "https://raw.githubusercontent.com/linuxserver/beta-templates/master/lsiodev/img/minetest-icon.png",
+	"name": "minetest",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-minetest",
+	"platform": "linux",
+	"ports": [
+		"30000:30000/udp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Minetest",
+	"type": 1,
+	"volumes": [
+		{
+			"container": "/config/.minetest"
+		}
+	],
+	"webpage": "https://www.minetest.net/"
+}

+ 35 - 0
template/apps/minisatip.json

@@ -0,0 +1,35 @@
+{
+	"categories": [
+		"Video",
+		"Other",
+		"Tools"
+	],
+	"description": "Minisatip is a multi-threaded satip server version 1.2 that runs under Linux and it was tested with DVB-S, DVB-S2, DVB-T, DVB-T2, DVB-C, DVB-C2, ATSC and ISDB-T cards.\n\n  The application is designed to stream the requested data to multiple clients (even with one dvb card) at the same time while opening different pids.\n  ",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/minisatip:latest",
+	"image64": "linuxserver/minisatip:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/minisatip-icon.png",
+	"name": "minisatip",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-minisatip",
+	"platform": "linux",
+	"ports": [
+		"8875:8875/tcp",
+		"554:554/tcp",
+		"1900:1900/udp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Minisatip",
+	"type": 1,
+	"webpage": "https://github.com/catalinii/minisatip"
+}

+ 42 - 0
template/apps/mstream.json

@@ -0,0 +1,42 @@
+{
+	"categories": [
+		"Other",
+		"Music"
+	],
+	"description": "Mstream is a personal music streaming server. You can use mStream to stream your music from your home computer to any device, anywhere. There are mobile apps available for both Android and iPhone..",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/mstream:latest",
+	"image64": "linuxserver/mstream:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/mstream.png",
+	"name": "mstream",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-mstream",
+	"platform": "linux",
+	"ports": [
+		"3200:3000/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Mstream",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Mstream",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/music"
+		}
+	],
+	"webpage": "https://mstream.io/"
+}

+ 57 - 0
template/apps/murmur.json

@@ -0,0 +1,57 @@
+{
+	"categories": [
+		"Other",
+		"Voice",
+		"Chat"
+	],
+	"description": "Mumble is a voicechat program for gamers written on top of Qt and Opus. Murmur is the server backend for Mumble.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"image32": "yhaenggi/murmur:1.3.4",
+	"image64": "yhaenggi/murmur:1.3.4",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/Mumble-logo.png",
+	"name": "murmur",
+	"officialDoc": "https://github.com/yhaenggi/murmur-docker",
+	"platform": "linux",
+	"ports": [
+		"64738:64738/tcp",
+		"64738:64738/udp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Murmur",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/etc/localtime:ro",
+			"container": "/etc/localtime"
+		},
+		{
+			"bind": "/portainer/Files/Config/Murmur",
+			"container": "/opt/murmur/config"
+		},
+		{
+			"bind": "/portainer/Files/Murmur/data",
+			"container": "/opt/murmur/data"
+		},
+		{
+			"bind": "/portainer/Files/Murmur/log",
+			"container": "/opt/murmur/log"
+		}
+	],
+	"webpage": "https://www.mumble.info/"
+}

+ 48 - 0
template/apps/musicbrainz.json

@@ -0,0 +1,48 @@
+{
+	"categories": [
+		"Music",
+		"Other",
+		"Tools"
+	],
+	"description": " MusicBrainz is an open music encyclopedia that collects music metadata and makes it available to the public.",
+	"env": [
+		{
+			"default": "",
+			"label": "BRAINZCODE",
+			"name": "BRAINZCODE"
+		},
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/musicbrainz:latest",
+	"image64": "linuxserver/musicbrainz:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/musicbrainz-icon.png",
+	"name": "musicbrainz",
+	"officialDoc": "https://github.com/linuxserver-archive/docker-musicbrainz",
+	"platform": "linux",
+	"ports": [
+		"5000:5000/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "MusicBrainz",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/MusicBrainz",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Files/AppData/MusicBrainz",
+			"container": "/data"
+		}
+	],
+	"webpage": "https://musicbrainz.org/"
+}

+ 40 - 0
template/apps/muximux.json

@@ -0,0 +1,40 @@
+{
+	"categories": [
+		"Web",
+		"Proxy",
+		"Other",
+		"Tools"
+	],
+	"description": "A lightweight portal to view, manage your HTPC apps without having to run anything more than a PHP enabled webserver. With Muximux you don't need to keep multiple tabs open, or bookmark the URL to all of your apps.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/muximux:latest",
+	"image64": "linuxserver/muximux:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/muximux-icon.png",
+	"name": "muximux",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-muximux",
+	"platform": "linux",
+	"ports": [
+		"7205:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Muximux",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Muximux",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://github.com/mescon/Muximux"
+}

+ 46 - 0
template/apps/mylar.json

@@ -0,0 +1,46 @@
+{
+	"categories": [
+		"Downloaders",
+		"Books"
+	],
+	"description": "An automated Comic Book downloader (cbr/cbz) for use with SABnzbd, NZBGet and torrents.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/mylar3:latest",
+	"image64": "linuxserver/mylar3:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/mylar-icon.png",
+	"name": "mylar",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-mylar3",
+	"platform": "linux",
+	"ports": [
+		"8090:8090/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Mylar",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Mylar",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		},
+		{
+			"bind": "/portainer/Comics",
+			"container": "/comics"
+		}
+	],
+	"webpage": "https://github.com/mylar3/mylar3"
+}

+ 44 - 0
template/apps/n8n.json

@@ -0,0 +1,44 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "n8n is an extendable workflow automation tool.",
+	"env": [
+		{
+			"default": "true",
+			"label": "N8N_BASIC_AUTH_ACTIVE",
+			"name": "N8N_BASIC_AUTH_ACTIVE"
+		},
+		{
+			"default": "admin",
+			"label": "N8N_BASIC_AUTH_USER",
+			"name": "N8N_BASIC_AUTH_USER"
+		},
+		{
+			"default": "admin",
+			"label": "N8N_BASIC_AUTH_PASSWORD",
+			"name": "N8N_BASIC_AUTH_PASSWORD"
+		}
+	],
+	"image32": "n8nio/n8n:latest",
+	"image64": "n8nio/n8n:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/n8n.jpg",
+	"name": "n8n",
+	"note": "Documentation is Available <a href='https://docs.n8n.io/'>here</a>",
+	"officialDoc": "https://docs.n8n.io/getting-started/installation/#docker",
+	"platform": "linux",
+	"ports": [
+		"5678:5678/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "n8n",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/n8n",
+			"container": "/home/node/.n8n"
+		}
+	],
+	"webpage": "https://n8n.io/"
+}

+ 63 - 0
template/apps/netdata.json

@@ -0,0 +1,63 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Troubleshoot slowdowns and anomalies in your infrastructure with thousands of per-second metrics, meaningful visualizations, and insightful health alarms with zero configuration.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "DOCKER_USR",
+			"name": "DOCKER_USR"
+		},
+		{
+			"default": "1000",
+			"label": "DOCKER_GRP",
+			"name": "DOCKER_GRP"
+		}
+	],
+	"image32": "netdata/netdata:latest",
+	"image64": "netdata/netdata:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/netdata.png",
+	"name": "netdata",
+	"note": "Documentation is Available <a href='https://learn.netdata.cloud/'>here</a>.",
+	"officialDoc": "https://learn.netdata.cloud/docs/agent/packaging/docker",
+	"platform": "linux",
+	"ports": [
+		"19999:19999/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Netdata",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/netdata/netdataconfig",
+			"container": "/etc/netdata"
+		},
+		{
+			"bind": "/portainer/Files/AppData/Config/netdata/netdatalib",
+			"container": "/var/lib/netdata"
+		},
+		{
+			"bind": "/etc/passwd",
+			"container": "/host/etc/passwd:ro"
+		},
+		{
+			"bind": "/etc/group",
+			"container": "/host/etc/group:ro"
+		},
+		{
+			"bind": "/proc",
+			"container": "/host/proc:ro"
+		},
+		{
+			"bind": "/sys",
+			"container": "/host/sys:ro"
+		},
+		{
+			"bind": "/etc/os-release",
+			"container": "/host/etc/os-release:ro"
+		}
+	],
+	"webpage": "https://www.netdata.cloud/"
+}

+ 52 - 0
template/apps/nextcloud.json

@@ -0,0 +1,52 @@
+{
+	"categories": [
+		"Cloud",
+		"Productivity",
+		"Tools",
+		"Other",
+		"Web"
+	],
+	"description": "Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"label": "DATABASE_PASSWORD",
+			"name": "DATABASE_PASSWORD"
+		},
+		{
+			"label": "MYSQL_ROOT_PASSWORD",
+			"name": "MYSQL_ROOT_PASSWORD"
+		},
+		{
+			"label": "PORT",
+			"name": "PORT"
+		}
+	],
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/nextcloud-icon.png",
+	"name": "nextcloud",
+	"note": "The database user is nextcloud and the database is nextcloud_db. The host of the database will be located at the bottom of the DB conotainer in portainer.",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-nextcloud",
+	"platform": "linux",
+	"repository": {
+		"stackfile32": "stack/nextcloud.yml",
+		"stackfile64": "stack/nextcloud.yml",
+		"url": "https://github.com/pi-hosted/pi-hosted"
+	},
+	"title": "Nextcloud",
+	"type": 3,
+	"webpage": "https://nextcloud.com/"
+}

+ 44 - 0
template/apps/nextcloudpi.json

@@ -0,0 +1,44 @@
+{
+	"categories": [
+		"Cloud",
+		"Productivity",
+		"Tools",
+		"Other",
+		"Web"
+	],
+	"description": "Where are your photos and documents? With Nextcloud you pick a server of your choice, at home, in a data center or at a provider. And that is where your files will be. Nextcloud runs on that server, protecting your data and giving you access from your desktop or mobile devices.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"extraScript": "reset_premissions_nextcloud.sh",
+	"image32": "ownyourbits/nextcloudpi",
+	"image64": "ownyourbits/nextcloudpi:latest",
+	"name": "nextcloudpi",
+	"note": "The database user is nextcloud and the database is nextcloud_db. The host of the database will be located at the bottom of the DB conotainer in portainer.",
+	"officialDoc": "https://ownyourbits.com/2017/06/08/nextcloudpi-docker-for-raspberry-pi/",
+	"platform": "linux",
+	"ports": [
+		"4444:4443/tcp",
+		"8443:443/tcp",
+		"8480:8480/tcp"
+	],
+	"title": "NextcloudPi",
+	"type": 1,
+	"videoID": 8,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/ncdata",
+			"container": "/data"
+		}
+	],
+	"webpage": "https://ownyourbits.com/nextcloudpi/"
+}

+ 55 - 0
template/apps/nginx-proxy-manager.json

@@ -0,0 +1,55 @@
+{
+	"categories": [
+		"Proxy",
+		"Tools"
+	],
+	"description": "Nginx Proxy Manager enables you to easily forward to your websites running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.  Please see the install document at https://github.com/pi-hosted/pi-hosted/tree/master/docs installing the template",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		},
+		{
+			"default": "password",
+			"label": "DATABASE_PASSWORD",
+			"name": "DATABASE_PASSWORD"
+		},
+		{
+			"default": "password",
+			"label": "MYSQL_ROOT_PASSWORD",
+			"name": "MYSQL_ROOT_PASSWORD"
+		}
+	],
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/proxy_mgr.png",
+	"name": "nginx-proxy-manager",
+	"officialDoc": "https://nginxproxymanager.com/setup/#using-mysql-mariadb-database",
+	"piHostedDoc": "nginx_proxy_manager.md",
+	"platform": "linux",
+	"ports": [
+		"80:80/tcp",
+		"81:81/tcp",
+		"443:443/tcp"
+	],
+	"preInstallScript": "nginx-proxy-manager.sh",
+	"repository": {
+		"stackfile32": "stack/nginx-proxy-manager.yml",
+		"stackfile64": "stack/nginx-proxy-manager.yml",
+		"url": "https://github.com/pi-hosted/pi-hosted"
+	},
+	"restart_policy": "unless-stopped",
+	"title": "Nginx Proxy Manager",
+	"type": 3,
+	"videoID": 9,
+	"webpage": "https://nginxproxymanager.com/"
+}

+ 39 - 0
template/apps/nginx.json

@@ -0,0 +1,39 @@
+{
+	"categories": [
+		"Web",
+		"Proxy"
+	],
+	"description": "Nginx is a web server with a strong focus on high concurrency, performance and low memory usage. It can also act as a reverse proxy server for HTTP, HTTPS, SMTP, POP3, and IMAP protocols, as well as a load balancer and an HTTP cache.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/nginx:latest",
+	"image64": "linuxserver/nginx:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/nginx-icon.png",
+	"name": "nginx",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-nginx",
+	"platform": "linux",
+	"ports": [
+		"8080:80/tcp",
+		"8443:443/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Nginx",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Nginx",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://nginx.org/en/"
+}

+ 36 - 0
template/apps/node-red.json

@@ -0,0 +1,36 @@
+{
+	"categories": [
+		"Other",
+		"Web",
+		"Tools"
+	],
+	"description": "Node-RED is a programming tool for wiring together hardware devices, APIs and online services in new and interesting ways.  It provides a browser-based editor that makes it easy to wire together flows using the wide range of nodes in the palette that can be deployed to its runtime in a single-click.",
+	"env": [
+		{
+			"default": "your_secret_goes_here",
+			"label": "NODE_RED_CREDENTIAL_SECRET",
+			"name": "NODE_RED_CREDENTIAL_SECRET"
+		},
+		{
+			"default": "America/New_York",
+			"label": "TZ",
+			"name": "TZ"
+		}
+	],
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/node-red.png",
+	"name": "node-red",
+	"officialDoc": "https://nodered.org/docs/getting-started/docker",
+	"platform": "linux",
+	"ports": [
+		"1880:1880/tcp"
+	],
+	"repository": {
+		"stackfile32": "stack/node-red.yml",
+		"stackfile64": "stack/node-red.yml",
+		"url": "https://github.com/pi-hosted/pi-hosted/"
+	},
+	"restart_policy": "unless-stopped",
+	"title": "Node Red",
+	"type": 3,
+	"webpage": "https://nodered.org/"
+}

+ 41 - 0
template/apps/nzbget.json

@@ -0,0 +1,41 @@
+{
+	"categories": [
+		"Downloaders"
+	],
+	"description": "NZBGet is a usenet downloader, written in C++ and designed with performance in mind to achieve maximum download speed by using very little system resources. It supports all platforms including Windows, Mac, Linux and works on all devices including PC, NAS, WLAN routers and media players",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/nzbget:latest",
+	"image64": "linuxserver/nzbget:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/nzbget-icon.png",
+	"name": "nzbget",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-nzbget",
+	"platform": "linux",
+	"ports": [
+		"6789:6789/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "NZBGet",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Nzbget",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		}
+	],
+	"webpage": "https://nzbget.net/"
+}

+ 43 - 0
template/apps/nzbhydra-2.json

@@ -0,0 +1,43 @@
+{
+	"categories": [
+		"Downloaders",
+		"Other",
+		"Tools"
+	],
+	"description": "NZBHydra is a meta search for NZB indexers and the \"spiritual successor\" to NZBmegasearcH. It provides easy access to a number of raw and newznab based indexers.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/nzbhydra2:latest",
+	"image64": "linuxserver/nzbhydra2:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/hydra-icon.png",
+	"name": "nzbhydra2",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-nzbhydra2",
+	"platform": "linux",
+	"ports": [
+		"5076:5076/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "NZBHydra 2",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Nzbhydra2",
+			"container": "/config"
+		},
+		{
+			"bind": "/portainer/Downloads",
+			"container": "/downloads"
+		}
+	],
+	"webpage": "https://github.com/theotherp/nzbhydra2"
+}

+ 45 - 0
template/apps/omada-eap-controller.json

@@ -0,0 +1,45 @@
+{
+	"categories": [
+		"Management",
+		"Tools"
+	],
+	"description": "TP-Link Omada is a software-defined network solution. The EAP Controller is used to manage multiple EAPs. Raspberry Pi 1 and Zero are not supported.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "mbentley/omada-controller:latest-armv7l",
+	"image64": "mbentley/omada-controller:latest-arm64",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/omada.png",
+	"name": "omada-controller",
+	"officialDoc": "https://hub.docker.com/r/mbentley/omada-controller",
+	"platform": "linux",
+	"ports": [
+		"8088:8088/tcp",
+		"8043:8043/tcp",
+		"27001:27001/udp",
+		"27002:27002/tcp",
+		"29810:29810/udp",
+		"29811:29811/tcp",
+		"29812:29812/tcp",
+		"29813:29813/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Omada EAP Controller",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Omada",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://www.tp-link.com/us/business-networking/omada-sdn-controller/"
+}

+ 40 - 0
template/apps/ombi.json

@@ -0,0 +1,40 @@
+{
+	"categories": [
+		"Downloaders",
+		"Other",
+		"Video",
+		"Tools"
+	],
+	"description": "Ombi allows you to host your own Plex Request and user management system. ",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/ombi:latest",
+	"image64": "linuxserver/ombi:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/ombi.png",
+	"name": "ombi",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-ombi",
+	"platform": "linux",
+	"ports": [
+		"3579:3579/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Ombi",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Ombi",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://ombi.io/"
+}

+ 44 - 0
template/apps/openvpn-access-server.json

@@ -0,0 +1,44 @@
+{
+	"categories": [
+		"Other"
+	],
+	"description": "OpenVPN Access Server is a full featured secure network tunneling VPN software solution that integrates OpenVPN server capabilities, enterprise management capabilities, simplified OpenVPN Connect UI, and OpenVPN Client software packages that accommodate Windows, MAC, Linux, Android, and iOS environments.",
+	"env": [
+		{
+			"default": "eth0",
+			"label": "INTERFACE",
+			"name": "INTERFACE"
+		},
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/openvpn-as:latest",
+	"image64": "linuxserver/openvpn-as:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/openvpn-as-icon.png",
+	"name": "openvpn-as",
+	"officialDoc": "https://hub.docker.com/r/linuxserver/openvpn-as/",
+	"platform": "linux",
+	"ports": [
+		"943:943/tcp",
+		"9443:9443/tcp",
+		"1194:1194/udp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "OpenVPN Access Server",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/OpenVPN-AS",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://openvpn.net/access-server/"
+}

+ 38 - 0
template/apps/organizr-v2.json

@@ -0,0 +1,38 @@
+{
+	"categories": [
+		"Other",
+		"Tools"
+	],
+	"description": "Organizr allows you to setup Tabs that will be loaded all in one webpage. You can then work on your server with ease.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "organizr/organizr:latest",
+	"image64": "organizr/organizr:latest",
+	"logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/organizr-icon.png",
+	"name": "organizr-v2",
+	"officialDoc": "https://hub.docker.com/r/organizr/organizr",
+	"platform": "linux",
+	"ports": [
+		"7171:80/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "Organizr v2",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/Organizr",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://organizr.app/"
+}

+ 38 - 0
template/apps/oscam.json

@@ -0,0 +1,38 @@
+{
+	"categories": [
+		"Other"
+	],
+	"description": "OScam is a softcam, software to be used to decrypt digital television channels on a settopbox (receiver), as an alternative for a conditional access module\n  (CAM). OScam is, compared with other softcams (CCcam, mgcamd, etc.), open source. Hence, the name Open Source Conditional Access Module (OScam). OScam is based on the\n  not so well known softcam MpCS. The main features of OSCam are next to its softcam capabilities, that it is able to function as a cardserver.",
+	"env": [
+		{
+			"default": "1000",
+			"label": "PUID",
+			"name": "PUID"
+		},
+		{
+			"default": "1000",
+			"label": "PGID",
+			"name": "PGID"
+		}
+	],
+	"image32": "linuxserver/oscam:latest",
+	"image64": "linuxserver/oscam:latest",
+	"logo": "http://i.imgur.com/8LadrLg.png",
+	"name": "oscam",
+	"officialDoc": "https://docs.linuxserver.io/images/docker-oscam",
+	"platform": "linux",
+	"ports": [
+		"8888:8888/tcp",
+		"10000:10000/tcp"
+	],
+	"restart_policy": "unless-stopped",
+	"title": "OScam",
+	"type": 1,
+	"volumes": [
+		{
+			"bind": "/portainer/Files/AppData/Config/OScam",
+			"container": "/config"
+		}
+	],
+	"webpage": "https://trac.streamboard.tv/oscam/"
+}

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor