mirror of
				https://github.com/community-scripts/ProxmoxVE.git
				synced 2025-11-04 10:22:50 +00:00 
			
		
		
		
	Compare commits
	
		
			36 Commits
		
	
	
		
			tailwind-4
			...
			2025-10-08
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					32230b4b0e | ||
| 
						 | 
					10673493c0 | ||
| 
						 | 
					dccf2f78e2 | ||
| 
						 | 
					77188d25c9 | ||
| 
						 | 
					de47dfe287 | ||
| 
						 | 
					5716eb3086 | ||
| 
						 | 
					05c7b84a2f | ||
| 
						 | 
					2681528ec6 | ||
| 
						 | 
					3be6e206b5 | ||
| 
						 | 
					264ff2b602 | ||
| 
						 | 
					ab38031a32 | ||
| 
						 | 
					5b23ef6bb0 | ||
| 
						 | 
					659ea81740 | ||
| 
						 | 
					a127124080 | ||
| 
						 | 
					cce58c281d | ||
| 
						 | 
					888dbd6061 | ||
| 
						 | 
					bfcda5d07a | ||
| 
						 | 
					2e4ea927ea | ||
| 
						 | 
					78a66c3612 | ||
| 
						 | 
					86e67fc5cf | ||
| 
						 | 
					c75be209e2 | ||
| 
						 | 
					ad1650ddc2 | ||
| 
						 | 
					637e66d79d | ||
| 
						 | 
					a2774ea013 | ||
| 
						 | 
					6027811e4a | ||
| 
						 | 
					2e42b6d752 | ||
| 
						 | 
					71a40f17ea | ||
| 
						 | 
					f2b98890d6 | ||
| 
						 | 
					b9d4fa6bb4 | ||
| 
						 | 
					beeed04666 | ||
| 
						 | 
					f618e207c1 | ||
| 
						 | 
					7670c7402c | ||
| 
						 | 
					ecef9a346e | ||
| 
						 | 
					dcb3bfe763 | ||
| 
						 | 
					1bd231752e | ||
| 
						 | 
					abc95db08a | 
							
								
								
									
										42
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -10,6 +10,42 @@
 | 
			
		||||
> [!CAUTION]
 | 
			
		||||
Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit the project's popularity for potentially malicious purposes.
 | 
			
		||||
 | 
			
		||||
## 2025-10-09
 | 
			
		||||
 | 
			
		||||
## 2025-10-08
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - MyIP: Increase resources [@tremor021](https://github.com/tremor021) ([#8199](https://github.com/community-scripts/ProxmoxVE/pull/8199))
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Wireguard: Fix sysctl for Trixie [@tremor021](https://github.com/tremor021) ([#8209](https://github.com/community-scripts/ProxmoxVE/pull/8209))
 | 
			
		||||
    - Update prompt for Stirling-PDF login option [@EarMaster](https://github.com/EarMaster) ([#8196](https://github.com/community-scripts/ProxmoxVE/pull/8196))
 | 
			
		||||
 | 
			
		||||
  - #### 🔧 Refactor
 | 
			
		||||
 | 
			
		||||
    - Refactor: Fixed incorrect tag variables in several scripts [@tremor021](https://github.com/tremor021) ([#8182](https://github.com/community-scripts/ProxmoxVE/pull/8182))
 | 
			
		||||
    - ZeroTier One: Fix install output [@tremor021](https://github.com/tremor021) ([#8179](https://github.com/community-scripts/ProxmoxVE/pull/8179))
 | 
			
		||||
 | 
			
		||||
## 2025-10-07
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 | 
			
		||||
  - #### 🐞 Bug Fixes
 | 
			
		||||
 | 
			
		||||
    - Alpine-Caddy: remove functions [@MickLesk](https://github.com/MickLesk) ([#8177](https://github.com/community-scripts/ProxmoxVE/pull/8177))
 | 
			
		||||
    - Palmr: Fix NodeJS setup [@tremor021](https://github.com/tremor021) ([#8173](https://github.com/community-scripts/ProxmoxVE/pull/8173))
 | 
			
		||||
    - GLPI: Fix UNBOUND variable [@tremor021](https://github.com/tremor021) ([#8167](https://github.com/community-scripts/ProxmoxVE/pull/8167))
 | 
			
		||||
    - BookLore: upgrade to Java 25/Gradle 9 [@vhsdream](https://github.com/vhsdream) ([#8165](https://github.com/community-scripts/ProxmoxVE/pull/8165))
 | 
			
		||||
    - Alpine-Wireguard: Fix for update failing in normal mode [@tremor021](https://github.com/tremor021) ([#8160](https://github.com/community-scripts/ProxmoxVE/pull/8160))
 | 
			
		||||
 | 
			
		||||
  - #### ✨ New Features
 | 
			
		||||
 | 
			
		||||
    - Bump W-V Scripts to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#8176](https://github.com/community-scripts/ProxmoxVE/pull/8176))
 | 
			
		||||
    - Bump Z-Y Scripts to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#8174](https://github.com/community-scripts/ProxmoxVE/pull/8174))
 | 
			
		||||
    - Docmost: Fixes and updates [@tremor021](https://github.com/tremor021) ([#8158](https://github.com/community-scripts/ProxmoxVE/pull/8158))
 | 
			
		||||
 | 
			
		||||
## 2025-10-06
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
@@ -25,6 +61,12 @@ Exercise vigilance regarding copycat or coat-tailing sites that seek to exploit
 | 
			
		||||
    - Navidrome: bump to Debian 13 [@MickLesk](https://github.com/MickLesk) ([#8139](https://github.com/community-scripts/ProxmoxVE/pull/8139))
 | 
			
		||||
    - pve-scripts-local: add update function [@MickLesk](https://github.com/MickLesk) ([#8138](https://github.com/community-scripts/ProxmoxVE/pull/8138))
 | 
			
		||||
 | 
			
		||||
### 🌐 Website
 | 
			
		||||
 | 
			
		||||
  - #### 📝 Script Information
 | 
			
		||||
 | 
			
		||||
    - Update config_path for Zigbee2MQTT configuration [@MickLesk](https://github.com/MickLesk) ([#8153](https://github.com/community-scripts/ProxmoxVE/pull/8153))
 | 
			
		||||
 | 
			
		||||
## 2025-10-05
 | 
			
		||||
 | 
			
		||||
### 🚀 Updated Scripts
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,6 @@ catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /etc/caddy ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@ function update_script() {
 | 
			
		||||
  if [[ -d /etc/wgdashboard/src ]]; then
 | 
			
		||||
    msg_info "update WGDashboard"
 | 
			
		||||
    cd /etc/wgdashboard/src
 | 
			
		||||
    $STD echo "y" | ./wgd.sh update
 | 
			
		||||
    echo "y" | ./wgd.sh update >/dev/null 2>&1
 | 
			
		||||
    $STD ./wgd.sh start
 | 
			
		||||
    msg_ok "WGDashboard updated"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Source: https://www.authelia.com/
 | 
			
		||||
 | 
			
		||||
APP="Authelia"
 | 
			
		||||
TAGS=""
 | 
			
		||||
var_tags="${var_tags:-authenticator}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
@@ -25,7 +25,7 @@ function update_script() {
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d "/etc/authelia/" ]]; then
 | 
			
		||||
  if [[ ! -d /etc/authelia/ ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,8 @@ function update_script() {
 | 
			
		||||
    $STD npm run build --configuration=production
 | 
			
		||||
    msg_ok "Built Frontend"
 | 
			
		||||
 | 
			
		||||
    JAVA_VERSION="25" setup_java
 | 
			
		||||
 | 
			
		||||
    msg_info "Building Backend"
 | 
			
		||||
    cd /opt/booklore/booklore-api
 | 
			
		||||
    APP_VERSION=$(curl -fsSL https://api.github.com/repos/booklore-app/BookLore/releases/latest | yq '.tag_name' | sed 's/^v//')
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-3}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-8}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Source: https://github.com/excalidraw/excalidraw
 | 
			
		||||
 | 
			
		||||
APP="Excalidraw"
 | 
			
		||||
TAGS="diagrams"
 | 
			
		||||
var_tags="${var_tags:-diagrams}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-3072}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Source: https://graylog.org/
 | 
			
		||||
 | 
			
		||||
APP="Graylog"
 | 
			
		||||
TAGS="logging"
 | 
			
		||||
var_tags="${var_tags:-logging}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-8192}"
 | 
			
		||||
var_disk="${var_disk:-30}"
 | 
			
		||||
@@ -54,4 +54,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9000${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Source: https://github.com/heiher/hev-socks5-server
 | 
			
		||||
 | 
			
		||||
APP="hev-socks5-server"
 | 
			
		||||
TAGS="proxy,socks5"
 | 
			
		||||
var_tags="${var_tags:-proxy;socks5}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
@@ -61,4 +61,4 @@ msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it with a SOCKS5 client using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}${IP}:1080${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} and the credentials stored at /root/hev.creds${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} and the credentials stored at /root/hev.creds${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Source: https://github.com/Kometa-Team/Kometa
 | 
			
		||||
 | 
			
		||||
APP="Kometa"
 | 
			
		||||
TAGS="media;streaming"
 | 
			
		||||
var_tags="${var_tags:-media;streaming}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_disk="${var_disk:-8}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								ct/myip.sh
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								ct/myip.sh
									
									
									
									
									
								
							@@ -7,8 +7,8 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
 | 
			
		||||
APP="MyIP"
 | 
			
		||||
var_tags="${var_tags:-network}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
@@ -20,29 +20,29 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/myip ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if check_for_gh_release "myip" "jason5ng32/MyIP"; then
 | 
			
		||||
        msg_info "Stopping Services"
 | 
			
		||||
        systemctl stop myip
 | 
			
		||||
        msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
        cp /opt/myip/.env /opt
 | 
			
		||||
        CLEAN_INSTALL=1 fetch_and_deploy_gh_release "myip" "jason5ng32/MyIP" "tarball"
 | 
			
		||||
        mv /opt/.env /opt/myip
 | 
			
		||||
 | 
			
		||||
        msg_info "Starting Services"
 | 
			
		||||
        systemctl start myip
 | 
			
		||||
        msg_ok "Started Services"
 | 
			
		||||
        msg_ok "Updated Successfully"
 | 
			
		||||
    fi
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/myip ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "myip" "jason5ng32/MyIP"; then
 | 
			
		||||
    msg_info "Stopping Services"
 | 
			
		||||
    systemctl stop myip
 | 
			
		||||
    msg_ok "Stopped Services"
 | 
			
		||||
 | 
			
		||||
    cp /opt/myip/.env /opt
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "myip" "jason5ng32/MyIP" "tarball"
 | 
			
		||||
    mv /opt/.env /opt/myip
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start myip
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Source: https://github.com/rustdesk/rustdesk-server
 | 
			
		||||
 | 
			
		||||
APP="RustDesk Server"
 | 
			
		||||
TAGS="remote-desktop"
 | 
			
		||||
var_tags="${var_tags:-remote-desktop}"
 | 
			
		||||
var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-4}"
 | 
			
		||||
var_ram="${var_ram:-6144}"
 | 
			
		||||
var_disk="${var_disk:-20}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -42,14 +42,14 @@ function update_script() {
 | 
			
		||||
    3>&1 1>&2 2>&3)
 | 
			
		||||
 | 
			
		||||
  if [ "$UPD" == "1" ]; then
 | 
			
		||||
    msg_info "Stopping Vaultwarden"
 | 
			
		||||
    systemctl stop vaultwarden.service
 | 
			
		||||
    msg_ok "Stopped Vaultwarden"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop vaultwarden
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating VaultWarden to $VAULT (Patience)"
 | 
			
		||||
    cd ~ && rm -rf vaultwarden
 | 
			
		||||
    $STD git clone https://github.com/dani-garcia/vaultwarden
 | 
			
		||||
    cd vaultwarden
 | 
			
		||||
    cd vaultwarden || exit
 | 
			
		||||
    $STD cargo build --features "sqlite,mysql,postgresql" --release
 | 
			
		||||
    DIR=/usr/bin/vaultwarden
 | 
			
		||||
    if [ -d "$DIR" ]; then
 | 
			
		||||
@@ -63,17 +63,17 @@ function update_script() {
 | 
			
		||||
    cd ~ && rm -rf vaultwarden
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Vaultwarden"
 | 
			
		||||
    systemctl start vaultwarden.service
 | 
			
		||||
    msg_ok "Started Vaultwarden"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start vaultwarden
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_ok "$VAULT Update Successful"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if [ "$UPD" == "2" ]; then
 | 
			
		||||
    msg_info "Stopping Vaultwarden"
 | 
			
		||||
    systemctl stop vaultwarden.service
 | 
			
		||||
    msg_ok "Stopped Vaultwarden"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop vaultwarden
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating Web-Vault to $WVRELEASE"
 | 
			
		||||
    $STD curl -fsSLO https://github.com/dani-garcia/bw_web_builds/releases/download/"$WVRELEASE"/bw_web_"$WVRELEASE".tar.gz
 | 
			
		||||
@@ -84,9 +84,9 @@ function update_script() {
 | 
			
		||||
    rm bw_web_"$WVRELEASE".tar.gz
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Vaultwarden"
 | 
			
		||||
    systemctl start vaultwarden.service
 | 
			
		||||
    msg_ok "Started Vaultwarden"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start vaultwarden
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "$WVRELEASE Update Successful"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-16}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -29,10 +29,10 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "victoriametrics" "VictoriaMetrics/VictoriaMetrics"; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop victoriametrics
 | 
			
		||||
    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl stop victoriametrics-logs
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    victoriametrics_filename=$(curl -fsSL "https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest" |
 | 
			
		||||
      jq -r '.assets[].name' |
 | 
			
		||||
@@ -50,11 +50,11 @@ function update_script() {
 | 
			
		||||
    fi
 | 
			
		||||
    chmod +x /opt/victoriametrics/*
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start victoriametrics
 | 
			
		||||
    [[ -f /etc/systemd/system/victoriametrics-logs.service ]] && systemctl start victoriametrics-logs
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -29,25 +29,25 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://dl.vikunja.io/vikunja/ | grep -oP 'href="/vikunja/\K[0-9]+\.[0-9]+\.[0-9]+' | sort -V | tail -n 1)
 | 
			
		||||
  if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop vikunja
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP} to ${RELEASE}"
 | 
			
		||||
    cd /opt
 | 
			
		||||
    cd /opt || exit
 | 
			
		||||
    rm -rf /opt/vikunja/vikunja
 | 
			
		||||
    curl -fsSL "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb" -o $(basename "https://dl.vikunja.io/vikunja/$RELEASE/vikunja-$RELEASE-amd64.deb")
 | 
			
		||||
    export DEBIAN_FRONTEND=noninteractive
 | 
			
		||||
    $STD dpkg -i vikunja-$RELEASE-amd64.deb
 | 
			
		||||
    $STD dpkg -i vikunja-"$RELEASE"-amd64.deb
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start vikunja
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /opt/vikunja-$RELEASE-amd64.deb
 | 
			
		||||
    rm -rf /opt/vikunja-"$RELEASE"-amd64.deb
 | 
			
		||||
    msg_ok "Cleaned"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								ct/wallos.sh
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								ct/wallos.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -35,10 +35,9 @@ function update_script() {
 | 
			
		||||
    mv /opt/wallos/images/uploads/logos /opt/logos/
 | 
			
		||||
    msg_ok "Backup created"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/wallos
 | 
			
		||||
    fetch_and_deploy_gh_release "wallos" "ellite/Wallos" "tarball"
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wallos" "ellite/Wallos" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Configuring ${APP}"
 | 
			
		||||
    msg_info "Configuring Wallos"
 | 
			
		||||
    rm -rf /opt/wallos/db/wallos.empty.db
 | 
			
		||||
    mv /opt/wallos.db /opt/wallos/db/wallos.db
 | 
			
		||||
    mv /opt/logos/* /opt/wallos/images/uploads/logos
 | 
			
		||||
@@ -49,12 +48,12 @@ function update_script() {
 | 
			
		||||
    chmod -R 755 /opt/wallos
 | 
			
		||||
    mkdir -p /var/log/cron
 | 
			
		||||
    $STD curl http://localhost/endpoints/db/migrate.php
 | 
			
		||||
    msg_ok "Configured ${APP}"
 | 
			
		||||
    msg_ok "Configured Wallos"
 | 
			
		||||
 | 
			
		||||
    msg_info "Reload Apache2"
 | 
			
		||||
    systemctl reload apache2
 | 
			
		||||
    msg_ok "Apache2 Reloaded"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -28,8 +28,8 @@ function update_script() {
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! [[ $(dpkg -s zstd 2>/dev/null) ]]; then
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y zstd
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt install -y zstd
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/matze/wastebin/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
 | 
			
		||||
  # Dirty-Fix 03/2025 for missing APP_version.txt on old installations, set to pre-latest release
 | 
			
		||||
@@ -69,7 +69,7 @@ EOF
 | 
			
		||||
    msg_info "Updating Wastebin"
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/matze/wastebin/releases/download/${RELEASE}/wastebin_${RELEASE}_x86_64-unknown-linux-musl.tar.zst" -o "$temp_file"
 | 
			
		||||
    tar -xf $temp_file
 | 
			
		||||
    tar -xf "$temp_file"
 | 
			
		||||
    cp -f wastebin* /opt/wastebin/
 | 
			
		||||
    chmod +x /opt/wastebin/wastebin
 | 
			
		||||
    chmod +x /opt/wastebin/wastebin-ctl
 | 
			
		||||
@@ -81,7 +81,7 @@ EOF
 | 
			
		||||
    msg_ok "Started Wastebin"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -f $temp_file
 | 
			
		||||
    rm -f "$temp_file"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  else
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -29,29 +29,29 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "watcharr" "sbondCo/Watcharr"; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop watcharr
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    rm -f /opt/watcharr/server/watcharr
 | 
			
		||||
    rm -rf /opt/watcharr/server/ui
 | 
			
		||||
    fetch_and_deploy_gh_release "watcharr" "sbondCo/Watcharr" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
    cd /opt/watcharr
 | 
			
		||||
    msg_info "Updating Watcharr"
 | 
			
		||||
    cd /opt/watcharr || exit
 | 
			
		||||
    export GOOS=linux
 | 
			
		||||
    $STD npm i
 | 
			
		||||
    $STD npm run build
 | 
			
		||||
    mv ./build ./server/ui
 | 
			
		||||
    cd server
 | 
			
		||||
    cd server || exit
 | 
			
		||||
    $STD go mod download
 | 
			
		||||
    $STD go build -o ./watcharr
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
    msg_ok "Updated Watcharr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start watcharr
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Update Successfully"
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Update Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -30,7 +30,7 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "watchyourlan" "aceberg/WatchYourLAN"; then
 | 
			
		||||
    msg_info "Stopping service"
 | 
			
		||||
    systemctl stop watchyourlan.service
 | 
			
		||||
    systemctl stop watchyourlan
 | 
			
		||||
    msg_ok "Service stopped"
 | 
			
		||||
 | 
			
		||||
    cp -R /data/config.yaml ~/config.yaml
 | 
			
		||||
@@ -45,7 +45,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Starting service"
 | 
			
		||||
    systemctl enable -q --now watchyourlan
 | 
			
		||||
    msg_ok "Service started"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-2}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -45,7 +45,7 @@ function update_script() {
 | 
			
		||||
    rm -rf /opt/wavelog
 | 
			
		||||
    fetch_and_deploy_gh_release "wavelog" "wavelog/wavelog" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    msg_info "Updating Wavelog"
 | 
			
		||||
    rm -rf /opt/wavelog/install
 | 
			
		||||
    mv /opt/config.php /opt/wavelog/application/config/config.php
 | 
			
		||||
    mv /opt/database.php /opt/wavelog/application/config/database.php
 | 
			
		||||
@@ -57,12 +57,12 @@ function update_script() {
 | 
			
		||||
    chown -R www-data:www-data /opt/wavelog/
 | 
			
		||||
    find /opt/wavelog/ -type d -exec chmod 755 {} \;
 | 
			
		||||
    find /opt/wavelog/ -type f -exec chmod 664 {} \;
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
    msg_ok "Updated Wavelog"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Services"
 | 
			
		||||
    systemctl start apache2
 | 
			
		||||
    msg_ok "Started Services"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,12 +6,12 @@ source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxV
 | 
			
		||||
# Source: https://github.com/Lissy93/web-check
 | 
			
		||||
 | 
			
		||||
APP="web-check"
 | 
			
		||||
TAGS="network;analysis"
 | 
			
		||||
var_tags="${var_tags:-network;analysis}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-12}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -20,15 +20,15 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/web-check ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_error "Currently we don't provide an update function for this ${APP}."
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/web-check ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_error "Currently we don't provide an update function for this App."
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -38,4 +38,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								ct/wger.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ct/wger.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-6}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -29,20 +29,20 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
  RELEASE=$(curl -fsSL https://api.github.com/repos/wger-project/wger/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
 | 
			
		||||
  if [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]] || [[ ! -f /opt/${APP}_version.txt ]]; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop wger
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP to v${RELEASE}"
 | 
			
		||||
    temp_file=$(mktemp)
 | 
			
		||||
    curl -fsSL "https://github.com/wger-project/wger/archive/refs/tags/$RELEASE.tar.gz" -o "$temp_file"
 | 
			
		||||
    tar xzf "$temp_file"
 | 
			
		||||
    cp -rf wger-"$RELEASE"/* /home/wger/src
 | 
			
		||||
    cd /home/wger/src
 | 
			
		||||
    python3 manage.py migrate &>/dev/null
 | 
			
		||||
    yarn install &>/dev/null
 | 
			
		||||
    yarn build:css:sass &>/dev/null
 | 
			
		||||
    python3 manage.py collectstatic --noinput &>/dev/null
 | 
			
		||||
    cd /home/wger/src || exit
 | 
			
		||||
    $STD python3 manage.py migrate
 | 
			
		||||
    $STD yarn install
 | 
			
		||||
    $STD yarn build:css:sass
 | 
			
		||||
    $STD python3 manage.py collectstatic --noinput
 | 
			
		||||
    echo "${RELEASE}" >/opt/${APP}_version.txt
 | 
			
		||||
    msg_ok "Updated $APP to v${RELEASE}"
 | 
			
		||||
 | 
			
		||||
@@ -53,8 +53,7 @@ function update_script() {
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf "$temp_file"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
 | 
			
		||||
    msg_ok "Update Successful"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  else
 | 
			
		||||
    msg_ok "No update required. ${APP} is already at v${RELEASE}"
 | 
			
		||||
  fi
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -20,18 +20,19 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var/lib/whisparr ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Updating $APP LXC"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated $APP LXC"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /var/lib/whisparr ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Updating Whisparr"
 | 
			
		||||
  $STD apt update
 | 
			
		||||
  $STD apt -y upgrade
 | 
			
		||||
  msg_ok "Updated Whisparr"
 | 
			
		||||
  msg_ok "Updated Successfully!"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -41,4 +42,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6969${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:6969${CL}"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								ct/wikijs.sh
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								ct/wikijs.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-10}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -27,7 +27,9 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="yarn@latest,node-gyp" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="yarn,node-gyp" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "wikijs" "requarks/wiki"; then
 | 
			
		||||
    msg_info "Verifying whether ${APP}' new release is v3.x+ and current install uses SQLite."
 | 
			
		||||
    SQLITE_INSTALL=$([ -f /opt/wikijs/db.sqlite ] && echo "true" || echo "false")
 | 
			
		||||
@@ -37,9 +39,9 @@ function update_script() {
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "There is an update path available for ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping ${APP}"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop wikijs
 | 
			
		||||
    msg_ok "Stopped ${APP}"
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Backing up Data"
 | 
			
		||||
    mkdir /opt/wikijs-backup
 | 
			
		||||
@@ -47,22 +49,21 @@ function update_script() {
 | 
			
		||||
    cp -R /opt/wikijs/{config.yml,/data} /opt/wikijs-backup
 | 
			
		||||
    msg_ok "Backed up Data"
 | 
			
		||||
 | 
			
		||||
    rm -rf /opt/wikijs/*
 | 
			
		||||
    fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
 | 
			
		||||
    CLEAN_INSTALL=1 fetch_and_deploy_gh_release "wikijs" "requarks/wiki" "prebuild" "latest" "/opt/wikijs" "wiki-js.tar.gz"
 | 
			
		||||
 | 
			
		||||
    msg_info "Restoring Data"
 | 
			
		||||
    cp -R /opt/wikijs-backup/* /opt/wikijs
 | 
			
		||||
    $SQLITE_INSTALL && $STD npm rebuild sqlite3
 | 
			
		||||
    msg_ok "Restored Data"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting ${APP}"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start wikijs
 | 
			
		||||
    msg_ok "Started ${APP}"
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf /opt/wikijs-backup
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
var_tun="${var_tun:-1}"
 | 
			
		||||
 | 
			
		||||
@@ -30,18 +30,19 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
  if ! dpkg -s git >/dev/null 2>&1; then
 | 
			
		||||
    msg_info "Installing git"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-get install -y git
 | 
			
		||||
    $STD apt update
 | 
			
		||||
    $STD apt install -y git
 | 
			
		||||
    msg_ok "Installed git"
 | 
			
		||||
  fi
 | 
			
		||||
  apt-get update
 | 
			
		||||
  apt-get -y upgrade
 | 
			
		||||
  apt update
 | 
			
		||||
  apt -y upgrade
 | 
			
		||||
  if [[ -d /etc/wgdashboard ]]; then
 | 
			
		||||
    sleep 2
 | 
			
		||||
    cd /etc/wgdashboard/src
 | 
			
		||||
    cd /etc/wgdashboard/src || exit
 | 
			
		||||
    ./wgd.sh update
 | 
			
		||||
    ./wgd.sh start
 | 
			
		||||
  fi
 | 
			
		||||
  msg_ok "Updated Successfully!"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								ct/wizarr.sh
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								ct/wizarr.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -32,9 +32,9 @@ function update_script() {
 | 
			
		||||
  setup_uv
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "wizarr" "wizarrrr/wizarr"; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop wizarr
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Creating Backup"
 | 
			
		||||
    BACKUP_FILE="/opt/wizarr_backup_$(date +%F).tar.gz"
 | 
			
		||||
@@ -44,8 +44,8 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
    fetch_and_deploy_gh_release "wizarr" "wizarrrr/wizarr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating $APP"
 | 
			
		||||
    cd /opt/wizarr
 | 
			
		||||
    msg_info "Updating Wizarr"
 | 
			
		||||
    cd /opt/wizarr || exit
 | 
			
		||||
    $STD /usr/local/bin/uv sync --frozen
 | 
			
		||||
    $STD /usr/local/bin/uv run --frozen pybabel compile -d app/translations
 | 
			
		||||
    $STD npm --prefix app/static install
 | 
			
		||||
@@ -56,16 +56,16 @@ function update_script() {
 | 
			
		||||
    if ! grep -q 'frozen' /opt/wizarr/start.sh; then
 | 
			
		||||
      sed -i 's/run/& --frozen/' /opt/wizarr/start.sh
 | 
			
		||||
    fi
 | 
			
		||||
    msg_ok "Updated $APP"
 | 
			
		||||
    msg_ok "Updated Wizarr"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start wizarr
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Cleaning Up"
 | 
			
		||||
    rm -rf "$BACKUP_FILE"
 | 
			
		||||
    msg_ok "Cleanup Completed"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
    msg_ok "Updated Successfully!"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ var_disk="${var_disk:-5}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
variables
 | 
			
		||||
@@ -20,15 +20,15 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /var/www/html/wordpress ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_error "Wordpress should be updated via the user interface."
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /var/www/html/wordpress ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_error "Wordpress should be updated via the user interface."
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -38,4 +38,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN} ${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}/${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -29,9 +29,9 @@ function update_script() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "yt-dlp-webui" "marcopiovanello/yt-dlp-web-ui"; then
 | 
			
		||||
    msg_info "Stopping $APP"
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop yt-dlp-webui
 | 
			
		||||
    msg_ok "Stopped $APP"
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating yt-dlp"
 | 
			
		||||
    $STD yt-dlp -U
 | 
			
		||||
@@ -40,9 +40,9 @@ function update_script() {
 | 
			
		||||
    rm -rf /usr/local/bin/yt-dlp-webui
 | 
			
		||||
    fetch_and_deploy_gh_release "yt-dlp-webui" "marcopiovanello/yt-dlp-web-ui" "singlefile" "latest" "/usr/local/bin" "yt-dlp-webui_linux-amd64"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting $APP"
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start yt-dlp-webui
 | 
			
		||||
    msg_ok "Started $APP"
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
    msg_ok "Updated Successfully"
 | 
			
		||||
  fi
 | 
			
		||||
  exit
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								ct/zammad.sh
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								ct/zammad.sh
									
									
									
									
									
								
							@@ -11,7 +11,7 @@ var_disk="${var_disk:-8}"
 | 
			
		||||
var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-4096}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -20,25 +20,29 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
    if [[ ! -d /opt/zammad ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    $STD systemctl stop zammad
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    $STD apt-mark hold zammad
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    $STD apt-mark unhold zammad
 | 
			
		||||
    $STD apt-get -y upgrade
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    $STD systemctl start zammad
 | 
			
		||||
    msg_ok "Updated ${APP} LXC"
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
  if [[ ! -d /opt/zammad ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  msg_info "Stopping Service"
 | 
			
		||||
  systemctl stop zammad
 | 
			
		||||
  msg_ok "Stopped Service"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  $STD apt update
 | 
			
		||||
  $STD apt-mark hold zammad
 | 
			
		||||
  $STD apt -y upgrade
 | 
			
		||||
  $STD apt-mark unhold zammad
 | 
			
		||||
  $STD apt -y upgrade
 | 
			
		||||
  msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Service"
 | 
			
		||||
  systemctl start zammad
 | 
			
		||||
  msg_ok "Updated ${APP} LXC"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -48,4 +52,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following URL:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}http://${IP}${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-512}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -20,26 +20,28 @@ color
 | 
			
		||||
catch_errors
 | 
			
		||||
 | 
			
		||||
function update_script() {
 | 
			
		||||
    header_info
 | 
			
		||||
    check_container_storage
 | 
			
		||||
    check_container_resources
 | 
			
		||||
  header_info
 | 
			
		||||
  check_container_storage
 | 
			
		||||
  check_container_resources
 | 
			
		||||
 | 
			
		||||
    if [[ ! -f /usr/sbin/zerotier-one ]]; then
 | 
			
		||||
        msg_error "No ${APP} Installation Found!"
 | 
			
		||||
        exit
 | 
			
		||||
    fi
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop zerotier-one
 | 
			
		||||
    msg_ok "Stopping Service"
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    $STD apt-get update
 | 
			
		||||
    apt-get -y upgrade
 | 
			
		||||
    msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
    msg_info "Starting Service"
 | 
			
		||||
    systemctl start zerotier-one
 | 
			
		||||
    msg_ok "Started Service"
 | 
			
		||||
  if [[ ! -f /usr/sbin/zerotier-one ]]; then
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  msg_info "Stopping Service"
 | 
			
		||||
  systemctl stop zerotier-one
 | 
			
		||||
  msg_ok "Stopping Service"
 | 
			
		||||
 | 
			
		||||
  msg_info "Updating ${APP}"
 | 
			
		||||
  $STD apt update
 | 
			
		||||
  $STD apt -y upgrade
 | 
			
		||||
  msg_ok "Updated ${APP}"
 | 
			
		||||
 | 
			
		||||
  msg_info "Starting Service"
 | 
			
		||||
  systemctl start zerotier-one
 | 
			
		||||
  msg_ok "Started Service"
 | 
			
		||||
  exit
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start
 | 
			
		||||
@@ -49,4 +51,4 @@ description
 | 
			
		||||
msg_ok "Completed Successfully!\n"
 | 
			
		||||
echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}"
 | 
			
		||||
echo -e "${INFO}${YW} Access it using the following IP:${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:3443${CL}"
 | 
			
		||||
echo -e "${TAB}${GATEWAY}${BGN}https://${IP}:3443${CL}"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-0}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -30,7 +30,6 @@ function update_script() {
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "Zigbee2MQTT" "Koenkk/zigbee2mqtt"; then
 | 
			
		||||
    NODE_VERSION=24 NODE_MODULE="pnpm@$(curl -fsSL https://raw.githubusercontent.com/Koenkk/zigbee2mqtt/master/package.json | jq -r '.packageManager | split("@")[1]')" setup_nodejs
 | 
			
		||||
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
    systemctl stop zigbee2mqtt
 | 
			
		||||
    msg_ok "Stopped Service"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
@@ -26,12 +26,8 @@ function update_script() {
 | 
			
		||||
    msg_error "No ${APP} Installation Found!"
 | 
			
		||||
    exit
 | 
			
		||||
  fi
 | 
			
		||||
  if ! command -v pnpm &>/dev/null; then
 | 
			
		||||
    msg_info "Installing pnpm"
 | 
			
		||||
    #export NODE_OPTIONS=--openssl-legacy-provider
 | 
			
		||||
    $STD npm install -g pnpm@latest
 | 
			
		||||
    msg_ok "Installed pnpm"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  NODE_VERSION="22" NODE_MODULE="pnpm" setup_nodejs
 | 
			
		||||
 | 
			
		||||
  if check_for_gh_release "zipline" "diced/zipline"; then
 | 
			
		||||
    msg_info "Stopping Service"
 | 
			
		||||
@@ -47,7 +43,7 @@ function update_script() {
 | 
			
		||||
    fetch_and_deploy_gh_release "zipline" "diced/zipline" "tarball"
 | 
			
		||||
 | 
			
		||||
    msg_info "Updating ${APP}"
 | 
			
		||||
    cd /opt/zipline
 | 
			
		||||
    cd /opt/zipline || exit
 | 
			
		||||
    mv /opt/.env /opt/zipline/.env
 | 
			
		||||
    $STD pnpm install
 | 
			
		||||
    $STD pnpm build
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-8}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-6}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-1}"
 | 
			
		||||
var_ram="${var_ram:-2048}"
 | 
			
		||||
var_disk="${var_disk:-5}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-1}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ var_cpu="${var_cpu:-2}"
 | 
			
		||||
var_ram="${var_ram:-1024}"
 | 
			
		||||
var_disk="${var_disk:-4}"
 | 
			
		||||
var_os="${var_os:-debian}"
 | 
			
		||||
var_version="${var_version:-12}"
 | 
			
		||||
var_version="${var_version:-13}"
 | 
			
		||||
var_unprivileged="${var_unprivileged:-0}"
 | 
			
		||||
 | 
			
		||||
header_info "$APP"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2043
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2043
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										9
									
								
								frontend/package.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										9
									
								
								frontend/package.json
									
									
									
										generated
									
									
									
								
							@@ -65,7 +65,6 @@
 | 
			
		||||
    "@antfu/eslint-config": "^4.16.1",
 | 
			
		||||
    "@eslint-react/eslint-plugin": "^1.52.2",
 | 
			
		||||
    "@next/eslint-plugin-next": "^15.3.4",
 | 
			
		||||
    "@tailwindcss/postcss": "^4.1.14",
 | 
			
		||||
    "@tanstack/eslint-plugin-query": "^5.68.0",
 | 
			
		||||
    "@types/node": "^22.13.16",
 | 
			
		||||
    "@types/react": "npm:types-react@19.0.0-rc.1",
 | 
			
		||||
@@ -78,13 +77,15 @@
 | 
			
		||||
    "eslint-plugin-format": "^1.0.1",
 | 
			
		||||
    "eslint-plugin-react-hooks": "^5.2.0",
 | 
			
		||||
    "eslint-plugin-react-refresh": "^0.4.20",
 | 
			
		||||
    "jsdom": "^25.0.1",
 | 
			
		||||
    "postcss": "^8.5.3",
 | 
			
		||||
    "prettier": "^3.5.3",
 | 
			
		||||
    "prettier-plugin-tailwindcss": "^0.6.14",
 | 
			
		||||
    "tailwindcss": "^4.1.14",
 | 
			
		||||
    "prettier-plugin-tailwindcss": "^0.6.11",
 | 
			
		||||
    "tailwindcss": "^3.4.17",
 | 
			
		||||
    "tailwindcss-animate": "^1.0.7",
 | 
			
		||||
    "tailwindcss-animated": "^1.1.2",
 | 
			
		||||
    "typescript": "^5.8.2"
 | 
			
		||||
    "typescript": "^5.8.2",
 | 
			
		||||
    "vite-tsconfig-paths": "^5.1.4"
 | 
			
		||||
  },
 | 
			
		||||
  "overrides": {
 | 
			
		||||
    "@types/react": "npm:types-react@19.0.0-rc.1",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/** @type {import('postcss-load-config').Config} */
 | 
			
		||||
const config = {
 | 
			
		||||
  plugins: {
 | 
			
		||||
    '@tailwindcss/postcss': {},
 | 
			
		||||
    tailwindcss: {},
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -19,8 +19,8 @@
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/myip.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "cpu": 2,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Outline",
 | 
			
		||||
    "slug": "outline-solid",
 | 
			
		||||
    "slug": "outline",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        12
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 6144,
 | 
			
		||||
        "hdd": 20,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,44 +1,314 @@
 | 
			
		||||
[
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "7.0.0-beta.3",
 | 
			
		||||
    "date": "2025-10-06T11:25:12Z"
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.17",
 | 
			
		||||
    "date": "2025-10-08T22:19:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inventree/InvenTree",
 | 
			
		||||
    "version": "1.0.4",
 | 
			
		||||
    "date": "2025-10-06T11:12:04Z"
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.4",
 | 
			
		||||
    "date": "2025-09-02T14:26:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ipfs/kubo",
 | 
			
		||||
    "version": "v0.38.1",
 | 
			
		||||
    "date": "2025-10-08T21:34:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BerriAI/litellm",
 | 
			
		||||
    "version": "v1.77.1.rc.5",
 | 
			
		||||
    "date": "2025-10-08T20:54:40Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta26",
 | 
			
		||||
    "date": "2025-10-08T20:12:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.4",
 | 
			
		||||
    "date": "2025-04-05T19:12:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.27.7",
 | 
			
		||||
    "date": "2025-10-08T18:44:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "autobrr/autobrr",
 | 
			
		||||
    "version": "v1.68.0",
 | 
			
		||||
    "date": "2025-10-08T18:33:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v4.21.0",
 | 
			
		||||
    "date": "2025-10-03T22:38:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.67",
 | 
			
		||||
    "date": "2025-09-29T14:45:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v4.0.0",
 | 
			
		||||
    "date": "2025-10-08T16:12:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "advplyr/audiobookshelf",
 | 
			
		||||
    "version": "v2.30.0",
 | 
			
		||||
    "date": "2025-10-08T16:03:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nicolargo/glances",
 | 
			
		||||
    "version": "v4.3.3",
 | 
			
		||||
    "date": "2025-10-08T15:45:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Lidarr/Lidarr",
 | 
			
		||||
    "version": "v2.14.5.4836",
 | 
			
		||||
    "date": "2025-10-08T15:30:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocketbase/pocketbase",
 | 
			
		||||
    "version": "v0.30.2",
 | 
			
		||||
    "date": "2025-10-08T15:30:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wizarrrr/wizarr",
 | 
			
		||||
    "version": "v2025.10.2",
 | 
			
		||||
    "date": "2025-10-06T11:10:37Z"
 | 
			
		||||
    "version": "v2025.10.3",
 | 
			
		||||
    "date": "2025-10-08T15:29:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.4.2",
 | 
			
		||||
    "date": "2025-10-07T08:11:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "prototype-v1.22.2-compaction-task-2",
 | 
			
		||||
    "date": "2025-10-08T13:45:38Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "FlowiseAI/Flowise",
 | 
			
		||||
    "version": "flowise@3.0.8",
 | 
			
		||||
    "date": "2025-10-08T12:19:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus/prometheus",
 | 
			
		||||
    "version": "v0.307.0-rc.0",
 | 
			
		||||
    "date": "2025-10-08T11:25:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.138.4",
 | 
			
		||||
    "date": "2025-10-08T09:11:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.114.4",
 | 
			
		||||
    "date": "2025-10-07T14:28:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.12",
 | 
			
		||||
    "date": "2025-10-08T08:03:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotson/komga",
 | 
			
		||||
    "version": "1.23.5",
 | 
			
		||||
    "date": "2025-10-08T07:31:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "SigNoz/signoz",
 | 
			
		||||
    "version": "v0.97.0-rc.3",
 | 
			
		||||
    "date": "2025-10-08T06:53:48Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3",
 | 
			
		||||
    "date": "2025-09-20T12:12:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "2.3.1",
 | 
			
		||||
    "date": "2025-10-08T05:58:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.24.90",
 | 
			
		||||
    "date": "2025-10-08T05:52:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.0.16",
 | 
			
		||||
    "date": "2025-10-08T04:44:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.20",
 | 
			
		||||
    "date": "2025-10-08T00:27:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.5.1",
 | 
			
		||||
    "date": "2025-10-07T21:57:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "open-webui/open-webui",
 | 
			
		||||
    "version": "v0.6.33",
 | 
			
		||||
    "date": "2025-10-07T21:20:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta18",
 | 
			
		||||
    "date": "2025-10-07T21:05:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "C4illin/ConvertX",
 | 
			
		||||
    "version": "v0.15.1",
 | 
			
		||||
    "date": "2025-10-07T20:30:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "nightly",
 | 
			
		||||
    "date": "2025-10-07T18:00:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.80",
 | 
			
		||||
    "date": "2025-09-30T20:25:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.104.3",
 | 
			
		||||
    "date": "2025-10-07T17:42:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.127.0",
 | 
			
		||||
    "date": "2025-10-07T14:31:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisvel/tududi",
 | 
			
		||||
    "version": "v0.83.2",
 | 
			
		||||
    "date": "2025-10-07T14:30:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.531",
 | 
			
		||||
    "date": "2025-10-07T13:42:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.3.1",
 | 
			
		||||
    "date": "2025-10-07T12:55:04Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v11.4.1",
 | 
			
		||||
    "date": "2025-10-07T12:45:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "thecfu/scraparr",
 | 
			
		||||
    "version": "v2.2.5",
 | 
			
		||||
    "date": "2025-10-07T12:34:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.209.1",
 | 
			
		||||
    "date": "2025-10-07T11:29:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mattermost/mattermost",
 | 
			
		||||
    "version": "mattermost-redux@10.12.0",
 | 
			
		||||
    "date": "2025-09-18T20:15:19Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.13.1",
 | 
			
		||||
    "date": "2025-10-07T06:32:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.9",
 | 
			
		||||
    "date": "2025-10-07T06:07:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rogerfar/rdt-client",
 | 
			
		||||
    "version": "v2.0.117",
 | 
			
		||||
    "date": "2025-10-07T02:21:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inventree/InvenTree",
 | 
			
		||||
    "version": "1.0.5",
 | 
			
		||||
    "date": "2025-10-07T00:37:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sassanix/Warracker",
 | 
			
		||||
    "version": "0.10.1.14",
 | 
			
		||||
    "date": "2025-10-06T23:35:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v1.0.0-1",
 | 
			
		||||
    "date": "2025-10-06T23:16:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Ombi-app/Ombi",
 | 
			
		||||
    "version": "v4.47.1",
 | 
			
		||||
    "date": "2025-01-05T21:14:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.28.0.10274",
 | 
			
		||||
    "date": "2025-10-06T21:31:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Kometa-Team/Kometa",
 | 
			
		||||
    "version": "v2.2.2",
 | 
			
		||||
    "date": "2025-10-06T21:31:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grokability/snipe-it",
 | 
			
		||||
    "version": "v8.3.3",
 | 
			
		||||
    "date": "2025-10-06T19:57:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.26.0",
 | 
			
		||||
    "date": "2025-10-06T17:57:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "seerr-team/seerr",
 | 
			
		||||
    "version": "preview-seerr",
 | 
			
		||||
    "date": "2025-10-06T16:50:29Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "fumadocs-ui@15.8.4",
 | 
			
		||||
    "date": "2025-10-06T15:41:49Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bunkerity/bunkerweb",
 | 
			
		||||
    "version": "v1.6.5",
 | 
			
		||||
    "date": "2025-10-06T15:25:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bastienwirtz/homer",
 | 
			
		||||
    "version": "v25.10.1",
 | 
			
		||||
    "date": "2025-10-06T14:23:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Graylog2/graylog2-server",
 | 
			
		||||
    "version": "7.0.0-beta.3",
 | 
			
		||||
    "date": "2025-10-06T11:25:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jordan-dalby/ByteStash",
 | 
			
		||||
    "version": "v1.5.9",
 | 
			
		||||
    "date": "2025-10-06T08:34:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Jackett/Jackett",
 | 
			
		||||
    "version": "v0.24.82",
 | 
			
		||||
    "date": "2025-10-06T07:56:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "dgtlmoon/changedetection.io",
 | 
			
		||||
    "version": "0.50.15",
 | 
			
		||||
    "date": "2025-10-06T07:15:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "firefly-iii/firefly-iii",
 | 
			
		||||
    "version": "v6.4.0",
 | 
			
		||||
    "date": "2025-09-13T16:38:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "moghtech/komodo",
 | 
			
		||||
    "version": "v1.19.5",
 | 
			
		||||
@@ -54,16 +324,6 @@
 | 
			
		||||
    "version": "2.1.1",
 | 
			
		||||
    "date": "2025-06-14T17:45:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jeedom/core",
 | 
			
		||||
    "version": "4.4.20",
 | 
			
		||||
    "date": "2025-10-06T00:27:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "steveiliop56/tinyauth",
 | 
			
		||||
    "version": "v3.6.2",
 | 
			
		||||
    "date": "2025-07-17T12:08:03Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "9001/copyparty",
 | 
			
		||||
    "version": "v1.19.16",
 | 
			
		||||
@@ -74,71 +334,26 @@
 | 
			
		||||
    "version": "4.5.3",
 | 
			
		||||
    "date": "2025-08-25T13:59:56Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "outline/outline",
 | 
			
		||||
    "version": "v1.0.0-0",
 | 
			
		||||
    "date": "2025-10-05T20:30:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "plankanban/planka",
 | 
			
		||||
    "version": "planka-1.0.5",
 | 
			
		||||
    "date": "2025-10-05T18:54:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "msgbyte/tianji",
 | 
			
		||||
    "version": "v1.27.6",
 | 
			
		||||
    "date": "2025-10-05T17:27:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocket-id/pocket-id",
 | 
			
		||||
    "version": "v1.13.0",
 | 
			
		||||
    "date": "2025-10-05T15:41:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BookStackApp/BookStack",
 | 
			
		||||
    "version": "v25.07.3",
 | 
			
		||||
    "date": "2025-10-05T14:47:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "runtipi/runtipi",
 | 
			
		||||
    "version": "v4.4.0",
 | 
			
		||||
    "date": "2025-09-02T19:26:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Prowlarr/Prowlarr",
 | 
			
		||||
    "version": "v2.0.5.5160",
 | 
			
		||||
    "date": "2025-08-23T21:23:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "chrisvel/tududi",
 | 
			
		||||
    "version": "v0.82-rc5",
 | 
			
		||||
    "date": "2025-09-23T07:31:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TandoorRecipes/recipes",
 | 
			
		||||
    "version": "2.3.0",
 | 
			
		||||
    "date": "2025-10-05T11:13:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Radarr/Radarr",
 | 
			
		||||
    "version": "v5.27.5.10198",
 | 
			
		||||
    "date": "2025-09-03T12:08:43Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Lidarr/Lidarr",
 | 
			
		||||
    "version": "v2.13.3.4711",
 | 
			
		||||
    "date": "2025-08-28T20:06:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "seriousm4x/UpSnap",
 | 
			
		||||
    "version": "5.2.2",
 | 
			
		||||
    "date": "2025-10-05T09:12:17Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "evcc-io/evcc",
 | 
			
		||||
    "version": "0.209.0",
 | 
			
		||||
    "date": "2025-10-05T07:45:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pommee/goaway",
 | 
			
		||||
    "version": "v0.62.11",
 | 
			
		||||
@@ -149,30 +364,15 @@
 | 
			
		||||
    "version": "debian/12.1.27",
 | 
			
		||||
    "date": "2025-10-05T02:16:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "BerriAI/litellm",
 | 
			
		||||
    "version": "v1.77.7-nightly",
 | 
			
		||||
    "date": "2025-10-05T01:43:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "webmin/webmin",
 | 
			
		||||
    "version": "2.520",
 | 
			
		||||
    "date": "2025-10-05T00:51:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Ombi-app/Ombi",
 | 
			
		||||
    "version": "v4.47.1",
 | 
			
		||||
    "date": "2025-01-05T21:14:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ollama/ollama",
 | 
			
		||||
    "version": "v0.12.4-rc5",
 | 
			
		||||
    "date": "2025-10-04T16:18:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "SigNoz/signoz",
 | 
			
		||||
    "version": "v0.97.0-rc.2",
 | 
			
		||||
    "date": "2025-10-04T16:21:45Z"
 | 
			
		||||
    "version": "v0.12.4-rc6",
 | 
			
		||||
    "date": "2025-10-04T18:46:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gtsteffaniak/filebrowser",
 | 
			
		||||
@@ -194,21 +394,11 @@
 | 
			
		||||
    "version": "v25.7.0",
 | 
			
		||||
    "date": "2025-10-04T00:36:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rcourtman/Pulse",
 | 
			
		||||
    "version": "v4.21.0",
 | 
			
		||||
    "date": "2025-10-03T22:38:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Luligu/matterbridge",
 | 
			
		||||
    "version": "3.3.0",
 | 
			
		||||
    "date": "2025-10-03T21:22:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "keycloak/keycloak",
 | 
			
		||||
    "version": "26.4.0",
 | 
			
		||||
    "date": "2025-09-30T11:49:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "homarr-labs/homarr",
 | 
			
		||||
    "version": "v1.40.0",
 | 
			
		||||
@@ -224,16 +414,6 @@
 | 
			
		||||
    "version": "2025.10.1",
 | 
			
		||||
    "date": "2025-10-03T18:10:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fuma-nama/fumadocs",
 | 
			
		||||
    "version": "@fumadocs/mdx-remote@1.4.2",
 | 
			
		||||
    "date": "2025-10-03T17:01:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bunkerity/bunkerweb",
 | 
			
		||||
    "version": "v1.6.5",
 | 
			
		||||
    "date": "2025-10-03T16:43:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "immich-app/immich",
 | 
			
		||||
    "version": "v2.0.1",
 | 
			
		||||
@@ -254,16 +434,6 @@
 | 
			
		||||
    "version": "v25.3",
 | 
			
		||||
    "date": "2025-09-01T09:47:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pocketbase/pocketbase",
 | 
			
		||||
    "version": "v0.30.1",
 | 
			
		||||
    "date": "2025-10-03T06:55:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "booklore-app/booklore",
 | 
			
		||||
    "version": "v1.4.1",
 | 
			
		||||
    "date": "2025-10-03T06:52:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "redis/redis",
 | 
			
		||||
    "version": "8.2.2",
 | 
			
		||||
@@ -279,16 +449,6 @@
 | 
			
		||||
    "version": "v0.9.95",
 | 
			
		||||
    "date": "2025-10-02T16:07:18Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "meilisearch/meilisearch",
 | 
			
		||||
    "version": "prototype-shorten-snapshot-creation-0",
 | 
			
		||||
    "date": "2025-10-02T15:16:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "n8n-io/n8n",
 | 
			
		||||
    "version": "n8n@1.112.6",
 | 
			
		||||
    "date": "2025-09-26T10:56:27Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "theonedev/onedev",
 | 
			
		||||
    "version": "v13.0.7",
 | 
			
		||||
@@ -314,21 +474,11 @@
 | 
			
		||||
    "version": "v25.10.0",
 | 
			
		||||
    "date": "2025-10-02T11:34:39Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jenkinsci/jenkins",
 | 
			
		||||
    "version": "jenkins-2.530",
 | 
			
		||||
    "date": "2025-09-30T15:42:52Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "laurent22/joplin",
 | 
			
		||||
    "version": "server-v3.4.4",
 | 
			
		||||
    "date": "2025-09-25T13:19:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "ipfs/kubo",
 | 
			
		||||
    "version": "v0.38.0",
 | 
			
		||||
    "date": "2025-10-02T01:46:06Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NodeBB/NodeBB",
 | 
			
		||||
    "version": "v4.6.0",
 | 
			
		||||
@@ -344,21 +494,11 @@
 | 
			
		||||
    "version": "11.0.0",
 | 
			
		||||
    "date": "2025-10-01T12:00:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "authelia/authelia",
 | 
			
		||||
    "version": "v4.39.11",
 | 
			
		||||
    "date": "2025-10-01T11:42:23Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "esphome/esphome",
 | 
			
		||||
    "version": "2025.9.3",
 | 
			
		||||
    "date": "2025-10-01T11:30:07Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "element-hq/synapse",
 | 
			
		||||
    "version": "v1.139.0",
 | 
			
		||||
    "date": "2025-10-01T08:24:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Kozea/Radicale",
 | 
			
		||||
    "version": "v3.5.7.pypi",
 | 
			
		||||
@@ -379,21 +519,11 @@
 | 
			
		||||
    "version": "r8.2.1",
 | 
			
		||||
    "date": "2025-09-30T21:46:28Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MediaBrowser/Emby.Releases",
 | 
			
		||||
    "version": "4.9.1.80",
 | 
			
		||||
    "date": "2025-09-30T20:25:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "netbox-community/netbox",
 | 
			
		||||
    "version": "v4.4.2",
 | 
			
		||||
    "date": "2025-09-30T20:16:13Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "TwiN/gatus",
 | 
			
		||||
    "version": "v5.25.2",
 | 
			
		||||
    "date": "2025-09-30T18:32:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "WordPress/WordPress",
 | 
			
		||||
    "version": "4.7.31",
 | 
			
		||||
@@ -414,21 +544,11 @@
 | 
			
		||||
    "version": "4.4.46",
 | 
			
		||||
    "date": "2025-09-30T13:21:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "fallenbagel/jellyseerr",
 | 
			
		||||
    "version": "preview-rename-tags",
 | 
			
		||||
    "date": "2025-09-30T12:50:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "emqx/emqx",
 | 
			
		||||
    "version": "e6.0.0",
 | 
			
		||||
    "date": "2025-09-30T12:04:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zitadel/zitadel",
 | 
			
		||||
    "version": "v4.3.0",
 | 
			
		||||
    "date": "2025-09-30T06:54:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "thomiceli/opengist",
 | 
			
		||||
    "version": "v1.11.1",
 | 
			
		||||
@@ -459,41 +579,16 @@
 | 
			
		||||
    "version": "v2.7.12",
 | 
			
		||||
    "date": "2025-05-29T17:08:26Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "sassanix/Warracker",
 | 
			
		||||
    "version": "0.10.1.13",
 | 
			
		||||
    "date": "2025-09-29T17:11:25Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "AdguardTeam/AdGuardHome",
 | 
			
		||||
    "version": "v0.107.67",
 | 
			
		||||
    "date": "2025-09-29T14:45:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "MDeLuise/plant-it",
 | 
			
		||||
    "version": "1.0.0",
 | 
			
		||||
    "date": "2025-09-29T13:53:50Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "documenso/documenso",
 | 
			
		||||
    "version": "v1.12.8",
 | 
			
		||||
    "date": "2025-09-29T13:22:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "jupyter/notebook",
 | 
			
		||||
    "version": "@jupyter-notebook/ui-components@7.5.0-beta.0",
 | 
			
		||||
    "date": "2025-09-29T09:16:42Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "open-webui/open-webui",
 | 
			
		||||
    "version": "v0.6.32",
 | 
			
		||||
    "date": "2025-09-29T06:13:12Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "autobrr/autobrr",
 | 
			
		||||
    "version": "v1.67.0",
 | 
			
		||||
    "date": "2025-09-28T20:49:34Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "lazy-media/Reactive-Resume",
 | 
			
		||||
    "version": "v1.2.6",
 | 
			
		||||
@@ -514,11 +609,6 @@
 | 
			
		||||
    "version": "v0.10.1",
 | 
			
		||||
    "date": "2025-09-28T08:55:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "morpheus65535/bazarr",
 | 
			
		||||
    "version": "v1.5.3",
 | 
			
		||||
    "date": "2025-09-20T12:12:33Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "raydak-labs/configarr",
 | 
			
		||||
    "version": "v1.16.0",
 | 
			
		||||
@@ -536,8 +626,8 @@
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "javedh-dev/tracktor",
 | 
			
		||||
    "version": "0.3.17",
 | 
			
		||||
    "date": "2025-09-27T07:00:36Z"
 | 
			
		||||
    "version": "0.3.18",
 | 
			
		||||
    "date": "2025-09-27T10:32:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Dolibarr/dolibarr",
 | 
			
		||||
@@ -549,16 +639,6 @@
 | 
			
		||||
    "version": "v6.13.5",
 | 
			
		||||
    "date": "2025-09-27T01:10:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "coder/code-server",
 | 
			
		||||
    "version": "v4.104.2",
 | 
			
		||||
    "date": "2025-09-26T22:34:32Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "bastienwirtz/homer",
 | 
			
		||||
    "version": "v25.09.1",
 | 
			
		||||
    "date": "2025-09-26T19:22:16Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "traefik/traefik",
 | 
			
		||||
    "version": "v3.5.3",
 | 
			
		||||
@@ -599,11 +679,6 @@
 | 
			
		||||
    "version": "v14.0.0-dev",
 | 
			
		||||
    "date": "2025-09-25T13:19:45Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rabbitmq/rabbitmq-server",
 | 
			
		||||
    "version": "v4.1.4",
 | 
			
		||||
    "date": "2025-09-02T14:26:24Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gelbphoenix/autocaliweb",
 | 
			
		||||
    "version": "v0.10.2",
 | 
			
		||||
@@ -624,11 +699,6 @@
 | 
			
		||||
    "version": "v1.9.10",
 | 
			
		||||
    "date": "2025-09-24T13:49:53Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "zwave-js/zwave-js-ui",
 | 
			
		||||
    "version": "v11.3.1",
 | 
			
		||||
    "date": "2025-09-24T11:58:00Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "syncthing/syncthing",
 | 
			
		||||
    "version": "v2.0.10",
 | 
			
		||||
@@ -674,11 +744,6 @@
 | 
			
		||||
    "version": "v2.1.0",
 | 
			
		||||
    "date": "2025-09-22T09:23:37Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "prometheus/prometheus",
 | 
			
		||||
    "version": "v3.6.0",
 | 
			
		||||
    "date": "2025-09-22T08:24:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Athou/commafeed",
 | 
			
		||||
    "version": "5.11.1",
 | 
			
		||||
@@ -719,11 +784,6 @@
 | 
			
		||||
    "version": "v0.23.2",
 | 
			
		||||
    "date": "2025-09-18T17:18:59Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "grokability/snipe-it",
 | 
			
		||||
    "version": "v8.3.2",
 | 
			
		||||
    "date": "2025-09-18T13:55:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "NLnetLabs/unbound",
 | 
			
		||||
    "version": "release-1.24.0",
 | 
			
		||||
@@ -804,11 +864,6 @@
 | 
			
		||||
    "version": "v5.15.0",
 | 
			
		||||
    "date": "2025-09-15T17:25:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "FlowiseAI/Flowise",
 | 
			
		||||
    "version": "flowise@3.0.7",
 | 
			
		||||
    "date": "2025-09-15T16:08:09Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "linuxserver/Heimdall",
 | 
			
		||||
    "version": "v2.7.6",
 | 
			
		||||
@@ -819,11 +874,6 @@
 | 
			
		||||
    "version": "v0.25.1",
 | 
			
		||||
    "date": "2025-09-15T14:57:30Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "VictoriaMetrics/VictoriaMetrics",
 | 
			
		||||
    "version": "pmm-6401-v1.126.0",
 | 
			
		||||
    "date": "2025-09-15T11:32:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "crafty-controller/crafty-4",
 | 
			
		||||
    "version": "v4.5.4",
 | 
			
		||||
@@ -864,11 +914,6 @@
 | 
			
		||||
    "version": "1.11.3",
 | 
			
		||||
    "date": "2025-09-09T08:03:31Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "gotson/komga",
 | 
			
		||||
    "version": "1.23.4",
 | 
			
		||||
    "date": "2025-09-09T02:47:05Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Tautulli/Tautulli",
 | 
			
		||||
    "version": "v2.16.0",
 | 
			
		||||
@@ -909,16 +954,6 @@
 | 
			
		||||
    "version": "2.0.0-beta.2-temp",
 | 
			
		||||
    "date": "2025-03-28T08:45:58Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/panel",
 | 
			
		||||
    "version": "v1.0.0-beta25",
 | 
			
		||||
    "date": "2025-09-04T21:42:46Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "pelican-dev/wings",
 | 
			
		||||
    "version": "v1.0.0-beta17",
 | 
			
		||||
    "date": "2025-09-04T21:30:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "blakeblackshear/frigate",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
@@ -969,11 +1004,6 @@
 | 
			
		||||
    "version": "v1.9.2",
 | 
			
		||||
    "date": "2025-08-28T07:06:14Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "advplyr/audiobookshelf",
 | 
			
		||||
    "version": "v2.29.0",
 | 
			
		||||
    "date": "2025-08-25T22:43:20Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "plexguide/Huntarr.io",
 | 
			
		||||
    "version": "8.2.10",
 | 
			
		||||
@@ -1024,11 +1054,6 @@
 | 
			
		||||
    "version": "3.3.0",
 | 
			
		||||
    "date": "2025-08-17T19:57:11Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "thecfu/scraparr",
 | 
			
		||||
    "version": "v2.2.4",
 | 
			
		||||
    "date": "2025-08-17T10:12:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mylar3/mylar3",
 | 
			
		||||
    "version": "v0.8.3",
 | 
			
		||||
@@ -1039,11 +1064,6 @@
 | 
			
		||||
    "version": "latest",
 | 
			
		||||
    "date": "2025-08-15T15:33:51Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "Kometa-Team/Kometa",
 | 
			
		||||
    "version": "v2.2.1",
 | 
			
		||||
    "date": "2025-08-13T19:49:01Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "swapplications/uhf-server-dist",
 | 
			
		||||
    "version": "1.5.1",
 | 
			
		||||
@@ -1079,11 +1099,6 @@
 | 
			
		||||
    "version": "v2.14.0",
 | 
			
		||||
    "date": "2025-08-05T08:31:35Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "rogerfar/rdt-client",
 | 
			
		||||
    "version": "v2.0.116",
 | 
			
		||||
    "date": "2025-08-05T04:45:21Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "inspircd/inspircd",
 | 
			
		||||
    "version": "v4.8.0",
 | 
			
		||||
@@ -1169,11 +1184,6 @@
 | 
			
		||||
    "version": "v2.12.6",
 | 
			
		||||
    "date": "2025-07-09T21:52:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "nicolargo/glances",
 | 
			
		||||
    "version": "v4.3.3",
 | 
			
		||||
    "date": "2025-07-09T15:35:44Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "mysql/mysql-server",
 | 
			
		||||
    "version": "mysql-cluster-9.4.0",
 | 
			
		||||
@@ -1264,11 +1274,6 @@
 | 
			
		||||
    "version": "v0.26.1",
 | 
			
		||||
    "date": "2025-06-06T11:22:02Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "C4illin/ConvertX",
 | 
			
		||||
    "version": "v0.14.1",
 | 
			
		||||
    "date": "2025-06-04T08:57:15Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "release-argus/Argus",
 | 
			
		||||
    "version": "0.26.3",
 | 
			
		||||
@@ -1344,11 +1349,6 @@
 | 
			
		||||
    "version": "v0.2.11",
 | 
			
		||||
    "date": "2025-04-12T21:13:08Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "azukaar/Cosmos-Server",
 | 
			
		||||
    "version": "v0.18.4",
 | 
			
		||||
    "date": "2025-04-05T19:12:57Z"
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    "name": "wger-project/wger",
 | 
			
		||||
    "version": "2.3",
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 16,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Watcharr",
 | 
			
		||||
    "slug": "watcharr",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        13
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2025-02-12",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3080,
 | 
			
		||||
    "documentation": "https://watcharr.app/docs/introduction",
 | 
			
		||||
    "website": "https://watcharr.app/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/watcharr.webp",
 | 
			
		||||
    "config_path": "",
 | 
			
		||||
    "description": "Open source, self-hostable watched list for all your content with user authentication, modern and clean UI and a very simple setup.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/watcharr.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 1024,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": null,
 | 
			
		||||
        "password": null
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
  "name": "Watcharr",
 | 
			
		||||
  "slug": "watcharr",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    13
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2025-02-12",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3080,
 | 
			
		||||
  "documentation": "https://watcharr.app/docs/introduction",
 | 
			
		||||
  "website": "https://watcharr.app/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/watcharr.webp",
 | 
			
		||||
  "config_path": "",
 | 
			
		||||
  "description": "Open source, self-hostable watched list for all your content with user authentication, modern and clean UI and a very simple setup.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/watcharr.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": null,
 | 
			
		||||
    "password": null
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 2,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 12,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 7,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 4096,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "Zerotier-One",
 | 
			
		||||
    "slug": "zerotier-one",
 | 
			
		||||
    "categories": [
 | 
			
		||||
        4
 | 
			
		||||
    ],
 | 
			
		||||
    "date_created": "2024-05-02",
 | 
			
		||||
    "type": "ct",
 | 
			
		||||
    "updateable": true,
 | 
			
		||||
    "privileged": false,
 | 
			
		||||
    "interface_port": 3443,
 | 
			
		||||
    "documentation": "https://docs.zerotier.com/",
 | 
			
		||||
    "website": "https://www.zerotier.com/",
 | 
			
		||||
    "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zerotier.webp",
 | 
			
		||||
    "config_path": "/opt/key-networks/ztncui/.env",
 | 
			
		||||
    "description": "ZeroTier is a secure network overlay that allows you to manage all of your network resources as if they were on the same LAN. The software-defined solution can be deployed in minutes from anywhere. No matter how many devices you need to connect, or where they are in the world, ZeroTier makes global networking simple.",
 | 
			
		||||
    "install_methods": [
 | 
			
		||||
        {
 | 
			
		||||
            "type": "default",
 | 
			
		||||
            "script": "ct/zerotier-one.sh",
 | 
			
		||||
            "resources": {
 | 
			
		||||
                "cpu": 1,
 | 
			
		||||
                "ram": 512,
 | 
			
		||||
                "hdd": 4,
 | 
			
		||||
                "os": "debian",
 | 
			
		||||
                "version": "12"
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    ],
 | 
			
		||||
    "default_credentials": {
 | 
			
		||||
        "username": "admin",
 | 
			
		||||
        "password": "password"
 | 
			
		||||
    },
 | 
			
		||||
    "notes": []
 | 
			
		||||
  "name": "Zerotier-One",
 | 
			
		||||
  "slug": "zerotier-one",
 | 
			
		||||
  "categories": [
 | 
			
		||||
    4
 | 
			
		||||
  ],
 | 
			
		||||
  "date_created": "2024-05-02",
 | 
			
		||||
  "type": "ct",
 | 
			
		||||
  "updateable": true,
 | 
			
		||||
  "privileged": false,
 | 
			
		||||
  "interface_port": 3443,
 | 
			
		||||
  "documentation": "https://docs.zerotier.com/",
 | 
			
		||||
  "website": "https://www.zerotier.com/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zerotier.webp",
 | 
			
		||||
  "config_path": "/opt/key-networks/ztncui/.env",
 | 
			
		||||
  "description": "ZeroTier is a secure network overlay that allows you to manage all of your network resources as if they were on the same LAN. The software-defined solution can be deployed in minutes from anywhere. No matter how many devices you need to connect, or where they are in the world, ZeroTier makes global networking simple.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
      "type": "default",
 | 
			
		||||
      "script": "ct/zerotier-one.sh",
 | 
			
		||||
      "resources": {
 | 
			
		||||
        "cpu": 1,
 | 
			
		||||
        "ram": 512,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "default_credentials": {
 | 
			
		||||
    "username": "admin",
 | 
			
		||||
    "password": "password"
 | 
			
		||||
  },
 | 
			
		||||
  "notes": []
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
  "documentation": "https://www.zigbee2mqtt.io/guide/getting-started/",
 | 
			
		||||
  "website": "https://www.zigbee2mqtt.io/",
 | 
			
		||||
  "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/zigbee2mqtt.webp",
 | 
			
		||||
  "config_path": "/opt/zigbee2mqtt/data/configuration.yaml",
 | 
			
		||||
  "config_path": "debian: /opt/zigbee2mqtt/data/configuration.yaml | alpine: /var/lib/zigbee2mqtt/configuration.yaml",
 | 
			
		||||
  "description": "Zigbee2MQTT is an open-source software project that allows you to use Zigbee-based smart home devices (such as those sold under the Philips Hue and Ikea Tradfri brands) with MQTT-based home automation systems, like Home Assistant, Node-RED, and others. The software acts as a bridge between your Zigbee devices and MQTT, allowing you to control and monitor these devices from your home automation system.",
 | 
			
		||||
  "install_methods": [
 | 
			
		||||
    {
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 8,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 6,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 2048,
 | 
			
		||||
        "hdd": 5,
 | 
			
		||||
        "os": "Debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
        "ram": 1024,
 | 
			
		||||
        "hdd": 4,
 | 
			
		||||
        "os": "debian",
 | 
			
		||||
        "version": "12"
 | 
			
		||||
        "version": "13"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
 
 | 
			
		||||
@@ -315,7 +315,7 @@ export default function JSONGenerator() {
 | 
			
		||||
            </Button>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <pre className="mt-4 p-4 bg-secondary rounded shadow-sm overflow-x-scroll">
 | 
			
		||||
          <pre className="mt-4 p-4 bg-secondary rounded shadow overflow-x-scroll">
 | 
			
		||||
            {JSON.stringify(script, null, 2)}
 | 
			
		||||
          </pre>
 | 
			
		||||
        </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -47,8 +47,8 @@ export default function Page() {
 | 
			
		||||
                  <AnimatedGradientText>
 | 
			
		||||
                    <div
 | 
			
		||||
                      className={cn(
 | 
			
		||||
                        `absolute inset-0 block size-full animate-gradient bg-linear-to-r from-[#ffaa40]/50 via-[#9c40ff]/50 to-[#ffaa40]/50 bg-size-[var(--bg-size)_100%] rounded-[inherit] [mask:linear-gradient(#fff_0_0)_content-box,linear-gradient(#fff_0_0)]`,
 | 
			
		||||
                        `p-px mask-subtract!`,
 | 
			
		||||
                        `absolute inset-0 block size-full animate-gradient bg-gradient-to-r from-[#ffaa40]/50 via-[#9c40ff]/50 to-[#ffaa40]/50 bg-[length:var(--bg-size)_100%] [border-radius:inherit] [mask:linear-gradient(#fff_0_0)_content-box,linear-gradient(#fff_0_0)]`,
 | 
			
		||||
                        `p-px ![mask-composite:subtract]`,
 | 
			
		||||
                      )}
 | 
			
		||||
                    />
 | 
			
		||||
                    ❤️
 | 
			
		||||
@@ -56,7 +56,7 @@ export default function Page() {
 | 
			
		||||
                    <Separator className="mx-2 h-4" orientation="vertical" />
 | 
			
		||||
                    <span
 | 
			
		||||
                      className={cn(
 | 
			
		||||
                        `animate-gradient bg-linear-to-r from-[#ffaa40] via-[#9c40ff] to-[#ffaa40] bg-size-[var(--bg-size)_100%] bg-clip-text text-transparent`,
 | 
			
		||||
                        `animate-gradient bg-gradient-to-r from-[#ffaa40] via-[#9c40ff] to-[#ffaa40] bg-[length:var(--bg-size)_100%] bg-clip-text text-transparent`,
 | 
			
		||||
                        `inline`,
 | 
			
		||||
                      )}
 | 
			
		||||
                    >
 | 
			
		||||
 
 | 
			
		||||
@@ -120,7 +120,7 @@ export default function ScriptAccordion({
 | 
			
		||||
                      query: { id: script.slug, category: category.name },
 | 
			
		||||
                    }}
 | 
			
		||||
                    prefetch={false}
 | 
			
		||||
                    className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 dark:hover:bg-accent/20 ${selectedScript === script.slug
 | 
			
		||||
                    className={`flex cursor-pointer items-center justify-between gap-1 px-1 py-1 text-muted-foreground hover:rounded-lg hover:bg-accent/60 hover:dark:bg-accent/20 ${selectedScript === script.slug
 | 
			
		||||
                      ? "rounded-lg bg-accent font-semibold dark:bg-accent/30 dark:text-white"
 | 
			
		||||
                      : ""
 | 
			
		||||
                    }`}
 | 
			
		||||
 
 | 
			
		||||
@@ -84,7 +84,7 @@ export function LatestScripts({ items }: { items: Category[] }) {
 | 
			
		||||
      )}
 | 
			
		||||
      <div className="min-w flex w-full flex-row flex-wrap gap-4">
 | 
			
		||||
        {latestScripts.slice(startIndex, endIndex).map(script => (
 | 
			
		||||
          <Card key={script.slug} className="min-w-[250px] flex-1 grow bg-accent/30">
 | 
			
		||||
          <Card key={script.slug} className="min-w-[250px] flex-1 flex-grow bg-accent/30">
 | 
			
		||||
            <CardHeader>
 | 
			
		||||
              <CardTitle className="flex items-center gap-3">
 | 
			
		||||
                <div className="flex h-16 w-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
 | 
			
		||||
@@ -148,7 +148,7 @@ export function MostViewedScripts({ items }: { items: Category[] }) {
 | 
			
		||||
      )}
 | 
			
		||||
      <div className="min-w flex w-full flex-row flex-wrap gap-4">
 | 
			
		||||
        {mostViewedScripts.map(script => (
 | 
			
		||||
          <Card key={script.slug} className="min-w-[250px] flex-1 grow bg-accent/30">
 | 
			
		||||
          <Card key={script.slug} className="min-w-[250px] flex-1 flex-grow bg-accent/30">
 | 
			
		||||
            <CardHeader>
 | 
			
		||||
              <CardTitle className="flex items-center gap-3">
 | 
			
		||||
                <div className="flex size-16 min-w-16 items-center justify-center rounded-lg bg-accent p-1">
 | 
			
		||||
 
 | 
			
		||||
@@ -35,10 +35,10 @@ function ScriptHeader({ item }: { item: Script }) {
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="flex flex-col lg:flex-row gap-6 w-full">
 | 
			
		||||
      <div className="flex flex-col md:flex-row gap-6 grow">
 | 
			
		||||
        <div className="shrink-0">
 | 
			
		||||
      <div className="flex flex-col md:flex-row gap-6 flex-grow">
 | 
			
		||||
        <div className="flex-shrink-0">
 | 
			
		||||
          <Image
 | 
			
		||||
            className="h-32 w-32 rounded-xl bg-linear-to-br from-accent/40 to-accent/60 object-contain p-3 shadow-lg transition-transform hover:scale-105"
 | 
			
		||||
            className="h-32 w-32 rounded-xl bg-gradient-to-br from-accent/40 to-accent/60 object-contain p-3 shadow-lg transition-transform hover:scale-105"
 | 
			
		||||
            src={item.logo || `/${basePath}/logo.png`}
 | 
			
		||||
            width={400}
 | 
			
		||||
            onError={e => ((e.currentTarget as HTMLImageElement).src = `/${basePath}/logo.png`)}
 | 
			
		||||
@@ -47,7 +47,7 @@ function ScriptHeader({ item }: { item: Script }) {
 | 
			
		||||
            unoptimized
 | 
			
		||||
          />
 | 
			
		||||
        </div>
 | 
			
		||||
        <div className="flex flex-col justify-between grow space-y-4">
 | 
			
		||||
        <div className="flex flex-col justify-between flex-grow space-y-4">
 | 
			
		||||
          <div className="space-y-2">
 | 
			
		||||
            <div className="flex items-start justify-between">
 | 
			
		||||
              <div>
 | 
			
		||||
@@ -140,7 +140,7 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
 | 
			
		||||
          </button>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div className="rounded-xl border border-border bg-accent/30 backdrop-blur-xs shadow-xs">
 | 
			
		||||
        <div className="rounded-xl border border-border bg-accent/30 backdrop-blur-sm shadow-sm">
 | 
			
		||||
          <div className="p-6 space-y-6">
 | 
			
		||||
            <Suspense fallback={<div className="animate-pulse h-32 bg-accent/20 rounded-xl" />}>
 | 
			
		||||
              <ScriptHeader item={item} />
 | 
			
		||||
@@ -149,7 +149,7 @@ export function ScriptItem({ item, setSelectedScript }: ScriptItemProps) {
 | 
			
		||||
            <Description item={item} />
 | 
			
		||||
            <Alerts item={item} />
 | 
			
		||||
 | 
			
		||||
            <div className="mt-4 rounded-lg border shadow-xs">
 | 
			
		||||
            <div className="mt-4 rounded-lg border shadow-sm">
 | 
			
		||||
              <div className="flex gap-3 px-4 py-2 bg-accent/25">
 | 
			
		||||
                <h2 className="text-lg font-semibold">
 | 
			
		||||
                  How to
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ export default function Alerts({ item }: { item: Script }) {
 | 
			
		||||
    <>
 | 
			
		||||
      {item?.notes?.length > 0
 | 
			
		||||
        && item.notes.map((note: NoteProps, index: number) => (
 | 
			
		||||
          <div key={index} className="mt-4 flex flex-col shadow-xs gap-2">
 | 
			
		||||
          <div key={index} className="mt-4 flex flex-col shadow-sm gap-2">
 | 
			
		||||
            <p
 | 
			
		||||
              className={cn(
 | 
			
		||||
                "inline-flex items-center gap-2 rounded-lg border p-2 pl-4 text-sm",
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ export default function DefaultPassword({ item }: { item: Script }) {
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div className="mt-4 rounded-lg border shadow-xs">
 | 
			
		||||
    <div className="mt-4 rounded-lg border shadow-sm">
 | 
			
		||||
      <div className="flex gap-3 px-4 py-2 bg-accent/25">
 | 
			
		||||
        <h2 className="text-lg font-semibold">Default Login Credentials</h2>
 | 
			
		||||
      </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -14,19 +14,19 @@ import {
 | 
			
		||||
import { cn } from "@/lib/utils";
 | 
			
		||||
 | 
			
		||||
const buttonVariants = cva(
 | 
			
		||||
  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[box-shadow,color,background-color,border-color,outline-color,text-decoration-color,fill,stroke] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-hidden focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
 | 
			
		||||
  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[box-shadow,_color,_background-color,_border-color,_outline-color,_text-decoration-color,_fill,_stroke] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
 | 
			
		||||
  {
 | 
			
		||||
    variants: {
 | 
			
		||||
      variant: {
 | 
			
		||||
        default:
 | 
			
		||||
          "bg-primary text-primary-foreground shadow-2xs hover:bg-primary/90",
 | 
			
		||||
        accent: "bg-accent text-accent-foreground shadow-2xs hover:bg-accent/90",
 | 
			
		||||
          "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
 | 
			
		||||
        accent: "bg-accent text-accent-foreground shadow-xs hover:bg-accent/90",
 | 
			
		||||
        destructive:
 | 
			
		||||
          "bg-destructive text-white shadow-2xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
 | 
			
		||||
          "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
 | 
			
		||||
        outline:
 | 
			
		||||
          "border bg-background shadow-2xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
 | 
			
		||||
          "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
 | 
			
		||||
        secondary:
 | 
			
		||||
          "bg-secondary text-secondary-foreground shadow-2xs hover:bg-secondary/80",
 | 
			
		||||
          "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
 | 
			
		||||
        ghost:
 | 
			
		||||
          "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
 | 
			
		||||
        link: "text-primary underline-offset-4 hover:underline",
 | 
			
		||||
 
 | 
			
		||||
@@ -18,14 +18,14 @@ import { Button as ButtonPrimitive } from "@/components/animate-ui/primitives/bu
 | 
			
		||||
import { cn } from "@/lib/utils";
 | 
			
		||||
 | 
			
		||||
const buttonVariants = cva(
 | 
			
		||||
  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[box-shadow,color,background-color,border-color,outline-color,text-decoration-color,fill,stroke] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-hidden focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
 | 
			
		||||
  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[box-shadow,_color,_background-color,_border-color,_outline-color,_text-decoration-color,_fill,_stroke] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
 | 
			
		||||
  {
 | 
			
		||||
    variants: {
 | 
			
		||||
      variant: {
 | 
			
		||||
        default: "bg-primary text-primary-foreground shadow-2xs hover:bg-primary/90",
 | 
			
		||||
        accent: "bg-accent text-accent-foreground shadow-2xs hover:bg-accent/90",
 | 
			
		||||
        default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
 | 
			
		||||
        accent: "bg-accent text-accent-foreground shadow-xs hover:bg-accent/90",
 | 
			
		||||
        outline:
 | 
			
		||||
          "border bg-background shadow-2xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
 | 
			
		||||
          "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
 | 
			
		||||
        ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
 | 
			
		||||
      },
 | 
			
		||||
      size: {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,12 +12,12 @@ export default function AnimatedGradientText({
 | 
			
		||||
  return (
 | 
			
		||||
    <div
 | 
			
		||||
      className={cn(
 | 
			
		||||
        "group relative mx-auto flex max-w-fit flex-row items-center justify-center rounded-2xl bg-white/40 px-4 py-1.5 text-sm font-medium shadow-[inset_0_-8px_10px_#8fdfff1f] backdrop-blur-xs transition-shadow duration-500 ease-out [--bg-size:300%] hover:shadow-[inset_0_-5px_10px_#8fdfff3f] dark:bg-black/40",
 | 
			
		||||
        "group relative mx-auto flex max-w-fit flex-row items-center justify-center rounded-2xl bg-white/40 px-4 py-1.5 text-sm font-medium shadow-[inset_0_-8px_10px_#8fdfff1f] backdrop-blur-sm transition-shadow duration-500 ease-out [--bg-size:300%] hover:shadow-[inset_0_-5px_10px_#8fdfff3f] dark:bg-black/40",
 | 
			
		||||
        className,
 | 
			
		||||
      )}
 | 
			
		||||
    >
 | 
			
		||||
      <div
 | 
			
		||||
        className="absolute inset-0 block h-full w-full animate-gradient bg-linear-to-r from-[#ffaa40]/50 via-[#9c40ff]/50 to-[#ffaa40]/50 bg-size-[var(--bg-size)_100%] p-px rounded-[inherit] mask-subtract! [mask:linear-gradient(#fff_0_0)_content-box,linear-gradient(#fff_0_0)]"
 | 
			
		||||
        className="absolute inset-0 block h-full w-full animate-gradient bg-gradient-to-r from-[#ffaa40]/50 via-[#9c40ff]/50 to-[#ffaa40]/50 bg-[length:var(--bg-size)_100%] p-[1px] [border-radius:inherit] ![mask-composite:subtract] [mask:linear-gradient(#fff_0_0)_content-box,linear-gradient(#fff_0_0)]"
 | 
			
		||||
      />
 | 
			
		||||
 | 
			
		||||
      {children}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ import * as React from "react";
 | 
			
		||||
import { cn } from "@/lib/utils";
 | 
			
		||||
 | 
			
		||||
const badgeVariants = cva(
 | 
			
		||||
  "inline-flex items-center rounded-full border px-1.5 py-0.1 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2",
 | 
			
		||||
  "inline-flex items-center rounded-full border px-1.5 py-0.1 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
 | 
			
		||||
  {
 | 
			
		||||
    variants: {
 | 
			
		||||
      variant: {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ import * as React from "react";
 | 
			
		||||
import { cn } from "@/lib/utils";
 | 
			
		||||
 | 
			
		||||
const buttonVariants = cva(
 | 
			
		||||
  "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
 | 
			
		||||
  "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
 | 
			
		||||
  {
 | 
			
		||||
    variants: {
 | 
			
		||||
      variant: {
 | 
			
		||||
@@ -25,15 +25,15 @@ const buttonVariants = cva(
 | 
			
		||||
        ringHover:
 | 
			
		||||
          "bg-primary text-primary-foreground transition-all duration-300 hover:bg-primary/90 hover:ring-2 hover:ring-primary/90 hover:ring-offset-2",
 | 
			
		||||
        shine:
 | 
			
		||||
          "text-primary-foreground animate-shine bg-linear-to-r from-primary via-primary/75 to-primary bg-size-[400%_100%] ",
 | 
			
		||||
          "text-primary-foreground animate-shine bg-gradient-to-r from-primary via-primary/75 to-primary bg-[length:400%_100%] ",
 | 
			
		||||
        gooeyRight:
 | 
			
		||||
          "text-primary-foreground relative bg-primary z-0 overflow-hidden transition-all duration-500 before:absolute before:inset-0 before:-z-10 before:translate-x-[150%] before:translate-y-[150%] before:scale-[2.5] before:rounded-[100%] before:bg-linear-to-r from-zinc-400 before:transition-transform before:duration-1000  hover:before:translate-x-[0%] hover:before:translate-y-[0%] ",
 | 
			
		||||
          "text-primary-foreground relative bg-primary z-0 overflow-hidden transition-all duration-500 before:absolute before:inset-0 before:-z-10 before:translate-x-[150%] before:translate-y-[150%] before:scale-[2.5] before:rounded-[100%] before:bg-gradient-to-r from-zinc-400 before:transition-transform before:duration-1000  hover:before:translate-x-[0%] hover:before:translate-y-[0%] ",
 | 
			
		||||
        gooeyLeft:
 | 
			
		||||
          "text-primary-foreground relative bg-primary z-0 overflow-hidden transition-all duration-500 after:absolute after:inset-0 after:-z-10 after:translate-x-[-150%] after:translate-y-[150%] after:scale-[2.5] after:rounded-[100%] after:bg-linear-to-l from-zinc-400 after:transition-transform after:duration-1000  hover:after:translate-x-[0%] hover:after:translate-y-[0%] ",
 | 
			
		||||
          "text-primary-foreground relative bg-primary z-0 overflow-hidden transition-all duration-500 after:absolute after:inset-0 after:-z-10 after:translate-x-[-150%] after:translate-y-[150%] after:scale-[2.5] after:rounded-[100%] after:bg-gradient-to-l from-zinc-400 after:transition-transform after:duration-1000  hover:after:translate-x-[0%] hover:after:translate-y-[0%] ",
 | 
			
		||||
        linkHover1:
 | 
			
		||||
          "relative after:absolute after:bg-primary after:bottom-2 after:h-px after:w-2/3 after:origin-bottom-left after:scale-x-100 hover:after:origin-bottom-right hover:after:scale-x-0 after:transition-transform after:ease-in-out after:duration-300",
 | 
			
		||||
          "relative after:absolute after:bg-primary after:bottom-2 after:h-[1px] after:w-2/3 after:origin-bottom-left after:scale-x-100 hover:after:origin-bottom-right hover:after:scale-x-0 after:transition-transform after:ease-in-out after:duration-300",
 | 
			
		||||
        linkHover2:
 | 
			
		||||
          "relative after:absolute after:bg-primary after:bottom-2 after:h-px after:w-2/3 after:origin-bottom-right after:scale-x-0 hover:after:origin-bottom-left hover:after:scale-x-100 after:transition-transform after:ease-in-out after:duration-300",
 | 
			
		||||
          "relative after:absolute after:bg-primary after:bottom-2 after:h-[1px] after:w-2/3 after:origin-bottom-right after:scale-x-0 hover:after:origin-bottom-left hover:after:scale-x-100 after:transition-transform after:ease-in-out after:duration-300",
 | 
			
		||||
      },
 | 
			
		||||
      size: {
 | 
			
		||||
        default: "h-10 px-4 py-2",
 | 
			
		||||
@@ -96,7 +96,7 @@ const Button = React.forwardRef<
 | 
			
		||||
        )}
 | 
			
		||||
        <Slottable>{props.children}</Slottable>
 | 
			
		||||
        {Icon && iconPlacement === "right" && (
 | 
			
		||||
          <div className="w-0 translate-x-full pl-0 opacity-0 transition-all duration-200 group-hover:w-5 group-hover:translate-x-0 group-hover:pl-2 group-hover:opacity-100">
 | 
			
		||||
          <div className="w-0 translate-x-[100%] pl-0 opacity-0 transition-all duration-200 group-hover:w-5 group-hover:translate-x-0 group-hover:pl-2 group-hover:opacity-100">
 | 
			
		||||
            <Icon />
 | 
			
		||||
          </div>
 | 
			
		||||
        )}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ const Card = React.forwardRef<
 | 
			
		||||
  <div
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "rounded-lg border text-card-foreground shadow-xs",
 | 
			
		||||
      "rounded-lg border text-card-foreground shadow-sm",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ import { Separator } from "./separator";
 | 
			
		||||
import { Button } from "./button";
 | 
			
		||||
 | 
			
		||||
const buttonVariants = cva(
 | 
			
		||||
  "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
 | 
			
		||||
  "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
 | 
			
		||||
  {
 | 
			
		||||
    variants: {
 | 
			
		||||
      variant: {
 | 
			
		||||
 
 | 
			
		||||
@@ -47,7 +47,7 @@ const CommandInput = React.forwardRef<
 | 
			
		||||
    <CommandPrimitive.Input
 | 
			
		||||
      ref={ref}
 | 
			
		||||
      className={cn(
 | 
			
		||||
        "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-hidden placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
 | 
			
		||||
        "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
 | 
			
		||||
        className,
 | 
			
		||||
      )}
 | 
			
		||||
      {...props}
 | 
			
		||||
@@ -118,7 +118,7 @@ const CommandItem = React.forwardRef<
 | 
			
		||||
  <CommandPrimitive.Item
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50",
 | 
			
		||||
      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,7 @@ const DialogContent = React.forwardRef<
 | 
			
		||||
      {...props}
 | 
			
		||||
    >
 | 
			
		||||
      {children}
 | 
			
		||||
      <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
 | 
			
		||||
      <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
 | 
			
		||||
        <X className="h-4 w-4" />
 | 
			
		||||
        <span className="sr-only">Close</span>
 | 
			
		||||
      </DialogPrimitive.Close>
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ const DropdownMenuSubTrigger = React.forwardRef<
 | 
			
		||||
  <DropdownMenuPrimitive.SubTrigger
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent data-[state=open]:bg-accent",
 | 
			
		||||
      "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
 | 
			
		||||
      inset && "pl-8",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
@@ -47,7 +47,7 @@ const DropdownMenuSubContent = React.forwardRef<
 | 
			
		||||
  <DropdownMenuPrimitive.SubContent
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
			
		||||
      "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
@@ -65,7 +65,7 @@ const DropdownMenuContent = React.forwardRef<
 | 
			
		||||
      ref={ref}
 | 
			
		||||
      sideOffset={sideOffset}
 | 
			
		||||
      className={cn(
 | 
			
		||||
        "glass z-50 min-w-32 overflow-hidden rounded-md border bg-popover/50 p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
			
		||||
        "glass z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover/50 p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
			
		||||
        className,
 | 
			
		||||
      )}
 | 
			
		||||
      {...props}
 | 
			
		||||
@@ -83,7 +83,7 @@ const DropdownMenuItem = React.forwardRef<
 | 
			
		||||
  <DropdownMenuPrimitive.Item
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
 | 
			
		||||
      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
 | 
			
		||||
      inset && "pl-8",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
@@ -99,7 +99,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
 | 
			
		||||
  <DropdownMenuPrimitive.CheckboxItem
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
 | 
			
		||||
      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    checked={checked}
 | 
			
		||||
@@ -123,7 +123,7 @@ const DropdownMenuRadioItem = React.forwardRef<
 | 
			
		||||
  <DropdownMenuPrimitive.RadioItem
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
 | 
			
		||||
      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ const Input = React.forwardRef<HTMLInputElement, InputProps>(
 | 
			
		||||
      <input
 | 
			
		||||
        type={type}
 | 
			
		||||
        className={cn(
 | 
			
		||||
          "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
 | 
			
		||||
          "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
 | 
			
		||||
          className,
 | 
			
		||||
        )}
 | 
			
		||||
        ref={ref}
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,7 @@ NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName;
 | 
			
		||||
const NavigationMenuItem = NavigationMenuPrimitive.Item;
 | 
			
		||||
 | 
			
		||||
const navigationMenuTriggerStyle = cva(
 | 
			
		||||
  "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-hidden disabled:pointer-events-none disabled:opacity-50 data-active:bg-accent/50 data-[state=open]:bg-accent/50",
 | 
			
		||||
  "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50",
 | 
			
		||||
);
 | 
			
		||||
 | 
			
		||||
const NavigationMenuTrigger = React.forwardRef<
 | 
			
		||||
@@ -56,7 +56,7 @@ const NavigationMenuTrigger = React.forwardRef<
 | 
			
		||||
    {children}
 | 
			
		||||
    {" "}
 | 
			
		||||
    <ChevronDown
 | 
			
		||||
      className="relative top-px ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180"
 | 
			
		||||
      className="relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180"
 | 
			
		||||
      aria-hidden="true"
 | 
			
		||||
    />
 | 
			
		||||
  </NavigationMenuPrimitive.Trigger>
 | 
			
		||||
@@ -87,7 +87,7 @@ const NavigationMenuViewport = React.forwardRef<
 | 
			
		||||
  <div className={cn("absolute left-0 top-full flex justify-center")}>
 | 
			
		||||
    <NavigationMenuPrimitive.Viewport
 | 
			
		||||
      className={cn(
 | 
			
		||||
        "origin-top-center relative mt-1.5 h-(--radix-navigation-menu-viewport-height) w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-(--radix-navigation-menu-viewport-width)",
 | 
			
		||||
        "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
 | 
			
		||||
        className,
 | 
			
		||||
      )}
 | 
			
		||||
      ref={ref}
 | 
			
		||||
@@ -105,7 +105,7 @@ const NavigationMenuIndicator = React.forwardRef<
 | 
			
		||||
  <NavigationMenuPrimitive.Indicator
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "top-full z-1 flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
 | 
			
		||||
      "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ const PopoverContent = React.forwardRef<
 | 
			
		||||
      align={align}
 | 
			
		||||
      sideOffset={sideOffset}
 | 
			
		||||
      className={cn(
 | 
			
		||||
        "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
			
		||||
        "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
			
		||||
        className,
 | 
			
		||||
      )}
 | 
			
		||||
      {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ const SelectTrigger = React.forwardRef<
 | 
			
		||||
  <SelectPrimitive.Trigger
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
 | 
			
		||||
      "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
@@ -75,7 +75,7 @@ const SelectContent = React.forwardRef<
 | 
			
		||||
    <SelectPrimitive.Content
 | 
			
		||||
      ref={ref}
 | 
			
		||||
      className={cn(
 | 
			
		||||
        "relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
			
		||||
        "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
 | 
			
		||||
        position === "popper"
 | 
			
		||||
        && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
 | 
			
		||||
        className,
 | 
			
		||||
@@ -88,7 +88,7 @@ const SelectContent = React.forwardRef<
 | 
			
		||||
        className={cn(
 | 
			
		||||
          "p-1",
 | 
			
		||||
          position === "popper"
 | 
			
		||||
          && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)",
 | 
			
		||||
          && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]",
 | 
			
		||||
        )}
 | 
			
		||||
      >
 | 
			
		||||
        {children}
 | 
			
		||||
@@ -118,7 +118,7 @@ const SelectItem = React.forwardRef<
 | 
			
		||||
  <SelectPrimitive.Item
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50",
 | 
			
		||||
      "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ const Separator = React.forwardRef<
 | 
			
		||||
      orientation={orientation}
 | 
			
		||||
      className={cn(
 | 
			
		||||
        "shrink-0 bg-border",
 | 
			
		||||
        orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
 | 
			
		||||
        orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
 | 
			
		||||
        className,
 | 
			
		||||
      )}
 | 
			
		||||
      {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,7 @@ const SheetContent = React.forwardRef<
 | 
			
		||||
      {...props}
 | 
			
		||||
    >
 | 
			
		||||
      {children}
 | 
			
		||||
      <SheetPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary">
 | 
			
		||||
      <SheetPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary">
 | 
			
		||||
        <X className="h-4 w-4" />
 | 
			
		||||
        <span className="sr-only">Close</span>
 | 
			
		||||
      </SheetPrimitive.Close>
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ const Switch = React.forwardRef<
 | 
			
		||||
>(({ className, ...props }, ref) => (
 | 
			
		||||
  <SwitchPrimitives.Root
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
 | 
			
		||||
      "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -43,7 +43,7 @@ const TableFooter = React.forwardRef<
 | 
			
		||||
  <tfoot
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "border-t bg-muted/50 font-medium last:[&>tr]:border-b-0",
 | 
			
		||||
      "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -29,7 +29,7 @@ const TabsTrigger = React.forwardRef<
 | 
			
		||||
  <TabsPrimitive.Trigger
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-xs",
 | 
			
		||||
      "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
@@ -44,7 +44,7 @@ const TabsContent = React.forwardRef<
 | 
			
		||||
  <TabsPrimitive.Content
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "mt-2 ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
 | 
			
		||||
      "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ const Textarea = React.forwardRef<
 | 
			
		||||
  return (
 | 
			
		||||
    <textarea
 | 
			
		||||
      className={cn(
 | 
			
		||||
        "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
 | 
			
		||||
        "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
 | 
			
		||||
        className,
 | 
			
		||||
      )}
 | 
			
		||||
      ref={ref}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@ const TooltipContent = React.forwardRef<
 | 
			
		||||
    ref={ref}
 | 
			
		||||
    sideOffset={sideOffset}
 | 
			
		||||
    className={cn(
 | 
			
		||||
      "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-(--radix-tooltip-content-transform-origin)",
 | 
			
		||||
      "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",
 | 
			
		||||
      className,
 | 
			
		||||
    )}
 | 
			
		||||
    {...props}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,147 +1,6 @@
 | 
			
		||||
@import 'tailwindcss';
 | 
			
		||||
 | 
			
		||||
@custom-variant dark (&:is(.dark *));
 | 
			
		||||
 | 
			
		||||
@utility container {
 | 
			
		||||
  margin-inline: auto;
 | 
			
		||||
  padding-inline: 2rem;
 | 
			
		||||
  @media (width >= --theme(--breakpoint-sm)) {
 | 
			
		||||
    max-width: none;
 | 
			
		||||
  }
 | 
			
		||||
  @media (width >= 1400px) {
 | 
			
		||||
    max-width: 1400px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@theme {
 | 
			
		||||
  --color-border: hsl(var(--border));
 | 
			
		||||
  --color-input: hsl(var(--input));
 | 
			
		||||
  --color-ring: hsl(var(--ring));
 | 
			
		||||
  --color-background: hsl(var(--background));
 | 
			
		||||
  --color-foreground: hsl(var(--foreground));
 | 
			
		||||
 | 
			
		||||
  --color-primary: hsl(var(--primary));
 | 
			
		||||
  --color-primary-foreground: hsl(var(--primary-foreground));
 | 
			
		||||
 | 
			
		||||
  --color-secondary: hsl(var(--secondary));
 | 
			
		||||
  --color-secondary-foreground: hsl(var(--secondary-foreground));
 | 
			
		||||
 | 
			
		||||
  --color-destructive: hsl(var(--destructive));
 | 
			
		||||
  --color-destructive-foreground: hsl(var(--destructive-foreground));
 | 
			
		||||
 | 
			
		||||
  --color-muted: hsl(var(--muted));
 | 
			
		||||
  --color-muted-foreground: hsl(var(--muted-foreground));
 | 
			
		||||
 | 
			
		||||
  --color-accent: hsl(var(--accent));
 | 
			
		||||
  --color-accent-foreground: hsl(var(--accent-foreground));
 | 
			
		||||
 | 
			
		||||
  --color-popover: hsl(var(--popover));
 | 
			
		||||
  --color-popover-foreground: hsl(var(--popover-foreground));
 | 
			
		||||
 | 
			
		||||
  --color-card: hsl(var(--card));
 | 
			
		||||
  --color-card-foreground: hsl(var(--card-foreground));
 | 
			
		||||
 | 
			
		||||
  --radius-lg: var(--radius);
 | 
			
		||||
  --radius-md: calc(var(--radius) - 2px);
 | 
			
		||||
  --radius-sm: calc(var(--radius) - 4px);
 | 
			
		||||
 | 
			
		||||
  --animate-accordion-down: accordion-down 0.2s ease-out;
 | 
			
		||||
  --animate-accordion-up: accordion-up 0.2s ease-out;
 | 
			
		||||
  --animate-shine: shine 8s ease-in-out infinite;
 | 
			
		||||
  --animate-gradient: gradient 8s linear infinite;
 | 
			
		||||
 | 
			
		||||
  @keyframes accordion-down {
 | 
			
		||||
    from {
 | 
			
		||||
      height: 0;
 | 
			
		||||
    }
 | 
			
		||||
    to {
 | 
			
		||||
      height: var(--radix-accordion-content-height);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  @keyframes accordion-up {
 | 
			
		||||
    from {
 | 
			
		||||
      height: var(--radix-accordion-content-height);
 | 
			
		||||
    }
 | 
			
		||||
    to {
 | 
			
		||||
      height: 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  @keyframes shine {
 | 
			
		||||
    from {
 | 
			
		||||
      background-position: 200% 0;
 | 
			
		||||
    }
 | 
			
		||||
    to {
 | 
			
		||||
      background-position: -200% 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  @keyframes gradient {
 | 
			
		||||
    to {
 | 
			
		||||
      background-position: var(--bg-size) 0;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  @keyframes shine-pulse {
 | 
			
		||||
    0% {
 | 
			
		||||
      background-position: 0% 0%;
 | 
			
		||||
    }
 | 
			
		||||
    50% {
 | 
			
		||||
      background-position: 100% 100%;
 | 
			
		||||
    }
 | 
			
		||||
    to {
 | 
			
		||||
      background-position: 0% 0%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  @keyframes moveHorizontal {
 | 
			
		||||
    0% {
 | 
			
		||||
      transform: translateX(-50%) translateY(-10%);
 | 
			
		||||
    }
 | 
			
		||||
    50% {
 | 
			
		||||
      transform: translateX(50%) translateY(10%);
 | 
			
		||||
    }
 | 
			
		||||
    100% {
 | 
			
		||||
      transform: translateX(-50%) translateY(-10%);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  @keyframes moveInCircle {
 | 
			
		||||
    0% {
 | 
			
		||||
      transform: rotate(0deg);
 | 
			
		||||
    }
 | 
			
		||||
    50% {
 | 
			
		||||
      transform: rotate(180deg);
 | 
			
		||||
    }
 | 
			
		||||
    100% {
 | 
			
		||||
      transform: rotate(360deg);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  @keyframes moveVertical {
 | 
			
		||||
    0% {
 | 
			
		||||
      transform: translateY(-50%);
 | 
			
		||||
    }
 | 
			
		||||
    50% {
 | 
			
		||||
      transform: translateY(50%);
 | 
			
		||||
    }
 | 
			
		||||
    100% {
 | 
			
		||||
      transform: translateY(-50%);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
  The default border color has changed to `currentcolor` in Tailwind CSS v4,
 | 
			
		||||
  so we've added these compatibility styles to make sure everything still
 | 
			
		||||
  looks the same as it did with Tailwind CSS v3.
 | 
			
		||||
 | 
			
		||||
  If we ever want to remove these styles, we need to add an explicit border
 | 
			
		||||
  color utility to any element that depends on these defaults.
 | 
			
		||||
*/
 | 
			
		||||
@layer base {
 | 
			
		||||
  *,
 | 
			
		||||
  ::after,
 | 
			
		||||
  ::before,
 | 
			
		||||
  ::backdrop,
 | 
			
		||||
  ::file-selector-button {
 | 
			
		||||
    border-color: var(--color-gray-200, currentcolor);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@tailwind base;
 | 
			
		||||
@tailwind components;
 | 
			
		||||
@tailwind utilities;
 | 
			
		||||
 | 
			
		||||
@layer base {
 | 
			
		||||
  :root {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										181
									
								
								frontend/tailwind.config.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										181
									
								
								frontend/tailwind.config.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,181 @@
 | 
			
		||||
/* eslint-disable ts/no-require-imports */
 | 
			
		||||
//
 | 
			
		||||
import type { Config } from "tailwindcss";
 | 
			
		||||
 | 
			
		||||
const {
 | 
			
		||||
  default: flattenColorPalette,
 | 
			
		||||
} = require("tailwindcss/lib/util/flattenColorPalette");
 | 
			
		||||
const svgToDataUri = require("mini-svg-data-uri");
 | 
			
		||||
 | 
			
		||||
const config = {
 | 
			
		||||
  darkMode: ["class"],
 | 
			
		||||
  content: [
 | 
			
		||||
    "./pages/**/*.{ts,tsx}",
 | 
			
		||||
    "./components/**/*.{ts,tsx}",
 | 
			
		||||
    "./app/**/*.{ts,tsx}",
 | 
			
		||||
    "./src/**/*.{ts,tsx}",
 | 
			
		||||
  ],
 | 
			
		||||
  prefix: "",
 | 
			
		||||
  theme: {
 | 
			
		||||
    container: {
 | 
			
		||||
      center: true,
 | 
			
		||||
      padding: "2rem",
 | 
			
		||||
      screens: {
 | 
			
		||||
        "2xl": "1400px",
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
    extend: {
 | 
			
		||||
      colors: {
 | 
			
		||||
        border: "hsl(var(--border))",
 | 
			
		||||
        input: "hsl(var(--input))",
 | 
			
		||||
        ring: "hsl(var(--ring))",
 | 
			
		||||
        background: "hsl(var(--background))",
 | 
			
		||||
        foreground: "hsl(var(--foreground))",
 | 
			
		||||
        primary: {
 | 
			
		||||
          DEFAULT: "hsl(var(--primary))",
 | 
			
		||||
          foreground: "hsl(var(--primary-foreground))",
 | 
			
		||||
        },
 | 
			
		||||
        secondary: {
 | 
			
		||||
          DEFAULT: "hsl(var(--secondary))",
 | 
			
		||||
          foreground: "hsl(var(--secondary-foreground))",
 | 
			
		||||
        },
 | 
			
		||||
        destructive: {
 | 
			
		||||
          DEFAULT: "hsl(var(--destructive))",
 | 
			
		||||
          foreground: "hsl(var(--destructive-foreground))",
 | 
			
		||||
        },
 | 
			
		||||
        muted: {
 | 
			
		||||
          DEFAULT: "hsl(var(--muted))",
 | 
			
		||||
          foreground: "hsl(var(--muted-foreground))",
 | 
			
		||||
        },
 | 
			
		||||
        accent: {
 | 
			
		||||
          DEFAULT: "hsl(var(--accent))",
 | 
			
		||||
          foreground: "hsl(var(--accent-foreground))",
 | 
			
		||||
        },
 | 
			
		||||
        popover: {
 | 
			
		||||
          DEFAULT: "hsl(var(--popover))",
 | 
			
		||||
          foreground: "hsl(var(--popover-foreground))",
 | 
			
		||||
        },
 | 
			
		||||
        card: {
 | 
			
		||||
          DEFAULT: "hsl(var(--card))",
 | 
			
		||||
          foreground: "hsl(var(--card-foreground))",
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
      borderRadius: {
 | 
			
		||||
        lg: "var(--radius)",
 | 
			
		||||
        md: "calc(var(--radius) - 2px)",
 | 
			
		||||
        sm: "calc(var(--radius) - 4px)",
 | 
			
		||||
      },
 | 
			
		||||
      keyframes: {
 | 
			
		||||
        "accordion-down": {
 | 
			
		||||
          from: { height: "0" },
 | 
			
		||||
          to: { height: "var(--radix-accordion-content-height)" },
 | 
			
		||||
        },
 | 
			
		||||
        "accordion-up": {
 | 
			
		||||
          from: { height: "var(--radix-accordion-content-height)" },
 | 
			
		||||
          to: { height: "0" },
 | 
			
		||||
        },
 | 
			
		||||
        "shine": {
 | 
			
		||||
          from: { backgroundPosition: "200% 0" },
 | 
			
		||||
          to: { backgroundPosition: "-200% 0" },
 | 
			
		||||
        },
 | 
			
		||||
        "gradient": {
 | 
			
		||||
          to: {
 | 
			
		||||
            backgroundPosition: "var(--bg-size) 0",
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        "shine-pulse": {
 | 
			
		||||
          "0%": {
 | 
			
		||||
            "background-position": "0% 0%",
 | 
			
		||||
          },
 | 
			
		||||
          "50%": {
 | 
			
		||||
            "background-position": "100% 100%",
 | 
			
		||||
          },
 | 
			
		||||
          "to": {
 | 
			
		||||
            "background-position": "0% 0%",
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        "moveHorizontal": {
 | 
			
		||||
          "0%": {
 | 
			
		||||
            transform: "translateX(-50%) translateY(-10%)",
 | 
			
		||||
          },
 | 
			
		||||
          "50%": {
 | 
			
		||||
            transform: "translateX(50%) translateY(10%)",
 | 
			
		||||
          },
 | 
			
		||||
          "100%": {
 | 
			
		||||
            transform: "translateX(-50%) translateY(-10%)",
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        "moveInCircle": {
 | 
			
		||||
          "0%": {
 | 
			
		||||
            transform: "rotate(0deg)",
 | 
			
		||||
          },
 | 
			
		||||
          "50%": {
 | 
			
		||||
            transform: "rotate(180deg)",
 | 
			
		||||
          },
 | 
			
		||||
          "100%": {
 | 
			
		||||
            transform: "rotate(360deg)",
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
        "moveVertical": {
 | 
			
		||||
          "0%": {
 | 
			
		||||
            transform: "translateY(-50%)",
 | 
			
		||||
          },
 | 
			
		||||
          "50%": {
 | 
			
		||||
            transform: "translateY(50%)",
 | 
			
		||||
          },
 | 
			
		||||
          "100%": {
 | 
			
		||||
            transform: "translateY(-50%)",
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
      animation: {
 | 
			
		||||
        "accordion-down": "accordion-down 0.2s ease-out",
 | 
			
		||||
        "accordion-up": "accordion-up 0.2s ease-out",
 | 
			
		||||
        "shine": "shine 8s ease-in-out infinite",
 | 
			
		||||
        "gradient": "gradient 8s linear infinite",
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
  plugins: [
 | 
			
		||||
    require(`tailwindcss-animated`),
 | 
			
		||||
    require("tailwindcss-animate"),
 | 
			
		||||
    addVariablesForColors,
 | 
			
		||||
    function ({ matchUtilities, theme }: any) {
 | 
			
		||||
      matchUtilities(
 | 
			
		||||
        {
 | 
			
		||||
          "bg-grid": (value: any) => ({
 | 
			
		||||
            backgroundImage: `url("${svgToDataUri(
 | 
			
		||||
              `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32" fill="none" stroke="${value}"><path d="M0 .5H31.5V32"/></svg>`,
 | 
			
		||||
            )}")`,
 | 
			
		||||
          }),
 | 
			
		||||
          "bg-grid-small": (value: any) => ({
 | 
			
		||||
            backgroundImage: `url("${svgToDataUri(
 | 
			
		||||
              `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="8" height="8" fill="none" stroke="${value}"><path d="M0 .5H31.5V32"/></svg>`,
 | 
			
		||||
            )}")`,
 | 
			
		||||
          }),
 | 
			
		||||
          "bg-dot": (value: any) => ({
 | 
			
		||||
            backgroundImage: `url("${svgToDataUri(
 | 
			
		||||
              `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="16" height="16" fill="none"><circle fill="${value}" id="pattern-circle" cx="10" cy="10" r="1.6257413380501518"></circle></svg>`,
 | 
			
		||||
            )}")`,
 | 
			
		||||
          }),
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          values: flattenColorPalette(theme("backgroundColor")),
 | 
			
		||||
          type: "color",
 | 
			
		||||
        },
 | 
			
		||||
      );
 | 
			
		||||
    },
 | 
			
		||||
  ],
 | 
			
		||||
} satisfies Config;
 | 
			
		||||
 | 
			
		||||
function addVariablesForColors({ addBase, theme }: any) {
 | 
			
		||||
  const allColors = flattenColorPalette(theme("colors"));
 | 
			
		||||
  const newVars = Object.fromEntries(
 | 
			
		||||
    Object.entries(allColors).map(([key, val]) => [`--${key}`, val]),
 | 
			
		||||
  );
 | 
			
		||||
  addBase({
 | 
			
		||||
    ":root": newVars,
 | 
			
		||||
  });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default config;
 | 
			
		||||
@@ -18,7 +18,7 @@ $STD apt-get install -y nginx
 | 
			
		||||
msg_ok "Installed Dependencies"
 | 
			
		||||
 | 
			
		||||
fetch_and_deploy_gh_release "booklore" "booklore-app/BookLore"
 | 
			
		||||
JAVA_VERSION="21" setup_java
 | 
			
		||||
JAVA_VERSION="25" setup_java
 | 
			
		||||
NODE_VERSION="22" setup_nodejs
 | 
			
		||||
setup_mariadb
 | 
			
		||||
setup_yq
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ network_check
 | 
			
		||||
update_os
 | 
			
		||||
 | 
			
		||||
msg_info "Installing Dependencies"
 | 
			
		||||
$STD apt-get install -y \
 | 
			
		||||
$STD apt install -y \
 | 
			
		||||
  redis \
 | 
			
		||||
  jq \
 | 
			
		||||
  make
 | 
			
		||||
@@ -48,6 +48,8 @@ mkdir data
 | 
			
		||||
sed -i -e "s|APP_SECRET=.*|APP_SECRET=$(openssl rand -base64 32 | tr -dc 'a-zA-Z0-9' | cut -c1-32)|" \
 | 
			
		||||
  -e "s|DATABASE_URL=.*|DATABASE_URL=postgres://$DB_USER:$DB_PASS@localhost:5432/$DB_NAME|" \
 | 
			
		||||
  -e "s|FILE_UPLOAD_SIZE_LIMIT=.*|FILE_UPLOAD_SIZE_LIMIT=50mb|" \
 | 
			
		||||
  -e "s|DRAWIO_URL=.*|DRAWIO_URL=https://embed.diagrams.net|" \
 | 
			
		||||
  -e "s|DISABLE_TELEMETRY=.*|DISABLE_TELEMETRY=true|" \
 | 
			
		||||
  /opt/docmost/.env
 | 
			
		||||
export NODE_OPTIONS="--max-old-space-size=2048"
 | 
			
		||||
$STD pnpm install
 | 
			
		||||
@@ -76,6 +78,7 @@ motd_ssh
 | 
			
		||||
customize
 | 
			
		||||
 | 
			
		||||
msg_info "Cleaning up"
 | 
			
		||||
$STD apt-get -y autoremove
 | 
			
		||||
$STD apt-get -y autoclean
 | 
			
		||||
$STD apt -y autoremove
 | 
			
		||||
$STD apt -y autoclean
 | 
			
		||||
$STD apt -y clean
 | 
			
		||||
msg_ok "Cleaned"
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ curl -fsSL "https://github.com/glpi-project/glpi/releases/download/10.0.20/glpi-
 | 
			
		||||
$STD tar -xzvf glpi-10.0.20.tgz
 | 
			
		||||
cd /opt/glpi
 | 
			
		||||
$STD php bin/console db:install --db-name=$DB_NAME --db-user=$DB_USER --db-password=$DB_PASS --no-interaction
 | 
			
		||||
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
echo "10.0.20" >/opt/${APPLICATION}_version.txt
 | 
			
		||||
msg_ok "Installed GLPi"
 | 
			
		||||
 | 
			
		||||
msg_info "Setting Downstream file"
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user