Jelajahi Sumber

Add files via upload

 Updated leantime and dashdot. Added privileged mode support. change vnc and vpn buttons to white
lllllllillllllillll 1 tahun lalu
induk
melakukan
49c311378e
4 mengubah file dengan 185 tambahan dan 113 penghapusan
  1. 6 5
      components/appCard.js
  2. 6 0
      controllers/app_actions.js
  3. 171 106
      templates.json
  4. 2 2
      views/partials/navbar.ejs

+ 6 - 5
components/appCard.js

@@ -10,7 +10,8 @@ function appCard(data) {
   let description = data.description.replaceAll(". ", ".\n") || "no description available";
   let description = data.description.replaceAll(". ", ".\n") || "no description available";
   let command = data.command ? data.command : "";
   let command = data.command ? data.command : "";
   let command_check = command ? "checked" : "";
   let command_check = command ? "checked" : "";
-
+  let privileged = data.privileged || "";
+  let privileged_check = privileged ? "checked" : "";
 
 
   // if data.network is set to host, bridge, or docker set the radio button to checked
   // if data.network is set to host, bridge, or docker set the radio button to checked
   let net_host, net_bridge, net_docker = '';
   let net_host, net_bridge, net_docker = '';
@@ -33,7 +34,7 @@ function appCard(data) {
     shortened_name = data.title;
     shortened_name = data.title;
   }
   }
 
 
-  
+
   function CatagoryColor(category) {
   function CatagoryColor(category) {
     switch (category) {
     switch (category) {
       case 'Other':
       case 'Other':
@@ -936,13 +937,13 @@ function appCard(data) {
                                 </div>
                                 </div>
                               </div>
                               </div>
 
 
+
                               <div class="row mb-1 align-items-end">
                               <div class="row mb-1 align-items-end">
                                 <div class="col-auto">
                                 <div class="col-auto">
-                                  <input class="form-check-input" name="hwa_check" type="checkbox">
+                                  <input class="form-check-input" name="privileged" type="checkbox" ${privileged_check}>
                                 </div>
                                 </div>
                                 <div class="col">
                                 <div class="col">
-                                  <label class="form-label">Nvidia Hardware Acceleration</label>
-                                  <input type="text" class="form-control" name="command" value="Nvidia"/>
+                                  <label class="form-label">Privileged Mode</label>
                                 </div>
                                 </div>
                               </div>
                               </div>
             
             

+ 6 - 0
controllers/app_actions.js

@@ -88,6 +88,12 @@ exports.Install = async function (req, res) {
             }
             }
         }
         }
 
 
+        // Add privileged mode 
+
+        if (req.body.privileged == 'on') {
+            compose_file += `\n    privileged: true`
+        }
+
 
 
         // Add hardware acceleration to the docker-compose file if one of the environment variables has the label DRINODE
         // Add hardware acceleration to the docker-compose file if one of the environment variables has the label DRINODE
         if (env_0_check == 'on' || env_1_check == 'on' || env_2_check == 'on' || env_3_check == 'on' || env_4_check == 'on' || env_5_check == 'on' || env_6_check == 'on' || env_7_check == 'on' || env_8_check == 'on' || env_9_check == 'on' || env_10_check == 'on' || env_11_check == 'on') {
         if (env_0_check == 'on' || env_1_check == 'on' || env_2_check == 'on' || env_3_check == 'on' || env_4_check == 'on' || env_5_check == 'on' || env_6_check == 'on' || env_7_check == 'on' || env_8_check == 'on' || env_9_check == 'on' || env_10_check == 'on' || env_11_check == 'on') {

+ 171 - 106
templates.json

@@ -284,20 +284,20 @@
       "ports": [],
       "ports": [],
       "volumes": [
       "volumes": [
         {
         {
-          "container": "/config",
-          "bind": "/opt/mediadepot/apps/plex"
+          "bind": "/home/docker/plex",
+          "container": "/config"
         },
         },
         {
         {
-          "container": "/data/tvshows",
-          "bind": "/media/tvshows"
+          "bind": "/media/tvshows",
+          "container": "/data/tvshows"
         },
         },
         {
         {
-          "container": "/data/movies",
-          "bind": "/media/movies"
+          "bind": "/media/movies",
+          "container": "/data/movies"
         },
         },
         {
         {
-          "container": "/data/music",
-          "bind": "/media/music"
+          "bind": "/media/music",
+          "container": "/data/music"
         },
         },
         {
         {
           "container": "/transcode"
           "container": "/transcode"
@@ -344,12 +344,12 @@
       ],
       ],
       "volumes": [
       "volumes": [
         {
         {
-          "container": "/config",
-          "bind": "/opt/mediadepot/apps/prowlarr"
+          "bind": "/home/docker/prowlarr",
+          "container": "/config"
         },
         },
         {
         {
-          "container": "/etc/localtime",
-          "bind": "/etc/localtime",
+          "bind": "/etc/localtime:ro",
+          "container": "/etc/localtime:ro",
           "readonly": true
           "readonly": true
         }
         }
       ],
       ],
@@ -427,12 +427,12 @@
       ],
       ],
       "volumes": [
       "volumes": [
         {
         {
-          "container": "/config",
-          "bind": "/opt/mediadepot/apps/readarr"
+          "bind": "/home/docker/readarr",
+          "container": "/config"
         },
         },
         {
         {
-          "container": "/downloads",
-          "bind": "/media/storage/downloads/ebooks"
+          "bind": "/media/downloads/ebooks",
+          "container": "/downloads"
         },
         },
         {
         {
           "container": "/books",
           "container": "/books",
@@ -674,12 +674,12 @@
       ],
       ],
       "volumes": [
       "volumes": [
         {
         {
-          "container": "/data/database",
-          "bind": "/opt/mediadepot/apps/wizarr"
+          "bind": "/home/docker/wizarr",
+          "container": "/data/database"
         },
         },
         {
         {
+          "bind": "/etc/localtime:ro",
           "container": "/etc/localtime",
           "container": "/etc/localtime",
-          "bind": "/etc/localtime",
           "readonly": true
           "readonly": true
         }
         }
       ],
       ],
@@ -744,9 +744,11 @@
       "type": 1,
       "type": 1,
       "volumes": [
       "volumes": [
         {
         {
+          "bind": "/home/docker/transmission",
           "container": "/config"
           "container": "/config"
         },
         },
         {
         {
+          "bind": "/media",
           "container": "/downloads"
           "container": "/downloads"
         },
         },
         {
         {
@@ -758,7 +760,7 @@
       "categories": [
       "categories": [
         "Video"
         "Video"
       ],
       ],
-      "description": "Headless installation of Kodi\u00ef\u00bf\u00bd (formerly known as XBMC\u00ef\u00bf\u00bd), to enable library updates.",
+      "description": "Headless installation of Kodi.",
       "env": [
       "env": [
         {
         {
           "label": "PUID",
           "label": "PUID",
@@ -1356,7 +1358,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/apprise-api/config"
+          "bind": "/home/docker/apprise-api"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -1400,7 +1402,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/audacity/config"
+          "bind": "/home/docker/audacity/config"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -1444,16 +1446,16 @@
       ],
       ],
       "volumes": [
       "volumes": [
         {
         {
-          "container": "/config",
-          "bind": "/volume1/docker/bazarr/config"
+          "bind": "/home/docker/bazarr",
+          "container": "/config"
         },
         },
         {
         {
-          "container": "/movies",
-          "bind": "/volume1/docker/bazarr/movies"
+          "bind": "/home/docker/bazarr/movies",
+          "container": "/movies"
         },
         },
         {
         {
           "container": "/tv",
           "container": "/tv",
-          "bind": "/volume1/docker/bazarr/tv"
+          "bind": "/home/docker/bazarr/tv"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -1499,7 +1501,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/changedetection.io/config"
+          "bind": "/home/docker/changedetection.io"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -1514,7 +1516,7 @@
         "Development"
         "Development"
       ],
       ],
       "platform": "linux",
       "platform": "linux",
-      "logo": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/code-server-banner.png",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/code-server.png",
       "image": "linuxserver/code-server:latest",
       "image": "linuxserver/code-server:latest",
       "env": [
       "env": [
         {
         {
@@ -1561,7 +1563,7 @@
         {
         {
           "name": "PROXY_DOMAIN",
           "name": "PROXY_DOMAIN",
           "label": "PROXY_DOMAIN",
           "label": "PROXY_DOMAIN",
-          "default": "code-server.my.domain",
+          "default": "code-server.mydomain",
           "description": "If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#sub-domains)"
           "description": "If this optional variable is set, this domain will be proxied for subdomain proxying. See [Documentation](https://github.com/cdr/code-server/blob/master/docs/FAQ.md#sub-domains)"
         },
         },
         {
         {
@@ -1622,7 +1624,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/dokuwiki/config"
+          "bind": "/home/docker/dokuwiki"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -1770,7 +1772,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/doplarr/config"
+          "bind": "/home/docker/doplarr"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -1867,7 +1869,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/embystat/config"
+          "bind": "/home/docker/embystat"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -1918,11 +1920,11 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/emulatorjs/config"
+          "bind": "/home/docker/emulatorjs"
         },
         },
         {
         {
           "container": "/data",
           "container": "/data",
-          "bind": "/volume1/docker/emulatorjs/data"
+          "bind": "/home/docker/emulatorjs/data"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -1969,79 +1971,79 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/fail2ban/config"
+          "bind": "/home/docker/fail2ban/config"
         },
         },
         {
         {
           "container": "/var/log:ro",
           "container": "/var/log:ro",
-          "bind": "/volume1/docker/fail2ban/var/log:ro"
+          "bind": "/home/docker/fail2ban/var/log:ro"
         },
         },
         {
         {
           "container": "/remotelogs/airsonic:ro",
           "container": "/remotelogs/airsonic:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/airsonic:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/airsonic:ro"
         },
         },
         {
         {
           "container": "/remotelogs/apache2:ro",
           "container": "/remotelogs/apache2:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/apache2:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/apache2:ro"
         },
         },
         {
         {
           "container": "/remotelogs/authelia:ro",
           "container": "/remotelogs/authelia:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/authelia:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/authelia:ro"
         },
         },
         {
         {
           "container": "/remotelogs/emby:ro",
           "container": "/remotelogs/emby:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/emby:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/emby:ro"
         },
         },
         {
         {
           "container": "/remotelogs/filebrowser:ro",
           "container": "/remotelogs/filebrowser:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/filebrowser:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/filebrowser:ro"
         },
         },
         {
         {
           "container": "/remotelogs/homeassistant:ro",
           "container": "/remotelogs/homeassistant:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/homeassistant:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/homeassistant:ro"
         },
         },
         {
         {
           "container": "/remotelogs/lighttpd:ro",
           "container": "/remotelogs/lighttpd:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/lighttpd:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/lighttpd:ro"
         },
         },
         {
         {
           "container": "/remotelogs/nextcloud:ro",
           "container": "/remotelogs/nextcloud:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/nextcloud:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/nextcloud:ro"
         },
         },
         {
         {
           "container": "/remotelogs/nginx:ro",
           "container": "/remotelogs/nginx:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/nginx:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/nginx:ro"
         },
         },
         {
         {
           "container": "/remotelogs/nzbget:ro",
           "container": "/remotelogs/nzbget:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/nzbget:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/nzbget:ro"
         },
         },
         {
         {
           "container": "/remotelogs/overseerr:ro",
           "container": "/remotelogs/overseerr:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/overseerr:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/overseerr:ro"
         },
         },
         {
         {
           "container": "/remotelogs/prowlarr:ro",
           "container": "/remotelogs/prowlarr:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/prowlarr:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/prowlarr:ro"
         },
         },
         {
         {
           "container": "/remotelogs/radarr:ro",
           "container": "/remotelogs/radarr:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/radarr:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/radarr:ro"
         },
         },
         {
         {
           "container": "/remotelogs/sabnzbd:ro",
           "container": "/remotelogs/sabnzbd:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/sabnzbd:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/sabnzbd:ro"
         },
         },
         {
         {
           "container": "/remotelogs/sonarr:ro",
           "container": "/remotelogs/sonarr:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/sonarr:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/sonarr:ro"
         },
         },
         {
         {
           "container": "/remotelogs/unificontroller:ro",
           "container": "/remotelogs/unificontroller:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/unificontroller:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/unificontroller:ro"
         },
         },
         {
         {
           "container": "/remotelogs/vaultwarden:ro",
           "container": "/remotelogs/vaultwarden:ro",
-          "bind": "/volume1/docker/fail2ban/remotelogs/vaultwarden:ro"
+          "bind": "/home/docker/fail2ban/remotelogs/vaultwarden:ro"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -2085,7 +2087,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/homeassistant/config"
+          "bind": "/home/docker/homeassistant"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -2107,13 +2109,13 @@
         {
         {
           "name": "PUID",
           "name": "PUID",
           "label": "PUID",
           "label": "PUID",
-          "default": "1024",
+          "default": "1000",
           "description": "for UserID"
           "description": "for UserID"
         },
         },
         {
         {
           "name": "PGID",
           "name": "PGID",
           "label": "PGID",
           "label": "PGID",
-          "default": "100",
+          "default": "1000",
           "description": "for GroupID"
           "description": "for GroupID"
         },
         },
         {
         {
@@ -2138,16 +2140,16 @@
       ],
       ],
       "volumes": [
       "volumes": [
         {
         {
-          "container": "/config",
-          "bind": "/volume1/docker/jellyfin/config"
+          "bind": "/home/docker/jellyfin",
+          "container": "/config"
         },
         },
         {
         {
-          "container": "/data/tvshows",
-          "bind": "/volume1/docker/jellyfin/data/tvshows"
+          "bind": "/media/tvshows",
+          "container": "/data/tvshows"
         },
         },
         {
         {
-          "container": "/data/movies",
-          "bind": "/volume1/docker/jellyfin/data/movies"
+          "bind": "/media/movies",
+          "container": "/data/movies"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -2195,11 +2197,11 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/opt",
           "container": "/opt",
-          "bind": "/volume1/docker/kasm/opt"
+          "bind": "/home/docker/kasm/opt"
         },
         },
         {
         {
           "container": "/profiles",
           "container": "/profiles",
-          "bind": "/volume1/docker/kasm/profiles"
+          "bind": "/home/docker/kasm/profiles"
         },
         },
         {
         {
           "container": "/dev/input",
           "container": "/dev/input",
@@ -2251,7 +2253,7 @@
       ],
       ],
       "volumes": [
       "volumes": [
         {
         {
-          "bind": "/volume1/docker/libreoffice/config",
+          "bind": "/home/docker/libreoffice/config",
           "container": "/config"
           "container": "/config"
         }
         }
       ],
       ],
@@ -2494,7 +2496,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/mastodon/config"
+          "bind": "/home/docker/mastodon/config"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -2549,7 +2551,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/phpmyadmin/config"
+          "bind": "/home/docker/phpmyadmin/config"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -2590,7 +2592,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/pidgin/config"
+          "bind": "/home/docker/pidgin/config"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -2631,7 +2633,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/remmina/config"
+          "bind": "/home/docker/remmina/config"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -2672,7 +2674,7 @@
       "volumes": [
       "volumes": [
         {
         {
           "container": "/config",
           "container": "/config",
-          "bind": "/volume1/docker/sqlitebrowser/config"
+          "bind": "/home/docker/sqlitebrowser/config"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -2986,8 +2988,8 @@
       ],
       ],
       "volumes": [
       "volumes": [
         {
         {
-          "container": "/config",
-          "bind": "/volume1/docker/wireshark/config"
+          "bind": "/home/docker/wireshark",
+          "container": "/config"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -3238,7 +3240,7 @@
           "container": "/www/assets"
           "container": "/www/assets"
         },
         },
         {
         {
-          "bind": "/home/docker/homer",
+          "bind": "/home/docker/homer/config",
           "container": "/www/config.yml"
           "container": "/www/config.yml"
         }
         }
       ]
       ]
@@ -3533,12 +3535,12 @@
       ],
       ],
       "volumes": [
       "volumes": [
         {
         {
-          "container": "/config",
-          "bind": "/volume1/docker/paperless-ng/config"
+          "bind": "/home/docker/paperless-ng/config",
+          "container": "/config"
         },
         },
         {
         {
           "container": "/data",
           "container": "/data",
-          "bind": "/volume1/docker/paperless-ng/data"
+          "bind": "/home/docker/paperless-ng/data"
         }
         }
       ],
       ],
       "restart_policy": "unless-stopped"
       "restart_policy": "unless-stopped"
@@ -4588,10 +4590,9 @@
     },
     },
     {
     {
       "categories": [
       "categories": [
-        "Networking",
-        "VPN"
+        "Networking"
       ],
       ],
-      "description": "Fast VPN Server with easy to use User Interface",
+      "description": "Quickly and easily configure Wireguard through a web browser.",
       "env": [
       "env": [
         {
         {
           "default": "example.domain.com",
           "default": "example.domain.com",
@@ -4626,14 +4627,11 @@
           "name": "WG_ALLOWED_IPS"
           "name": "WG_ALLOWED_IPS"
         }
         }
       ],
       ],
-      "logo": "https://raw.githubusercontent.com/pi-hosted/pi-hosted/master/images/wireguard.png",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/wireguard.png",
       "name": "wg-easy",
       "name": "wg-easy",
       "platform": "linux",
       "platform": "linux",
-      "repository": {
-        "stackfile": "stack/wireguard-easy.yml",
-        "url": "https://github.com/pi-hosted/pi-hosted"
-      },
-      "title": "Wireguard Server",
+      "image": "weejewel/wg-easy",
+      "title": "WireGuard-Easy",
       "type": 3,
       "type": 3,
       "note": ""
       "note": ""
     },
     },
@@ -5065,16 +5063,45 @@
         "LDAP"
         "LDAP"
       ],
       ],
       "description": "Tubearchivist is your self hosted YouTube media server",
       "description": "Tubearchivist is your self hosted YouTube media server",
-      "note": "Require a Redis and Elasticsearch database. Tube Archivist needs around 2GB of available memory for a small testing setup and around 4GB of available memory for a mid to large sized installation. Minimal with dual core with 4 threads, better quad core plus.",
+      "note": "Requires a Redis and Elasticsearch database. Tube Archivist needs around 2GB of available memory for a small testing setup and around 4GB of available memory for a mid to large sized installation. Minimal with dual core with 4 threads, better quad core plus.",
       "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/tube-archivist.png",
       "logo": "https://raw.githubusercontent.com/walkxcode/dashboard-icons/main/png/tube-archivist.png",
       "name": "tubearchivist",
       "name": "tubearchivist",
       "platform": "linux",
       "platform": "linux",
-      "repository": {
-        "stackfile": "Template/Stack/tubearchivist.yml",
-        "url": "https://github.com/xneo1/portainer_templates"
-      },
+      "image": "bbilly1/tubearchivist",
       "title": "Tubearchivist",
       "title": "Tubearchivist",
-      "type": 3
+      "type": 3,
+      "ports": [
+        "8080:8080/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/media/youtube",
+          "container": "/youtube"
+        }
+      ],
+      "env": [
+        {
+          "name": "INFLUXDB_ADMIN_USER",
+          "label": "Admin User",
+          "description": "Admin user for InfluxDB",
+          "type": "text",
+          "default": "admin"
+        },
+        {
+          "name": "INFLUXDB_ADMIN_PASSWORD",
+          "label": "Admin Password",
+          "description": "Admin password for InfluxDB",
+          "type": "password",
+          "default": "password"
+        },
+        {
+          "name": "INFLUXDB_DB",
+          "label": "Database",
+          "description": "Database name",
+          "type": "text",
+          "default": "mydb"
+        }
+      ]
     },
     },
     {
     {
       "categories": [
       "categories": [
@@ -5250,18 +5277,49 @@
     },
     },
     {
     {
       "categories": [
       "categories": [
-        "Other"
+        "Productivity"
       ],
       ],
-      "description": "Leantime is an open source project management solution to make your ideas reality.",
-      "logo": "https://s3-us-west-2.amazonaws.com/leantime-website/wp-content/uploads/2022/07/24022056/logo-large.png",
+      "note": "Requires a MySQL database. Create a database first.",
+      "description": "Leantime is an open source project management system for small teams and startups written in PHP, Javascript using MySQL. https://leantime.io",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/leantime.png",
       "name": "leantime",
       "name": "leantime",
       "platform": "linux",
       "platform": "linux",
-      "repository": {
-        "stackfile": "Template/Stack/leantime.yml",
-        "url": "https://github.com/xneo1/portainer_templates"
-      },
+      "image": "leantime/leantime:latest",
       "title": "Leantime",
       "title": "Leantime",
-      "type": 3
+      "type": 3,
+      "ports": [
+        "80:80/tcp"
+      ],
+      "env": [
+        {
+          "name": "MYSQL_HOST",
+          "label": "Database Host",
+          "description": "Database host",
+          "type": "text",
+          "default": "mysql_leantime"
+        },
+        {
+          "name": "MYSQL_USER",
+          "label": "Database User",
+          "description": "Database user",
+          "type": "text",
+          "default": "leantime_user"
+        },
+        {
+          "name": "MYSQL_PASSWORD",
+          "label": "Database Password",
+          "description": "Database password",
+          "type": "password",
+          "default": "choose.a.long.random.password"
+        },
+        {
+          "name": "MYSQL_DATABASE",
+          "label": "Database Name",
+          "description": "Database name",
+          "type": "text",
+          "default": "leantime_database"
+        }
+      ]
     },
     },
     {
     {
       "categories": [
       "categories": [
@@ -5305,15 +5363,22 @@
         "Dashboard"
         "Dashboard"
       ],
       ],
       "description": "Dashdot is a modern server dashboard, running on the latest tech, designed with glassmorphism in mind. It is intended to be used for smaller VPS and private servers.",
       "description": "Dashdot is a modern server dashboard, running on the latest tech, designed with glassmorphism in mind. It is intended to be used for smaller VPS and private servers.",
-      "logo": "https://getdashdot.com/img/logo512.png",
+      "logo": "https://raw.githubusercontent.com/lllllllillllllillll/DweebUI-Icons/main/dashdot.png",
       "name": "dashdot",
       "name": "dashdot",
       "platform": "linux",
       "platform": "linux",
-      "repository": {
-        "stackfile": "Template/Stack/dashdot.yml",
-        "url": "https://github.com/xneo1/portainer_templates"
-      },
+      "image": "mauricenino/dashdot",
       "title": "Dashdot",
       "title": "Dashdot",
-      "type": 3
+      "type": 3,
+      "ports": [
+        "80:3001/tcp"
+      ],
+      "volumes": [
+        {
+          "bind": "/",
+          "container": "/mnt/host:ro"
+        }
+      ],
+      "privileged": true
     },
     },
     {
     {
       "categories": [
       "categories": [

+ 2 - 2
views/partials/navbar.ejs

@@ -59,7 +59,7 @@
     <div class="navbar-nav flex-row order-md-last">
     <div class="navbar-nav flex-row order-md-last">
       <div class="nav-item d-none d-md-flex me-3">
       <div class="nav-item d-none d-md-flex me-3">
         <div class="btn-list">
         <div class="btn-list">
-          <a href="#" class="btn text-green">
+          <a href="#" class="btn text-white">
             <!-- Download SVG icon from http://tabler-icons.io/i/lock -->
             <!-- Download SVG icon from http://tabler-icons.io/i/lock -->
             <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-lock" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z"></path> <path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path> <path d="M8 11v-4a4 4 0 1 1 8 0v4"></path> </svg>
             <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-lock" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6z"></path> <path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path> <path d="M8 11v-4a4 4 0 1 1 8 0v4"></path> </svg>
             VPN
             VPN
@@ -69,7 +69,7 @@
             <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-shield" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3"></path> </svg>
             <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-shield" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3"></path> </svg>
             Firewall
             Firewall
           </a>
           </a>
-          <a href="#" class="btn text-green">
+          <a href="#" class="btn text-white">
             <!-- Download SVG icon from http://tabler-icons.io/i/shield -->
             <!-- Download SVG icon from http://tabler-icons.io/i/shield -->
             <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-screen-share" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M21 12v3a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1v-10a1 1 0 0 1 1 -1h9"></path> <path d="M7 20l10 0"></path> <path d="M9 16l0 4"></path> <path d="M15 16l0 4"></path> <path d="M17 4h4v4"></path> <path d="M16 9l5 -5"></path> </svg>
             <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-screen-share" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M21 12v3a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1v-10a1 1 0 0 1 1 -1h9"></path> <path d="M7 20l10 0"></path> <path d="M9 16l0 4"></path> <path d="M15 16l0 4"></path> <path d="M17 4h4v4"></path> <path d="M16 9l5 -5"></path> </svg>
             VNC
             VNC