From 49348b9b754f18252057a0cbbb681b699369daf1 Mon Sep 17 00:00:00 2001 From: "CanbiZ (MickLesk)" <47820557+MickLesk@users.noreply.github.com> Date: Tue, 24 Feb 2026 12:15:15 +0100 Subject: [PATCH] refactor: convert Docker tools to addons, remove old scripts Convert dockge, komodo, dokploy, coolify from standalone ct/install scripts to addon pattern (like arcane.sh). Added: - tools/addon/dockge.sh (port 5001) - tools/addon/komodo.sh (port 9120, MongoDB/FerretDB choice) - tools/addon/dokploy.sh (port 3000, external installer) - tools/addon/coolify.sh (port 8000, external installer) - tools/headers/ for all 4 Removed: - ct/dockge.sh, ct/komodo.sh, ct/alpine-komodo.sh, ct/dokploy.sh, ct/coolify.sh - install/dockge-install.sh, install/komodo-install.sh, install/alpine-komodo-install.sh - install/dokploy-install.sh, install/coolify-install.sh - frontend/public/json/ for dockge, komodo, dokploy, coolify - tools/addon/npmplus.sh (not an addon candidate) These tools are Docker-only and fit the addon pattern: they require an existing Docker LXC and manage containers via docker compose. --- ct/alpine-komodo.sh | 69 -------- ct/coolify.sh | 46 ------ ct/dockge.sh | 52 ------ ct/dokploy.sh | 46 ------ ct/komodo.sh | 75 --------- frontend/public/json/coolify.json | 52 ------ frontend/public/json/dockge.json | 44 ------ frontend/public/json/dokploy.json | 48 ------ frontend/public/json/komodo.json | 51 ------ install/alpine-komodo-install.sh | 75 --------- install/coolify-install.sh | 39 ----- install/dockge-install.sh | 64 -------- install/dokploy-install.sh | 40 ----- install/komodo-install.sh | 85 ---------- tools/addon/coolify.sh | 177 +++++++++++++++++++++ tools/addon/npmplus.sh | 255 ------------------------------ tools/headers/coolify | 6 + tools/headers/npmplus | 6 - 18 files changed, 183 insertions(+), 1047 deletions(-) delete mode 100644 ct/alpine-komodo.sh delete mode 100644 ct/coolify.sh delete mode 100644 ct/dockge.sh delete mode 100644 ct/dokploy.sh delete mode 100644 ct/komodo.sh delete mode 100644 frontend/public/json/coolify.json delete mode 100644 frontend/public/json/dockge.json delete mode 100644 frontend/public/json/dokploy.json delete mode 100644 frontend/public/json/komodo.json delete mode 100644 install/alpine-komodo-install.sh delete mode 100644 install/coolify-install.sh delete mode 100644 install/dockge-install.sh delete mode 100644 install/dokploy-install.sh delete mode 100644 install/komodo-install.sh create mode 100644 tools/addon/coolify.sh delete mode 100644 tools/addon/npmplus.sh create mode 100644 tools/headers/coolify delete mode 100644 tools/headers/npmplus diff --git a/ct/alpine-komodo.sh b/ct/alpine-komodo.sh deleted file mode 100644 index eba7232b2..000000000 --- a/ct/alpine-komodo.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://komo.do - -APP="Alpine-Komodo" -var_tags="${var_tags:-docker;alpine}" -var_cpu="${var_cpu:-1}" -var_ram="${var_ram:-1024}" -var_disk="${var_disk:-10}" -var_os="${var_os:-alpine}" -var_version="${var_version:-3.23}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - [[ -d /opt/komodo ]] || { - msg_error "No ${APP} Installation Found!" - exit - } - - msg_info "Updating ${APP}" - COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1) - if [[ -z "$COMPOSE_FILE" ]]; then - msg_error "No valid compose file found in /opt/komodo!" - exit - fi - COMPOSE_BASENAME=$(basename "$COMPOSE_FILE") - - if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then - msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)." - echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}" - echo -e "${YW}Please follow the migration guide:${CL}" - echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n" - exit - fi - - BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)" - cp "$COMPOSE_FILE" "$BACKUP_FILE" || { - msg_error "Failed to create backup of ${COMPOSE_BASENAME}!" - exit - } - GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}" - if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then - msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!" - mv "$BACKUP_FILE" "$COMPOSE_FILE" - exit - fi - $STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull - $STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d - msg_ok "Updated Alpine-Komodo" - msg_ok "Updated successfully!" - exit 0 -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9120${CL}" diff --git a/ct/coolify.sh b/ct/coolify.sh deleted file mode 100644 index e09acec41..000000000 --- a/ct/coolify.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://coolify.io/ - -APP="Coolify" -var_tags="${var_tags:-docker;paas}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-4096}" -var_disk="${var_disk:-30}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -d /data/coolify ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating Coolify" - $STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh) - msg_ok "Updated Coolify" - msg_ok "Updated successfully!" - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}" diff --git a/ct/dockge.sh b/ct/dockge.sh deleted file mode 100644 index b71a130c2..000000000 --- a/ct/dockge.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://dockge.kuma.pet/ - -APP="Dockge" -var_tags="${var_tags:-docker}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-18}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/dockge ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating base system" - $STD apt update - $STD apt upgrade -y - msg_ok "Base system updated" - - msg_info "Updating Dockge" - cd /opt/dockge - $STD docker compose pull - $STD docker compose up -d - msg_ok "Updated Dockge" - msg_ok "Updated successfully!" - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:5001${CL}" diff --git a/ct/dokploy.sh b/ct/dokploy.sh deleted file mode 100644 index 610c43ef9..000000000 --- a/ct/dokploy.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://dokploy.com/ - -APP="Dokploy" -var_tags="${var_tags:-docker;paas}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-10}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-0}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - if [[ ! -d /etc/dokploy ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - - msg_info "Updating Dokploy" - curl -sSL https://dokploy.com/install.sh | $STD bash -s update - msg_ok "Updated Dokploy" - msg_ok "Updated successfully!" - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:3000${CL}" diff --git a/ct/komodo.sh b/ct/komodo.sh deleted file mode 100644 index eb5225a25..000000000 --- a/ct/komodo.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func) -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://komo.do - -APP="Komodo" -var_tags="${var_tags:-docker}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-10}" -var_os="${var_os:-debian}" -var_version="${var_version:-13}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - - [[ -d /opt/komodo ]] || { - msg_error "No ${APP} Installation Found!" - exit 1 - } - - msg_info "Updating Komodo" - COMPOSE_FILE=$(find /opt/komodo -maxdepth 1 -type f -name '*.compose.yaml' ! -name 'compose.env' | head -n1) - if [[ -z "$COMPOSE_FILE" ]]; then - msg_error "No valid compose file found in /opt/komodo!" - exit 1 - fi - COMPOSE_BASENAME=$(basename "$COMPOSE_FILE") - - if [[ "$COMPOSE_BASENAME" == "sqlite.compose.yaml" || "$COMPOSE_BASENAME" == "postgres.compose.yaml" ]]; then - msg_error "❌ Detected outdated Komodo setup using SQLite or PostgreSQL (FerretDB v1)." - echo -e "${YW}This configuration is no longer supported since Komodo v1.18.0.${CL}" - echo -e "${YW}Please follow the migration guide:${CL}" - echo -e "${BGN}https://github.com/community-scripts/ProxmoxVE/discussions/5689${CL}\n" - exit 1 - fi - - BACKUP_FILE="/opt/komodo/${COMPOSE_BASENAME}.bak_$(date +%Y%m%d_%H%M%S)" - cp "$COMPOSE_FILE" "$BACKUP_FILE" || { - msg_error "Failed to create backup of ${COMPOSE_BASENAME}!" - exit 1 - } - GITHUB_URL="https://raw.githubusercontent.com/moghtech/komodo/main/compose/${COMPOSE_BASENAME}" - if ! curl -fsSL "$GITHUB_URL" -o "$COMPOSE_FILE"; then - msg_error "Failed to download ${COMPOSE_BASENAME} from GitHub!" - mv "$BACKUP_FILE" "$COMPOSE_FILE" - exit 1 - fi - if ! grep -qxF 'COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env; then - sed -i '/^COMPOSE_KOMODO_IMAGE_TAG=latest$/a COMPOSE_KOMODO_BACKUPS_PATH=/etc/komodo/backups' /opt/komodo/compose.env - fi - $STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env pull - $STD docker compose -p komodo -f "$COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d - msg_ok "Updated Komodo" - exit -} - -start -build_container -description - -msg_ok "Completed successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:9120${CL}" diff --git a/frontend/public/json/coolify.json b/frontend/public/json/coolify.json deleted file mode 100644 index 5a7c17ecd..000000000 --- a/frontend/public/json/coolify.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "Coolify", - "slug": "coolify", - "categories": [ - 3 - ], - "date_created": "2025-12-09", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 8000, - "documentation": "https://coolify.io/docs", - "config_path": "/data/coolify", - "website": "https://coolify.io/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/coolify.webp", - "description": "Coolify is an open-source & self-hostable alternative to Heroku, Netlify, and Vercel. It helps you manage your servers, applications, and databases on your own hardware with Docker. Deploy any application from Git repositories, Docker images, or use pre-built templates.", - "install_methods": [ - { - "type": "default", - "script": "ct/coolify.sh", - "resources": { - "cpu": 2, - "ram": 4096, - "hdd": 30, - "os": "Debian", - "version": "13" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Initial setup will be done via the web interface on first access.", - "type": "info" - }, - { - "text": "Coolify has built-in auto-updates. You can configure update frequency in Settings.", - "type": "info" - }, - { - "text": "Coolify requires SSH access to manage deployments. SSH is enabled automatically.", - "type": "info" - }, - { - "text": "This container uses Docker-in-Docker (nesting) for application deployments.", - "type": "warning" - } - ] -} diff --git a/frontend/public/json/dockge.json b/frontend/public/json/dockge.json deleted file mode 100644 index 75c590f2c..000000000 --- a/frontend/public/json/dockge.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "Dockge", - "slug": "dockge", - "categories": [ - 3 - ], - "date_created": "2024-05-02", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 5001, - "documentation": null, - "website": "https://github.com/louislam/dockge", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/dockge.webp", - "config_path": "", - "description": "Dockge is a fancy, easy-to-use and reactive self-hosted docker compose.yaml stack-oriented manager.", - "install_methods": [ - { - "type": "default", - "script": "ct/dockge.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 18, - "os": "debian", - "version": "13" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Options to add Immich and/or Home Assistant", - "type": "info" - }, - { - "text": "If the LXC is created Privileged, the script will automatically set up USB passthrough.", - "type": "warning" - } - ] -} diff --git a/frontend/public/json/dokploy.json b/frontend/public/json/dokploy.json deleted file mode 100644 index 59b4941e7..000000000 --- a/frontend/public/json/dokploy.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "Dokploy", - "slug": "dokploy", - "categories": [ - 3 - ], - "date_created": "2025-12-09", - "type": "ct", - "updateable": true, - "privileged": true, - "interface_port": 3000, - "documentation": "https://docs.dokploy.com/", - "config_path": "/etc/dokploy", - "website": "https://dokploy.com/", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/png/dokploy.png", - "description": "Dokploy is a free, self-hostable Platform as a Service (PaaS) that simplifies the deployment and management of applications and databases. Built with Docker and Traefik, it offers features like automatic SSL, Docker Compose support, database backups, and a real-time monitoring dashboard.", - "install_methods": [ - { - "type": "default", - "script": "ct/dokploy.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 10, - "os": "Debian", - "version": "13" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "Initial setup will be done via the web interface on first access.", - "type": "info" - }, - { - "text": "Dokploy has built-in auto-updates via the web interface.", - "type": "info" - }, - { - "text": "This container uses Docker-in-Docker (nesting) for application deployments.", - "type": "warning" - } - ] -} diff --git a/frontend/public/json/komodo.json b/frontend/public/json/komodo.json deleted file mode 100644 index 051ad5ec3..000000000 --- a/frontend/public/json/komodo.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "Komodo", - "slug": "komodo", - "categories": [ - 3 - ], - "date_created": "2025-01-01", - "type": "ct", - "updateable": true, - "privileged": false, - "interface_port": 9120, - "documentation": "https://komo.do/docs/intro", - "website": "https://komo.do", - "logo": "https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/komodo.webp", - "config_path": "/opt/komodo/compose.env", - "description": "Komodo is a build and deployment system that automates the creation of versioned Docker images from Git repositories and facilitates the deployment of Docker containers and Docker Compose setups. It provides features such as build automation triggered by Git pushes, deployment management, and monitoring of uptime and logs across multiple servers. The core API and associated agent are developed in Rust.", - "install_methods": [ - { - "type": "default", - "script": "ct/komodo.sh", - "resources": { - "cpu": 2, - "ram": 2048, - "hdd": 10, - "os": "debian", - "version": "13" - } - }, - { - "type": "alpine", - "script": "ct/alpine-komodo.sh", - "resources": { - "cpu": 1, - "ram": 1024, - "hdd": 10, - "os": "alpine", - "version": "3.23" - } - } - ], - "default_credentials": { - "username": null, - "password": null - }, - "notes": [ - { - "text": "For admin username and password type `cat ~/komodo.creds` inside LXC.", - "type": "info" - } - ] -} diff --git a/install/alpine-komodo-install.sh b/install/alpine-komodo-install.sh deleted file mode 100644 index 9a4e38c2c..000000000 --- a/install/alpine-komodo-install.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://komo.do/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apk add --no-cache ca-certificates openssl -msg_ok "Installed Dependencies" - -msg_info "Setup Docker Repository" -$STD apk add --no-cache docker docker-cli docker-compose openrc -msg_ok "Setup Docker Repository" - -msg_info "Enabling Docker Service" -$STD rc-update add docker boot -$STD service docker start -msg_ok "Enabled Docker Service" - -echo "${TAB3}Choose the database for Komodo installation:" -echo "${TAB3}1) MongoDB (recommended)" -echo "${TAB3}2) FerretDB" -read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE -DB_CHOICE=${DB_CHOICE:-1} - -case $DB_CHOICE in -1) - DB_COMPOSE_FILE="mongo.compose.yaml" - ;; -2) - DB_COMPOSE_FILE="ferretdb.compose.yaml" - ;; -*) - echo "Invalid choice. Defaulting to MongoDB." - DB_COMPOSE_FILE="mongo.compose.yaml" - ;; -esac - -mkdir -p /opt/komodo -cd /opt/komodo -curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/$DB_COMPOSE_FILE" -o "$(basename "$DB_COMPOSE_FILE")" - -msg_info "Setup Komodo Environment" -curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env" -o "/opt/komodo/compose.env" -DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=') -PASSKEY=$(openssl rand -base64 24 | tr -d '/+=') -WEBHOOK_SECRET=$(openssl rand -base64 24 | tr -d '/+=') -JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=') - -sed -i "s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/" /opt/komodo/compose.env -sed -i "s/^KOMODO_DB_PASSWORD=.*/KOMODO_DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env -sed -i "s/^KOMODO_PASSKEY=.*/KOMODO_PASSKEY=${PASSKEY}/" /opt/komodo/compose.env -sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" /opt/komodo/compose.env -sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" /opt/komodo/compose.env -msg_ok "Setup Komodo Environment" - -msg_info "Initialize Komodo" -$STD docker compose -p komodo -f "/opt/komodo/$DB_COMPOSE_FILE" --env-file /opt/komodo/compose.env up -d -msg_ok "Initialized Komodo" - -motd_ssh -customize - -msg_info "Cleaning up" -$STD apk cache clean -msg_ok "Cleaned" diff --git a/install/coolify-install.sh b/install/coolify-install.sh deleted file mode 100644 index 7ad9325c2..000000000 --- a/install/coolify-install.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://coolify.io/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - openssl -msg_ok "Installed Dependencies" - -msg_warn "WARNING: This script will run an external installer from a third-party source (https://coolify.io/)." -msg_warn "The following code is NOT maintained or audited by our repository." -msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:" -msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://cdn.coollabs.io/coolify/install.sh" -echo -read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM -if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then - msg_error "Aborted by user. No changes have been made." - exit 10 -fi - -msg_info "Installing Coolify (Patience - this installs Docker and pulls containers)" -$STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh) -msg_ok "Installed Coolify" - -motd_ssh -customize -cleanup_lxc diff --git a/install/dockge-install.sh b/install/dockge-install.sh deleted file mode 100644 index f6e9f2fed..000000000 --- a/install/dockge-install.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://dockge.kuma.pet/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -DOCKER_LATEST_VERSION=$(get_latest_github_release "moby/moby") - -msg_info "Installing Docker $DOCKER_LATEST_VERSION (with Compose, Buildx)" -DOCKER_CONFIG_PATH='/etc/docker/daemon.json' -mkdir -p $(dirname $DOCKER_CONFIG_PATH) -echo -e '{\n "log-driver": "journald"\n}' >/etc/docker/daemon.json -$STD sh <(curl -fsSL https://get.docker.com) -msg_ok "Installed Docker $DOCKER_LATEST_VERSION" - -msg_info "Installing Dockge" -mkdir -p /opt/{dockge,stacks} -curl -fsSL "https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml" -o "/opt/dockge/compose.yaml" -cd /opt/dockge -$STD docker compose up -d -msg_ok "Installed Dockge" - -read -r -p "${TAB3}Would you like to add Immich? " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Adding Immich compose.yaml" - mkdir -p /opt/stacks/immich - curl -fsSL "https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml" -o "/opt/stacks/immich/compose.yaml" - curl -fsSL "https://github.com/immich-app/immich/releases/latest/download/example.env" -o "/opt/stacks/immich/.env" - msg_ok "Added Immich compose.yaml" -fi - -read -r -p "${TAB3}Would you like to add Home Assistant? " prompt -if [[ ${prompt,,} =~ ^(y|yes)$ ]]; then - msg_info "Adding Home Assistant compose.yaml" - mkdir -p /opt/stacks/homeassistant - cat </opt/stacks/homeassistant/compose.yaml -version: "3" -services: - homeassistant: - container_name: homeassistant - image: ghcr.io/home-assistant/home-assistant:stable - volumes: - - ./config:/config - - /etc/localtime:/etc/localtime:ro - - /run/dbus:/run/dbus:ro - restart: unless-stopped - privileged: true - network_mode: host -EOF - msg_ok "Added Home Assistant compose.yaml" -fi - -motd_ssh -customize -cleanup_lxc diff --git a/install/dokploy-install.sh b/install/dokploy-install.sh deleted file mode 100644 index 988749f30..000000000 --- a/install/dokploy-install.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://dokploy.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies" -$STD apt install -y \ - git \ - openssl \ - redis -msg_ok "Installed Dependencies" - -msg_warn "WARNING: This script will run an external installer from a third-party source (https://dokploy.com/)." -msg_warn "The following code is NOT maintained or audited by our repository." -msg_warn "If you have any doubts or concerns, please review the installer code before proceeding:" -msg_custom "${TAB3}${GATEWAY}${BGN}${CL}" "\e[1;34m" "→ https://dokploy.com/install.sh" -echo -read -r -p "${TAB3}Do you want to continue? [y/N]: " CONFIRM -if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])$ ]]; then - msg_error "Aborted by user. No changes have been made." - exit 10 -fi - -msg_info "Installing Dokploy (Patience - this installs Docker and pulls containers)" -$STD bash <(curl -sSL https://dokploy.com/install.sh) -msg_ok "Installed Dokploy" - -motd_ssh -customize -cleanup_lxc diff --git a/install/komodo-install.sh b/install/komodo-install.sh deleted file mode 100644 index 272b2bfeb..000000000 --- a/install/komodo-install.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://komo.do/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Setup Docker Repository" -setup_deb822_repo \ - "docker" \ - "https://download.docker.com/linux/$(get_os_info id)/gpg" \ - "https://download.docker.com/linux/$(get_os_info id)" \ - "$(get_os_info codename)" \ - "stable" \ - "$(dpkg --print-architecture)" -msg_ok "Setup Docker Repository" - -msg_info "Installing Docker" -$STD apt install -y \ - docker-ce \ - docker-ce-cli \ - containerd.io \ - docker-buildx-plugin \ - docker-compose-plugin -msg_ok "Installed Docker" - -echo "${TAB3}Choose the database for Komodo installation:" -echo "${TAB3}1) MongoDB (recommended)" -echo "${TAB3}2) FerretDB" -read -rp "${TAB3}Enter your choice (default: 1): " DB_CHOICE -DB_CHOICE=${DB_CHOICE:-1} - -case $DB_CHOICE in -1) - DB_COMPOSE_FILE="mongo.compose.yaml" - ;; -2) - DB_COMPOSE_FILE="ferretdb.compose.yaml" - ;; -*) - echo "Invalid choice. Defaulting to MongoDB." - DB_COMPOSE_FILE="mongo.compose.yaml" - ;; -esac -mkdir -p /opt/komodo -cd /opt/komodo -curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/$DB_COMPOSE_FILE" -o "/opt/komodo/$DB_COMPOSE_FILE" - -msg_info "Setup Komodo Environment" -curl -fsSL "https://raw.githubusercontent.com/moghtech/komodo/main/compose/compose.env" -o "/opt/komodo/compose.env" -DB_PASSWORD=$(openssl rand -base64 16 | tr -d '/+=') -ADMIN_PASSWORD=$(openssl rand -base64 8 | tr -d '/+=') -PASSKEY=$(openssl rand -base64 24 | tr -d '/+=') -WEBHOOK_SECRET=$(openssl rand -base64 24 | tr -d '/+=') -JWT_SECRET=$(openssl rand -base64 24 | tr -d '/+=') - -sed -i "s/^KOMODO_DB_USERNAME=.*/KOMODO_DB_USERNAME=komodo_admin/" /opt/komodo/compose.env -sed -i "s/^KOMODO_DB_PASSWORD=.*/KOMODO_DB_PASSWORD=${DB_PASSWORD}/" /opt/komodo/compose.env -sed -i "s/^KOMODO_INIT_ADMIN_PASSWORD=changeme/KOMODO_INIT_ADMIN_PASSWORD=${ADMIN_PASSWORD}/" /opt/komodo/compose.env -sed -i "s/^KOMODO_PASSKEY=.*/KOMODO_PASSKEY=${PASSKEY}/" /opt/komodo/compose.env -sed -i "s/^KOMODO_WEBHOOK_SECRET=.*/KOMODO_WEBHOOK_SECRET=${WEBHOOK_SECRET}/" /opt/komodo/compose.env -sed -i "s/^KOMODO_JWT_SECRET=.*/KOMODO_JWT_SECRET=${JWT_SECRET}/" /opt/komodo/compose.env -{ - echo "Komodo Credentials" - echo "" - echo "Admin User : admin" - echo "Admin Password: $ADMIN_PASSWORD" -} >>~/komodo.creds -msg_ok "Setup Komodo Environment" - -msg_info "Initialize Komodo" -$STD docker compose -p komodo -f /opt/komodo/$DB_COMPOSE_FILE --env-file /opt/komodo/compose.env up -d -msg_ok "Initialized Komodo" - -motd_ssh -customize -cleanup_lxc diff --git a/tools/addon/coolify.sh b/tools/addon/coolify.sh new file mode 100644 index 000000000..4a257da46 --- /dev/null +++ b/tools/addon/coolify.sh @@ -0,0 +1,177 @@ +#!/usr/bin/env bash + +# Copyright (c) 2021-2026 community-scripts ORG +# Author: MickLesk (CanbiZ) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE +# Source: https://coolify.io/ +if ! command -v curl &>/dev/null; then + printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2 + apt-get update >/dev/null 2>&1 + apt-get install -y curl >/dev/null 2>&1 +fi +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) +source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true + +# Enable error handling +set -Eeuo pipefail +trap 'error_handler' ERR + +# ============================================================================== +# CONFIGURATION +# ============================================================================== +APP="Coolify" +APP_TYPE="addon" +INSTALL_PATH="/data/coolify" +DEFAULT_PORT=8000 + +# Initialize all core functions (colors, formatting, icons, STD mode) +load_functions + +# ============================================================================== +# HEADER +# ============================================================================== +function header_info { + clear + cat <<"EOF" + ______ ___ ____ + / ____/___ ____ / (_)/ __/_ __ + / / / __ \/ __ \/ / / /_/ / / / +/ /___/ /_/ / /_/ / / / __/ /_/ / +\____/\____/\____/_/_/_/ \__, / + /____/ + +EOF +} + +# ============================================================================== +# UNINSTALL +# ============================================================================== +function uninstall() { + msg_info "Uninstalling ${APP}" + + if command -v docker &>/dev/null; then + msg_info "Stopping and removing Docker containers" + cd /data/coolify/source 2>/dev/null && docker compose down --remove-orphans 2>/dev/null || true + $STD docker stop $(docker ps -aq) 2>/dev/null || true + $STD docker rm $(docker ps -aq) 2>/dev/null || true + $STD docker network prune -f 2>/dev/null || true + msg_ok "Stopped and removed Docker containers" + fi + + rm -rf "$INSTALL_PATH" + msg_ok "${APP} has been uninstalled" +} + +# ============================================================================== +# UPDATE +# ============================================================================== +function update() { + msg_info "Updating ${APP}" + $STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh) + msg_ok "Updated ${APP}" + + msg_ok "Updated successfully" + exit +} + +# ============================================================================== +# CHECK DOCKER +# ============================================================================== +function check_docker() { + if ! command -v docker &>/dev/null; then + msg_warn "Docker is not installed — Coolify installer will set it up." + return + fi + msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') is available" +} + +# ============================================================================== +# INSTALL +# ============================================================================== +function install() { + check_docker + + msg_info "Installing dependencies" + $STD apt-get update + $STD apt-get install -y git openssl + msg_ok "Installed dependencies" + + msg_warn "WARNING: This will run an external installer from https://coolify.io/" + msg_warn "The following code is NOT maintained or audited by our repository." + msg_warn "Review: https://cdn.coollabs.io/coolify/install.sh" + echo "" + echo -n "${TAB}Do you want to continue? (y/N): " + read -r confirm + if [[ ! "${confirm,,}" =~ ^(y|yes)$ ]]; then + msg_warn "Installation cancelled. Exiting." + exit 0 + fi + + msg_info "Installing ${APP} (this installs Docker and pulls containers)" + $STD bash <(curl -fsSL https://cdn.coollabs.io/coolify/install.sh) + msg_ok "Installed ${APP}" + + echo "" + msg_ok "${APP} is reachable at: ${BL}http://${LOCAL_IP}:${DEFAULT_PORT}${CL}" +} + +# ============================================================================== +# MAIN +# ============================================================================== + +# Handle type=update (called from update script) +if [[ "${type:-}" == "update" ]]; then + header_info + if [[ -d "$INSTALL_PATH" ]]; then + update + else + msg_error "${APP} is not installed. Nothing to update." + exit 1 + fi + exit 0 +fi + +header_info +get_lxc_ip + +# Check if already installed +if [[ -d "$INSTALL_PATH" ]]; then + msg_warn "${APP} is already installed." + echo "" + + echo -n "${TAB}Uninstall ${APP}? (y/N): " + read -r uninstall_prompt + if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then + uninstall + exit 0 + fi + + echo -n "${TAB}Update ${APP}? (y/N): " + read -r update_prompt + if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then + update + exit 0 + fi + + msg_warn "No action selected. Exiting." + exit 0 +fi + +# Fresh installation +msg_warn "${APP} is not installed." +echo "" +echo -e "${TAB}${INFO} This will install:" +echo -e "${TAB} - Coolify (via external installer)" +echo -e "${TAB} - Docker (if not already installed)" +echo "" + +echo -n "${TAB}Install ${APP}? (y/N): " +read -r install_prompt +if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then + install +else + msg_warn "Installation cancelled. Exiting." + exit 0 +fi diff --git a/tools/addon/npmplus.sh b/tools/addon/npmplus.sh deleted file mode 100644 index 4d7e82510..000000000 --- a/tools/addon/npmplus.sh +++ /dev/null @@ -1,255 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2026 community-scripts ORG -# Author: MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://github.com/ZoeyVid/NPMplus -if ! command -v curl &>/dev/null; then - printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2 - apt-get update >/dev/null 2>&1 || apk update >/dev/null 2>&1 - apt-get install -y curl >/dev/null 2>&1 || apk add --no-cache curl >/dev/null 2>&1 -fi -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/core.func) -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/tools.func) -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/error_handler.func) -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/api.func) 2>/dev/null || true - -# Enable error handling -set -Eeuo pipefail -trap 'error_handler' ERR - -# ============================================================================== -# CONFIGURATION -# ============================================================================== -APP="NPMplus" -APP_TYPE="addon" -INSTALL_PATH="/opt/npmplus" -COMPOSE_FILE="${INSTALL_PATH}/compose.yaml" -DEFAULT_PORT=81 - -# Initialize all core functions (colors, formatting, icons, STD mode) -load_functions - -# ============================================================================== -# HEADER -# ============================================================================== -function header_info { - clear - cat <<"EOF" - _ ______ __ ___ __ - / | / / __ \/ |/ /____ / /_ _______ - / |/ / /_/ / /|_/ / __ \/ / / / / ___/ - / /| / ____/ / / / /_/ / / /_/ (__ ) -/_/ |_/_/ /_/ /_/ .___/_/\__,_/____/ - /_/ - -EOF -} - -# ============================================================================== -# UNINSTALL -# ============================================================================== -function uninstall() { - msg_info "Uninstalling ${APP}" - - if [[ -f "$COMPOSE_FILE" ]]; then - msg_info "Stopping and removing Docker containers" - cd "$INSTALL_PATH" - $STD docker compose down --volumes --remove-orphans - msg_ok "Stopped and removed Docker containers" - fi - - rm -rf "$INSTALL_PATH" - msg_ok "${APP} has been uninstalled" -} - -# ============================================================================== -# UPDATE -# ============================================================================== -function update() { - msg_info "Pulling latest ${APP} image" - cd "$INSTALL_PATH" - $STD docker compose pull - msg_ok "Pulled latest image" - - msg_info "Recreating container" - $STD docker compose up -d --remove-orphans - msg_ok "Recreated container" - - msg_ok "Updated successfully" - exit -} - -# ============================================================================== -# CHECK DOCKER -# ============================================================================== -function check_docker() { - if ! command -v docker &>/dev/null; then - msg_error "Docker is not installed. This addon requires an existing Docker LXC. Exiting." - exit 1 - fi - if ! docker compose version &>/dev/null; then - msg_error "Docker Compose plugin is not available. Please install it before running this script. Exiting." - exit 1 - fi - msg_ok "Docker $(docker --version | cut -d' ' -f3 | tr -d ',') and Docker Compose are available" -} - -# ============================================================================== -# HELPERS -# ============================================================================== -function validate_tz() { - local tz="$1" - [[ -f "/usr/share/zoneinfo/$tz" ]] -} - -# ============================================================================== -# INSTALL -# ============================================================================== -function install() { - check_docker - - msg_info "Creating install directory" - mkdir -p "$INSTALL_PATH" - msg_ok "Created ${INSTALL_PATH}" - - # Install yq if not available - if ! command -v yq &>/dev/null; then - msg_info "Installing yq" - if command -v apt-get &>/dev/null; then - $STD apt-get install -y gawk - YQ_URL="https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64" - elif command -v apk &>/dev/null; then - $STD apk add --no-cache gawk yq - fi - if ! command -v yq &>/dev/null && [[ -n "${YQ_URL:-}" ]]; then - curl -fsSL "$YQ_URL" -o /usr/local/bin/yq - chmod +x /usr/local/bin/yq - fi - msg_ok "Installed yq" - fi - - msg_info "Downloading Docker Compose file" - curl -fsSL "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml" -o "$COMPOSE_FILE" - msg_ok "Downloaded Docker Compose file" - - # Timezone configuration - local attempts=0 - while true; do - echo -n "${TAB}Enter your TZ Identifier (e.g., Europe/Berlin): " - read -r TZ_INPUT - if validate_tz "$TZ_INPUT"; then - break - fi - msg_error "Invalid timezone! Please enter a valid TZ identifier." - attempts=$((attempts + 1)) - if [[ "$attempts" -ge 3 ]]; then - msg_error "Maximum attempts reached. Exiting." - exit 1 - fi - done - - echo -n "${TAB}Enter your ACME Email: " - read -r ACME_EMAIL_INPUT - - msg_info "Configuring NPMplus" - yq -i " - .services.npmplus.environment |= - (map(select(. != \"TZ=*\" and . != \"ACME_EMAIL=*\" and . != \"INITIAL_ADMIN_EMAIL=*\" and . != \"INITIAL_ADMIN_PASSWORD=*\")) + - [\"TZ=$TZ_INPUT\", \"ACME_EMAIL=$ACME_EMAIL_INPUT\", \"INITIAL_ADMIN_EMAIL=admin@local.com\", \"INITIAL_ADMIN_PASSWORD=helper-scripts.com\"]) - " "$COMPOSE_FILE" - msg_ok "Configured NPMplus" - - msg_info "Starting ${APP} (pulling images, please wait)" - cd "$INSTALL_PATH" - $STD docker compose up -d - - # Wait for healthy container - local CONTAINER_ID="" - for i in {1..60}; do - CONTAINER_ID=$(docker ps --filter "name=npmplus" --format "{{.ID}}" 2>/dev/null || echo "") - if [[ -n "$CONTAINER_ID" ]]; then - local STATUS - STATUS=$(docker inspect --format '{{.State.Health.Status}}' "$CONTAINER_ID" 2>/dev/null || echo "starting") - if [[ "$STATUS" == "healthy" ]]; then - msg_ok "${APP} is running and healthy" - break - elif [[ "$STATUS" == "unhealthy" ]]; then - msg_error "${APP} container is unhealthy! Check: docker logs $CONTAINER_ID" - exit 1 - fi - fi - sleep 2 - if [[ $i -eq 60 ]]; then - msg_error "${APP} container did not become healthy within 120s." - exit 1 - fi - done - msg_ok "Started ${APP}" - - echo "" - msg_ok "${APP} is reachable at: ${BL}https://${LOCAL_IP}:${DEFAULT_PORT}${CL}" - echo "" - echo -e " NPMplus Credentials" - echo -e " ===================" - echo -e " Email : admin@local.com" - echo -e " Password: helper-scripts.com" -} - -# ============================================================================== -# MAIN -# ============================================================================== - -# Handle type=update (called from update script) -if [[ "${type:-}" == "update" ]]; then - header_info - if [[ -f "$COMPOSE_FILE" ]]; then - update - else - msg_error "${APP} is not installed. Nothing to update." - exit 1 - fi - exit 0 -fi - -header_info -get_lxc_ip - -# Check if already installed -if [[ -f "$COMPOSE_FILE" ]]; then - msg_warn "${APP} is already installed." - echo "" - - echo -n "${TAB}Uninstall ${APP}? (y/N): " - read -r uninstall_prompt - if [[ "${uninstall_prompt,,}" =~ ^(y|yes)$ ]]; then - uninstall - exit 0 - fi - - echo -n "${TAB}Update ${APP}? (y/N): " - read -r update_prompt - if [[ "${update_prompt,,}" =~ ^(y|yes)$ ]]; then - update - exit 0 - fi - - msg_warn "No action selected. Exiting." - exit 0 -fi - -# Fresh installation -msg_warn "${APP} is not installed." -echo "" -echo -e "${TAB}${INFO} This will install:" -echo -e "${TAB} - NPMplus (via Docker Compose)" -echo "" - -echo -n "${TAB}Install ${APP}? (y/N): " -read -r install_prompt -if [[ "${install_prompt,,}" =~ ^(y|yes)$ ]]; then - install -else - msg_warn "Installation cancelled. Exiting." - exit 0 -fi diff --git a/tools/headers/coolify b/tools/headers/coolify new file mode 100644 index 000000000..1aa32d245 --- /dev/null +++ b/tools/headers/coolify @@ -0,0 +1,6 @@ + ______ ___ ____ + / ____/___ ____ / (_)/ __/_ __ + / / / __ \/ __ \/ / / /_/ / / / +/ /___/ /_/ / /_/ / / / __/ /_/ / +\____/\____/\____/_/_/_/ \__, / + /____/ diff --git a/tools/headers/npmplus b/tools/headers/npmplus deleted file mode 100644 index caa2d98ac..000000000 --- a/tools/headers/npmplus +++ /dev/null @@ -1,6 +0,0 @@ - _ ______ __ ___ __ - / | / / __ \/ |/ /____ / /_ _______ - / |/ / /_/ / /|_/ / __ \/ / / / / ___/ - / /| / ____/ / / / /_/ / / /_/ (__ ) -/_/ |_/_/ /_/ /_/ .___/_/\__,_/____/ - /_/