├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── config.yml │ └── feature_request.yml ├── FUNDING.yml ├── cspell.json ├── workflows │ ├── orchestrator-labeler.yaml │ ├── build-image-on-autoupdate.yaml │ ├── orchestrator-docs.yaml │ ├── orchestrator-automerge.yaml │ ├── orchestrator-autofix.yaml │ └── orchestrator-intake.yaml ├── PULL_REQUEST_TEMPLATE.md ├── labeler.yml ├── CONTRIBUTING.md └── paths-filter.yml ├── whatsapp ├── rootfs │ └── etc │ │ └── s6-overlay │ │ └── s6-rc.d │ │ ├── user │ │ └── contents.d │ │ │ └── whatsapp │ │ └── whatsapp │ │ ├── dependencies.d │ │ └── base │ │ ├── type │ │ └── run ├── .gitignore ├── app │ ├── requirements.txt │ └── package.json ├── icon.png ├── logo.png ├── build.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── CHANGELOG.md ├── DOCS.md ├── Dockerfile └── README.md ├── .unsupported ├── freenom-dns-updater │ ├── requirements.txt │ ├── icon.png │ ├── build.yaml │ ├── translations │ │ ├── en.yaml │ │ └── de.yaml │ ├── run.sh │ ├── config.yaml │ └── Dockerfile ├── xqrepack │ ├── icon.png │ ├── build.yaml │ ├── translations │ │ ├── en.yaml │ │ └── de.yaml │ ├── config.yaml │ ├── Dockerfile │ └── run.sh ├── tuya-convert │ ├── icon.png │ ├── build.yaml │ ├── translations │ │ ├── en.yaml │ │ └── de.yaml │ ├── config.yaml │ ├── Dockerfile │ ├── start.sh │ ├── CHANGELOG.md │ └── README.md └── bt-mqtt-gateway │ ├── icon.png │ ├── build.yaml │ ├── translations │ ├── en.yaml │ └── de.yaml │ ├── config.yaml │ ├── start.sh │ └── Dockerfile ├── apache2 ├── icon.png ├── build.yaml ├── config.yaml ├── translations │ ├── en.yaml │ └── de.yaml └── Dockerfile ├── openssl ├── icon.png ├── build.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── Dockerfile ├── config.yaml ├── run.sh └── README.md ├── tado_aa ├── icon.png ├── build.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── run.sh ├── Dockerfile ├── LICENSE.txt └── README.md ├── wiki.js ├── icon.png ├── build.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── README.md └── run.sh ├── .prettierignore ├── ShieldDNS ├── icon.png ├── logo.png ├── www │ └── logo.png ├── Dockerfile ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── README.md └── CHANGELOG.md ├── netboot-xyz ├── root │ ├── donate.txt │ ├── etc │ │ ├── services.d │ │ │ ├── nginx │ │ │ │ └── run │ │ │ ├── webapp │ │ │ │ └── run │ │ │ ├── dnsmasq │ │ │ │ └── run │ │ │ └── tftp │ │ │ │ └── run │ │ └── cont-init.d │ │ │ ├── 20-nginx-config │ │ │ ├── 36-download-menus │ │ │ └── 10-prerequisite.sh │ └── defaults │ │ ├── dnsmasq.conf │ │ └── nginx.conf ├── icon.png ├── build.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── Dockerfile └── README.md ├── solumati ├── icon.png ├── build.yaml ├── config.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── nginx.conf ├── Dockerfile ├── README.md └── CHANGELOG.md ├── ShieldFile ├── icon.png ├── logo.png ├── build.json ├── Dockerfile ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── CHANGELOG.md ├── run.sh └── README.md ├── matterbridge ├── icon.png ├── build.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── run.sh ├── Dockerfile └── README.md ├── .vscode └── settings.json ├── apache2-minimal ├── icon.png ├── build.yaml ├── Dockerfile ├── config.yaml ├── translations │ ├── en.yaml │ └── de.yaml └── README.md ├── pterodactyl-panel ├── icon.png ├── root │ └── etc │ │ ├── php81 │ │ ├── php-fpm.conf │ │ └── php-fpm.d │ │ │ └── www.conf │ │ └── nginx │ │ ├── templates │ │ ├── http.conf │ │ └── https.conf │ │ └── nginx.conf ├── build.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── Dockerfile └── README.md ├── pterodactyl-wings ├── icon.png ├── build.yaml ├── translations │ ├── de.yaml │ └── en.yaml ├── run.sh ├── config.yaml ├── Dockerfile └── README.md ├── switch_lan_play ├── icon.png ├── translations │ ├── de.yaml │ └── en.yaml ├── build.yaml ├── config.yaml ├── run.sh ├── Dockerfile └── README.md ├── _images ├── apache2 │ └── ingress.png └── switch_lan_play │ └── screenshot.png ├── bash_script_executer ├── icon.png ├── build.yaml ├── Dockerfile ├── config.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── README.md └── run.sh ├── switch_lan_play_server ├── icon.png ├── build.yaml ├── translations │ ├── en.yaml │ └── de.yaml ├── config.yaml ├── Dockerfile ├── run.sh └── README.md ├── apache2-minimal-mariadb ├── icon.png ├── build.yaml ├── Dockerfile ├── config.yaml ├── translations │ ├── en.yaml │ └── de.yaml └── README.md ├── homeassistant-test-instance ├── icon.png ├── logo.png ├── Dockerfile ├── CHANGELOG.md ├── translations │ └── en.yaml ├── config.yaml └── README.md ├── repository.json ├── AegisBot ├── build.yaml ├── CHANGELOG.md ├── nginx.conf ├── config.yaml └── README.md ├── .yamllint ├── .prettierrc ├── .gitignore ├── .scripts ├── restore_backups.py ├── check_compliance.py ├── trigger_edge_updates.py ├── update_base_images.sh ├── sync_templates.py ├── auto_update.py └── move_unsupported.py └── README.MD /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | .github/* @faserf 2 | -------------------------------------------------------------------------------- /whatsapp/rootfs/etc/s6-overlay/s6-rc.d/user/contents.d/whatsapp: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /whatsapp/rootfs/etc/s6-overlay/s6-rc.d/whatsapp/dependencies.d/base: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /whatsapp/rootfs/etc/s6-overlay/s6-rc.d/whatsapp/type: -------------------------------------------------------------------------------- 1 | longrun 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | --- 2 | blank_issues_enabled: false 3 | -------------------------------------------------------------------------------- /.unsupported/freenom-dns-updater/requirements.txt: -------------------------------------------------------------------------------- 1 | freenom-dns-updater==1.2.9 -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | --- 2 | github: faserf 3 | custom: https://paypal.me/FaserF 4 | -------------------------------------------------------------------------------- /apache2/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/apache2/icon.png -------------------------------------------------------------------------------- /openssl/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/openssl/icon.png -------------------------------------------------------------------------------- /tado_aa/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/tado_aa/icon.png -------------------------------------------------------------------------------- /whatsapp/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | auth_info_baileys/ 3 | .DS_Store 4 | *.log 5 | -------------------------------------------------------------------------------- /whatsapp/app/requirements.txt: -------------------------------------------------------------------------------- 1 | playwright==1.57.0 2 | fastapi 3 | uvicorn[standard] 4 | -------------------------------------------------------------------------------- /wiki.js/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/wiki.js/icon.png -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | 2 | node_modules 3 | dist 4 | build 5 | .git 6 | __pycache__ 7 | *.pyc 8 | -------------------------------------------------------------------------------- /ShieldDNS/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/ShieldDNS/icon.png -------------------------------------------------------------------------------- /ShieldDNS/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/ShieldDNS/logo.png -------------------------------------------------------------------------------- /netboot-xyz/root/donate.txt: -------------------------------------------------------------------------------- 1 | netboot.xyz: https://opencollective.com/netbootxyz/donate 2 | -------------------------------------------------------------------------------- /solumati/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/solumati/icon.png -------------------------------------------------------------------------------- /whatsapp/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/whatsapp/icon.png -------------------------------------------------------------------------------- /whatsapp/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/whatsapp/logo.png -------------------------------------------------------------------------------- /wiki.js/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 4 | -------------------------------------------------------------------------------- /ShieldFile/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/ShieldFile/icon.png -------------------------------------------------------------------------------- /ShieldFile/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/ShieldFile/logo.png -------------------------------------------------------------------------------- /matterbridge/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/matterbridge/icon.png -------------------------------------------------------------------------------- /netboot-xyz/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/netboot-xyz/icon.png -------------------------------------------------------------------------------- /ShieldDNS/www/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/ShieldDNS/www/logo.png -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.associations": { 3 | "*.yaml": "home-assistant" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /apache2-minimal/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/apache2-minimal/icon.png -------------------------------------------------------------------------------- /pterodactyl-panel/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/pterodactyl-panel/icon.png -------------------------------------------------------------------------------- /pterodactyl-wings/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/pterodactyl-wings/icon.png -------------------------------------------------------------------------------- /switch_lan_play/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/switch_lan_play/icon.png -------------------------------------------------------------------------------- /_images/apache2/ingress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/_images/apache2/ingress.png -------------------------------------------------------------------------------- /.unsupported/xqrepack/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/.unsupported/xqrepack/icon.png -------------------------------------------------------------------------------- /bash_script_executer/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/bash_script_executer/icon.png -------------------------------------------------------------------------------- /switch_lan_play_server/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/switch_lan_play_server/icon.png -------------------------------------------------------------------------------- /apache2-minimal-mariadb/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/apache2-minimal-mariadb/icon.png -------------------------------------------------------------------------------- /netboot-xyz/root/etc/services.d/nginx/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bash 2 | exec /usr/sbin/nginx -c /config/nginx/nginx.conf -------------------------------------------------------------------------------- /.unsupported/tuya-convert/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/.unsupported/tuya-convert/icon.png -------------------------------------------------------------------------------- /homeassistant-test-instance/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/homeassistant-test-instance/icon.png -------------------------------------------------------------------------------- /homeassistant-test-instance/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/homeassistant-test-instance/logo.png -------------------------------------------------------------------------------- /pterodactyl-panel/root/etc/php81/php-fpm.conf: -------------------------------------------------------------------------------- 1 | 2 | [global] 3 | pid = /var/run/php-fpm.pid 4 | include=/etc/php7/php-fpm.d/*.conf -------------------------------------------------------------------------------- /.unsupported/bt-mqtt-gateway/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/.unsupported/bt-mqtt-gateway/icon.png -------------------------------------------------------------------------------- /_images/switch_lan_play/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/_images/switch_lan_play/screenshot.png -------------------------------------------------------------------------------- /.unsupported/freenom-dns-updater/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaserF/hassio-addons/HEAD/.unsupported/freenom-dns-updater/icon.png -------------------------------------------------------------------------------- /apache2/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /netboot-xyz/root/etc/services.d/webapp/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bash 2 | 3 | # Run App 4 | cd /app 5 | exec \ 6 | /usr/bin/node app.js 7 | -------------------------------------------------------------------------------- /openssl/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /whatsapp/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /.github/cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "en,de", 3 | "words": ["mosquitto"], 4 | "ignorePaths": [".github/*", ".git", ".gitignore"] 5 | } 6 | -------------------------------------------------------------------------------- /matterbridge/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /netboot-xyz/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /netboot-xyz/root/etc/services.d/dnsmasq/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bash 2 | exec \ 3 | /usr/sbin/dnsmasq --conf-dir=/etc/dnsmasq.d --no-daemon 4 | -------------------------------------------------------------------------------- /apache2-minimal/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /pterodactyl-panel/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /pterodactyl-wings/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /.unsupported/xqrepack/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /apache2-minimal-mariadb/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /bash_script_executer/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /tado_aa/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base-python:18.0.0" 4 | amd64: "ghcr.io/hassio-addons/base-python:18.0.0" 5 | -------------------------------------------------------------------------------- /.unsupported/tuya-convert/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base:19.0.0" 4 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 5 | -------------------------------------------------------------------------------- /repository.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FaserF's Home Assistant Add-ons", 3 | "url": "https://github.com/faserf/hassio-addons", 4 | "maintainer": "FaserF" 5 | } 6 | -------------------------------------------------------------------------------- /pterodactyl-wings/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | config_file: 3 | name: "Konfigurationsdatei" 4 | description: "Inhalt der Konfigurationsdatei." 5 | -------------------------------------------------------------------------------- /pterodactyl-wings/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | config_file: 3 | name: "Configuration File" 4 | description: "Content of the configuration file." 5 | -------------------------------------------------------------------------------- /.unsupported/bt-mqtt-gateway/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base-python:18.0.0" 4 | amd64: "ghcr.io/hassio-addons/base-python:18.0.0" 5 | -------------------------------------------------------------------------------- /.unsupported/freenom-dns-updater/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/hassio-addons/base-python:18.0.0" 4 | amd64: "ghcr.io/hassio-addons/base-python:18.0.0" 5 | -------------------------------------------------------------------------------- /switch_lan_play/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | server: 3 | name: "Server-Adresse" 4 | description: "Adresse des Lan-Play-Servers (z.B. switch.lan-play.com:11451)." 5 | -------------------------------------------------------------------------------- /switch_lan_play/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | server: 3 | name: "Server Address" 4 | description: "Address of the Lan Play server (e.g. switch.lan-play.com:11451)." 5 | -------------------------------------------------------------------------------- /whatsapp/rootfs/etc/s6-overlay/s6-rc.d/whatsapp/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | 3 | bashio::log.info "Starting WhatsApp Addon (Baileys)..." 4 | 5 | cd /app 6 | exec npm start 7 | -------------------------------------------------------------------------------- /netboot-xyz/root/etc/services.d/tftp/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bash 2 | 3 | /usr/sbin/in.tftpd \ 4 | --foreground --listen --secure ${PORT_RANGE:+--port-range $PORT_RANGE} /config/menus 5 | -------------------------------------------------------------------------------- /openssl/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | website_name: 3 | name: "Website Name (CN)" 4 | description: "The Common Name (CN) for which the certificate should be issued." 5 | -------------------------------------------------------------------------------- /solumati/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: "ghcr.io/home-assistant/aarch64-base-python:3.14-alpine3.21" 4 | amd64: "ghcr.io/home-assistant/amd64-base-python:3.14-alpine3.21" 5 | -------------------------------------------------------------------------------- /openssl/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | website_name: 3 | name: "Webseiten-Name (CN)" 4 | description: "Der Common Name (CN), für den das Zertifikat ausgestellt werden soll." 5 | -------------------------------------------------------------------------------- /switch_lan_play/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | armhf: "ghcr.io/hassio-addons/base:19.0.0" 4 | armv7: "ghcr.io/hassio-addons/base:19.0.0" 5 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 6 | -------------------------------------------------------------------------------- /switch_lan_play_server/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | armhf: "ghcr.io/hassio-addons/base:19.0.0" 4 | armv7: "ghcr.io/hassio-addons/base:19.0.0" 5 | amd64: "ghcr.io/hassio-addons/base:19.0.0" 6 | -------------------------------------------------------------------------------- /homeassistant-test-instance/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG HA_VERSION=2025.12.4 2 | FROM ghcr.io/home-assistant/home-assistant:$HA_VERSION 3 | 4 | # Persist data in the add-on data directory 5 | CMD [ "hass", "-c", "/data" ] 6 | -------------------------------------------------------------------------------- /AegisBot/build.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | build_from: 3 | aarch64: ghcr.io/hassio-addons/base:19.0.0 4 | amd64: ghcr.io/hassio-addons/base:19.0.0 5 | armv7: ghcr.io/hassio-addons/base:19.0.0 6 | args: 7 | AEGISBOT_VERSION: "0.1.0" 8 | -------------------------------------------------------------------------------- /switch_lan_play_server/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | username: 3 | name: "Username" 4 | description: "Username for the server." 5 | password: 6 | name: "Password" 7 | description: "Password for the server." 8 | -------------------------------------------------------------------------------- /switch_lan_play_server/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | username: 3 | name: "Benutzername" 4 | description: "Benutzername für den Server." 5 | password: 6 | name: "Passwort" 7 | description: "Passwort für den Server." 8 | -------------------------------------------------------------------------------- /homeassistant-test-instance/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | ## 0.1.1 3 | 4 | - Update Home Assistant to version 2025.12.4 5 | 6 | 7 | ## 0.1.0 8 | 9 | - Initial release 10 | - Uses ghcr.io/home-assistant/home-assistant:stable by default 11 | -------------------------------------------------------------------------------- /whatsapp/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | log_level: 3 | name: Log Level 4 | description: Controls the verbosity of the logs. 5 | network: 6 | 8000/tcp: 7 | description: Internal API Port for the Integration to connect to. 8 | -------------------------------------------------------------------------------- /matterbridge/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | config_path: 3 | name: "Configuration Path" 4 | description: "Path to the configuration file." 5 | log_level: 6 | name: "Log Level" 7 | description: "Logging level (default is 'info')." 8 | -------------------------------------------------------------------------------- /whatsapp/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | log_level: 3 | name: Log-Level 4 | description: Steuert die Ausführlichkeit der Protokolle. 5 | network: 6 | 8000/tcp: 7 | description: Interner API-Port, zu dem sich die Integration verbindet. 8 | -------------------------------------------------------------------------------- /openssl/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | RUN apk update && apk upgrade 6 | RUN apk --no-cache add openssl 7 | 8 | # Copy data for add-on 9 | COPY run.sh / 10 | RUN chmod a+x /run.sh 11 | CMD [ "/run.sh" ] -------------------------------------------------------------------------------- /matterbridge/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | config_path: 3 | name: "Konfigurationspfad" 4 | description: "Pfad zur Konfigurationsdatei." 5 | log_level: 6 | name: "Log-Level" 7 | description: "Protokollierungsstufe (standardmäßig 'info')." 8 | -------------------------------------------------------------------------------- /.unsupported/xqrepack/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | firmware_path: 3 | name: "Firmware Path" 4 | description: "Directory where the firmware is stored." 5 | firmware_name: 6 | name: "Firmware Name" 7 | description: "Name of the firmware file." 8 | -------------------------------------------------------------------------------- /.unsupported/bt-mqtt-gateway/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | config_path: 3 | name: "Configuration Path" 4 | description: "Path to the configuration file." 5 | debug: 6 | name: "Debug Mode" 7 | description: "Enables detailed logging for troubleshooting." 8 | -------------------------------------------------------------------------------- /.unsupported/xqrepack/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | firmware_path: 3 | name: "Firmware-Pfad" 4 | description: "Verzeichnis, in dem die Firmware gespeichert ist." 5 | firmware_name: 6 | name: "Firmware-Name" 7 | description: "Name der Firmware-Datei." 8 | -------------------------------------------------------------------------------- /homeassistant-test-instance/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | server: 3 | name: Server 4 | description: "The server configuration." 5 | network: 6 | name: Network 7 | description: "Network configuration." 8 | network: 9 | 8123/tcp: Web Interface 10 | -------------------------------------------------------------------------------- /netboot-xyz/root/defaults/dnsmasq.conf: -------------------------------------------------------------------------------- 1 | log-dhcp 2 | conf-dir=/etc/dnsmasq.d 3 | port=0 4 | #enable-tftp 5 | tftp-root=/config/menus 6 | dhcp-no-override 7 | pxe-service=X86PC, „Legacy Netzwerkboot“, netboot.xyz.kpxe 8 | pxe-service=X86-64_EFI,“EFI Netzwerkboot“, netboot.xyz.efi -------------------------------------------------------------------------------- /.unsupported/bt-mqtt-gateway/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | config_path: 3 | name: "Konfigurationspfad" 4 | description: "Pfad zur Konfigurationsdatei." 5 | debug: 6 | name: "Debug-Modus" 7 | description: "Aktiviert detaillierte Protokollierung zur Fehlerbehebung." 8 | -------------------------------------------------------------------------------- /.unsupported/freenom-dns-updater/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | config_file: 3 | name: "Configuration File" 4 | description: "Path to the configuration file." 5 | update_time_in_seconds: 6 | name: "Update Interval" 7 | description: "Interval for DNS updates in seconds." 8 | -------------------------------------------------------------------------------- /.github/workflows/orchestrator-labeler.yaml: -------------------------------------------------------------------------------- 1 | name: Orchestrator Labeler 2 | 3 | on: 4 | - pull_request_target 5 | 6 | jobs: 7 | label: 8 | runs-on: ubuntu-latest 9 | permissions: 10 | contents: read 11 | pull-requests: write 12 | steps: 13 | - uses: actions/labeler@v6 14 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | extends: default 2 | 3 | ignore: | 4 | **/node_modules/ 5 | **/dist/ 6 | **/build/ 7 | .* 8 | !.github/ 9 | 10 | rules: 11 | line-length: disable 12 | document-start: disable 13 | truthy: disable 14 | new-lines: disable 15 | comments: 16 | min-spaces-from-content: 1 17 | -------------------------------------------------------------------------------- /.unsupported/freenom-dns-updater/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | config_file: 3 | name: "Konfigurationsdatei" 4 | description: "Pfad zur Konfigurationsdatei." 5 | update_time_in_seconds: 6 | name: "Aktualisierungsintervall" 7 | description: "Intervall für DNS-Aktualisierungen in Sekunden." 8 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Proposed Changes 2 | 3 | > (Describe the changes and rationale behind them) 4 | 5 | ## Related Issues 6 | 7 | > ([Github link][autolink-references] to related issues or pull requests) 8 | 9 | [autolink-references]: https://help.github.com/articles/autolinked-references-and-urls/ 10 | -------------------------------------------------------------------------------- /pterodactyl-wings/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | config_file=$(bashio::config 'config_file') 3 | #Create Shortcut to config file 4 | echo "Using config file from ${config_file}..." 5 | ln -s $config_file /etc/pterodactyl/config.yml 6 | 7 | echo "Starting Pterodactyl Daemon..." 8 | 9 | exec /usr/local/bin/wings 10 | -------------------------------------------------------------------------------- /ShieldFile/build.json: -------------------------------------------------------------------------------- 1 | { 2 | "build_from": { 3 | "aarch64": "ghcr.io/hassio-addons/base:14.1.0", 4 | "amd64": "ghcr.io/hassio-addons/base:14.1.0", 5 | "armhf": "ghcr.io/hassio-addons/base:14.1.0", 6 | "armv7": "ghcr.io/hassio-addons/base:14.1.0", 7 | "i386": "ghcr.io/hassio-addons/base:14.1.0" 8 | }, 9 | "args": {} 10 | } 11 | -------------------------------------------------------------------------------- /netboot-xyz/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | path: 3 | name: "Image Path" 4 | description: "Directory where images are stored." 5 | path_config: 6 | name: "Configuration Path" 7 | description: "Directory for configuration files." 8 | dhcp_range: 9 | name: "DHCP Range" 10 | description: "DHCP range for the PXE server." 11 | -------------------------------------------------------------------------------- /bash_script_executer/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Create directory for apache2 to store PID file 6 | RUN mkdir /run/apache2 7 | 8 | RUN apk --no-cache add busybox-extras curl grep coreutils sed xmlstarlet bash 9 | 10 | # Copy data for add-on 11 | COPY run.sh / 12 | RUN chmod a+x /run.sh 13 | CMD [ "/run.sh" ] 14 | -------------------------------------------------------------------------------- /netboot-xyz/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | path: 3 | name: "Image-Pfad" 4 | description: "Verzeichnis, in dem die Images gespeichert werden." 5 | path_config: 6 | name: "Konfigurationspfad" 7 | description: "Verzeichnis für Konfigurationsdateien." 8 | dhcp_range: 9 | name: "DHCP-Bereich" 10 | description: "DHCP-Bereich für den PXE-Server." 11 | -------------------------------------------------------------------------------- /openssl/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: OpenSSL 3 | version: 1.8.1 4 | slug: openssl 5 | description: Generate self-signed certificates 6 | url: https://github.com/FaserF/hassio-addons/tree/master/openssl 7 | arch: 8 | - aarch64 9 | - amd64 10 | image: ghcr.io/faserf/openssl-{arch} 11 | map: 12 | - ssl:rw 13 | init: false 14 | options: 15 | website_name: 16 | schema: 17 | website_name: str 18 | -------------------------------------------------------------------------------- /.unsupported/tuya-convert/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | backup_path: 3 | name: "Backup Path" 4 | description: "Path to store backups of the original firmware." 5 | firmware: 6 | name: "Firmware File" 7 | description: "Name of the firmware file (e.g. tasmota.bin)." 8 | accept_eula: 9 | name: "Accept EULA" 10 | description: "Set to 'true' to acknowledge the risks of flashing." 11 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "tabWidth": 2, 3 | "useTabs": false, 4 | "singleQuote": true, 5 | "trailingComma": "es5", 6 | "printWidth": 100, 7 | "semi": true, 8 | "overrides": [ 9 | { 10 | "files": "*.yaml", 11 | "options": { 12 | "singleQuote": false 13 | } 14 | }, 15 | { 16 | "files": "*.yml", 17 | "options": { 18 | "singleQuote": false 19 | } 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /homeassistant-test-instance/config.yaml: -------------------------------------------------------------------------------- 1 | name: "Home Assistant Test Instance" 2 | version: "0.1.1" 3 | slug: "ha_test_instance" 4 | description: "A standalone Home Assistant Core instance for testing purposes." 5 | url: "https://github.com/home-assistant/home-assistant" 6 | startup: application 7 | arch: 8 | - aarch64 9 | - amd64 10 | - armv7 11 | ports: 12 | 8123/tcp: 8124 13 | map: 14 | - config:rw 15 | options: {} 16 | schema: {} 17 | init: false 18 | -------------------------------------------------------------------------------- /whatsapp/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hassio-addon-whatsapp", 3 | "version": "0.2.1", 4 | "description": "WhatsApp Addon using Baileys", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "start": "node index.js" 9 | }, 10 | "dependencies": { 11 | "@whiskeysockets/baileys": "7.0.0-rc.9", 12 | "bonjour-service": "^1.3.0", 13 | "express": "^5.0.0", 14 | "pino": "^10.0.0", 15 | "qrcode": "^1.5.3" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.unsupported/tuya-convert/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | backup_path: 3 | name: "Update-Backup-Pfad" 4 | description: "Pfad, in dem Backups der Original-Firmware gespeichert werden." 5 | firmware: 6 | name: "Firmware-Datei" 7 | description: "Name der Firmware-Datei (z.B. tasmota.bin)." 8 | accept_eula: 9 | name: "EULA akzeptieren" 10 | description: "Setzen Sie dies auf 'true', um zu bestätigen, dass Sie das Risiko des Flashens kennen." 11 | -------------------------------------------------------------------------------- /.github/workflows/build-image-on-autoupdate.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Build Image on Autoupdate 3 | 4 | "on": 5 | workflow_run: 6 | workflows: 7 | - "Automatically bump version on addon base updates and changelog" 8 | - "Automatically bump version on netbootxyz updates and changelog" 9 | types: 10 | - completed 11 | 12 | jobs: 13 | build-image: 14 | if: ${{ github.event.workflow_run.conclusion == 'success' }} 15 | uses: ./.github/workflows/deploy.yaml 16 | -------------------------------------------------------------------------------- /tado_aa/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | username: 3 | name: "Username" 4 | description: "Tado username (email)." 5 | password: 6 | name: "Password" 7 | description: "Tado password." 8 | minTemp: 9 | name: "Minimum Temperature" 10 | description: "Minimum temperature." 11 | maxTemp: 12 | name: "Maximum Temperature" 13 | description: "Maximum temperature." 14 | log_level: 15 | name: "Log Level" 16 | description: "Logging level." 17 | -------------------------------------------------------------------------------- /pterodactyl-panel/root/etc/php81/php-fpm.d/www.conf: -------------------------------------------------------------------------------- 1 | [www] 2 | user = nginx 3 | group = nginx 4 | 5 | listen = /var/run/php-fpm.sock 6 | 7 | listen.owner = nginx 8 | listen.group = nginx 9 | listen.mode = 0750 10 | 11 | pm = ondemand 12 | pm.max_children = 20 13 | pm.min_spare_servers = 2 14 | pm.max_spare_servers = 5 15 | pm.process_idle_timeout = 10s 16 | pm.max_requests = 200 17 | slowlog = /dev/stdout 18 | request_slowlog_timeout = 60s 19 | catch_workers_output = yes 20 | 21 | clear_env = no 22 | -------------------------------------------------------------------------------- /tado_aa/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | username: 3 | name: "Benutzername" 4 | description: "Tado Benutzername (E-Mail)." 5 | password: 6 | name: "Passwort" 7 | description: "Tado Passwort." 8 | minTemp: 9 | name: "Minimale Temperatur" 10 | description: "Minimale Temperatur." 11 | maxTemp: 12 | name: "Maximale Temperatur" 13 | description: "Maximale Temperatur." 14 | log_level: 15 | name: "Log-Level" 16 | description: "Protokollierungsstufe." 17 | -------------------------------------------------------------------------------- /whatsapp/config.yaml: -------------------------------------------------------------------------------- 1 | name: "WhatsApp" 2 | version: "0.2.1" 3 | slug: "whatsapp" 4 | description: "Home Assistant WhatsApp Backend (Baileys/Node.js)" 5 | url: "https://github.com/FaserF/ha-whatsapp" 6 | startup: application 7 | arch: 8 | - aarch64 9 | - amd64 10 | init: false 11 | map: 12 | - config:rw 13 | panel_icon: mdi:whatsapp 14 | options: 15 | log_level: info 16 | schema: 17 | log_level: str 18 | ports: 19 | 8066/tcp: 8066 20 | ingress: true 21 | ingress_port: 8066 22 | ingress_entry: / 23 | -------------------------------------------------------------------------------- /wiki.js/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | ssl: 3 | name: "Enable SSL" 4 | description: "Enables SSL." 5 | certfile: 6 | name: "Certificate File" 7 | description: "Path to the SSL certificate file." 8 | keyfile: 9 | name: "Key File" 10 | description: "Path to the private key file." 11 | log_level: 12 | name: "Log Level" 13 | description: "Logging level." 14 | reset_database: 15 | name: "Reset Database" 16 | description: "Resets the database. CAUTION!" 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore folders. 2 | megalinter-reports/ 3 | github_conf/ 4 | all_build_yamls.txt 5 | 6 | # Python 7 | __pycache__/ 8 | *.py[cod] 9 | *$py.class 10 | 11 | # Environments 12 | .env 13 | .venv 14 | env/ 15 | venv/ 16 | ENV/ 17 | env.bak/ 18 | venv.bak/ 19 | 20 | # IDE / Editor 21 | .idea/ 22 | .vscode/ 23 | *.swp 24 | *.swo 25 | 26 | # OS 27 | .DS_Store 28 | Thumbs.db 29 | Desktop.ini 30 | 31 | # Logs 32 | *.log 33 | compliance.log 34 | output.txt 35 | 36 | # Local Artifacts 37 | markdown_report.txt 38 | *.bak 39 | -------------------------------------------------------------------------------- /switch_lan_play/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Switch LAN Play Client 3 | version: 1.8.1 4 | slug: switch-lan-play 5 | description: Nintendo Switch Lan Play -Client 6 | url: https://github.com/FaserF/hassio-addons/tree/master/switch_lan_play 7 | arch: 8 | - armhf 9 | - armv7 10 | - amd64 11 | image: ghcr.io/faserf/switch_lan_play-{arch} 12 | init: false 13 | panel_icon: mdi:local-area-network 14 | host_network: true 15 | host_ipc: true 16 | host_dbus: true 17 | options: 18 | server: 19 | schema: 20 | server: str 21 | ports: {} 22 | -------------------------------------------------------------------------------- /switch_lan_play/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bashio 2 | 3 | #VARIABLES 4 | server=$(bashio::config 'server') 5 | 6 | echo "For more informations or bugs with lan-play itself please visit: https://github.com/spacemeowx2/switch-lan-play" 7 | echo "If you want to install the latest lan-play client, please reinstall this addon" 8 | echo "Starting lan-play Client with the server: $server - To Connect your switch with this client have a look at https://github.com/spacemeowx2/switch-lan-play#2-switch" 9 | ./lan-play --relay-server-addr $server 10 | -------------------------------------------------------------------------------- /wiki.js/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | ssl: 3 | name: "SSL aktivieren" 4 | description: "Aktiviert SSL." 5 | certfile: 6 | name: "Zertifikatsdatei" 7 | description: "Pfad zur SSL-Zertifikatsdatei." 8 | keyfile: 9 | name: "Schlüsseldatei" 10 | description: "Pfad zur privaten Schlüsseldatei." 11 | log_level: 12 | name: "Log-Level" 13 | description: "Protokollierungsstufe." 14 | reset_database: 15 | name: "Datenbank zurücksetzen" 16 | description: "Setzt die Datenbank zurück. VORSICHT!" 17 | -------------------------------------------------------------------------------- /netboot-xyz/root/etc/cont-init.d/20-nginx-config: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bash 2 | 3 | # make our folders 4 | mkdir -p \ 5 | /assets \ 6 | /config/{nginx/site-confs,log/nginx} \ 7 | /run \ 8 | /var/lib/nginx/tmp/client_body \ 9 | /var/tmp/nginx 10 | 11 | # copy config files 12 | [[ ! -f /config/nginx/nginx.conf ]] && \ 13 | cp /defaults/nginx.conf /config/nginx/nginx.conf 14 | [[ ! -f /config/nginx/site-confs/default ]] && \ 15 | cp /defaults/default /config/nginx/site-confs/default 16 | 17 | # Ownership 18 | chown -R abc:abc /assets -------------------------------------------------------------------------------- /pterodactyl-panel/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | password: 3 | name: "Database Password" 4 | description: "Password for the database." 5 | ssl: 6 | name: "Enable SSL" 7 | description: "Enables SSL." 8 | certfile: 9 | name: "Certificate File" 10 | description: "Path to the SSL certificate file." 11 | keyfile: 12 | name: "Key File" 13 | description: "Path to the private key file." 14 | reset_database: 15 | name: "Reset Database" 16 | description: "Resets the database on startup. CAUTION!" 17 | -------------------------------------------------------------------------------- /matterbridge/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Matterbridge 3 | version: 1.5.1 4 | slug: matterbridge 5 | description: A simple chat bridge between different messanger apps 6 | url: https://github.com/FaserF/hassio-addons/tree/master/matterbridge 7 | arch: 8 | - aarch64 9 | - amd64 10 | image: ghcr.io/faserf/matterbridge-{arch} 11 | map: 12 | - share:rw 13 | init: false 14 | panel_icon: mdi:bridge 15 | options: 16 | config_path: "/share/matterbridge.toml" 17 | log_level: info 18 | schema: 19 | config_path: str 20 | log_level: list(info|debug)? 21 | -------------------------------------------------------------------------------- /.unsupported/xqrepack/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: xqrepack 3 | version: 1.8.1 4 | slug: xqrepack 5 | description: These scripts allow you to modify the different Xiaomi router firmware 6 | images to make sure SSH and UART access is always enabled. 7 | url: https://github.com/FaserF/hassio-addons/tree/master/xqrepack 8 | arch: 9 | - aarch64 10 | - amd64 11 | map: 12 | - share:rw 13 | init: false 14 | options: 15 | firmware_path: "/share/miwifi_firmware/" 16 | firmware_name: miwifi_r3600_firmware.bin 17 | schema: 18 | firmware_path: str 19 | firmware_name: str 20 | -------------------------------------------------------------------------------- /apache2-minimal/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Create directory for apache2 to store PID file 6 | RUN mkdir /run/apache2 7 | 8 | RUN apk --no-cache add apache2 libxml2-dev apache2-utils apache2-mod-wsgi apache2-ssl 9 | 10 | #Configure Logging 11 | RUN sed -i -r 's@Errorlog .*@Errorlog /dev/stderr@i' /etc/apache2/httpd.conf 12 | RUN echo "Transferlog /dev/stdout" >> /etc/apache2/httpd.conf 13 | 14 | # Copy data for add-on 15 | COPY run.sh / 16 | COPY index.html / 17 | RUN chmod a+x /run.sh 18 | CMD [ "/run.sh" ] 19 | -------------------------------------------------------------------------------- /switch_lan_play_server/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Switch LAN Play Server 3 | version: 1.8.1 4 | slug: switch-lan-play-server 5 | description: Nintendo Switch Lan Play -Server 6 | url: https://github.com/FaserF/hassio-addons/tree/master/switch_lan_play_server 7 | arch: 8 | - armhf 9 | - armv7 10 | - amd64 11 | # image: ghcr.io/faserf/switch_lan_play_server-{arch} 12 | panel_icon: mdi:local-area-network 13 | init: false 14 | schema: 15 | username: str? 16 | password: str? 17 | ports: 18 | "11451": 11451 19 | ports_description: 20 | 11451/tcp: SLP Server Port 21 | -------------------------------------------------------------------------------- /pterodactyl-panel/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | password: 3 | name: "Datenbank-Passwort" 4 | description: "Passwort für die Datenbank." 5 | ssl: 6 | name: "SSL aktivieren" 7 | description: "Aktiviert SSL." 8 | certfile: 9 | name: "Zertifikatsdatei" 10 | description: "Pfad zur SSL-Zertifikatsdatei." 11 | keyfile: 12 | name: "Schlüsseldatei" 13 | description: "Pfad zur privaten Schlüsseldatei." 14 | reset_database: 15 | name: "Datenbank zurücksetzen" 16 | description: "Setzt die Datenbank beim Start zurück. VORSICHT!" 17 | -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | # .github/labeler.yml 2 | # Add 'core' label for root repo changes 3 | core: 4 | - any: ['*', '.github/**'] 5 | 6 | # Add specific labels for add-ons logic 7 | addon/config: 8 | - changed-files: 9 | - any-glob-to-any-file: '**/config.yaml' 10 | - any-glob-to-any-file: '**/config.json' 11 | 12 | addon/docker: 13 | - changed-files: 14 | - any-glob-to-any-file: '**/Dockerfile' 15 | 16 | # Specific add-on labels (examples, would need generation for all) 17 | addon/whatsapp: 18 | - changed-files: 19 | - any-glob-to-any-file: 'whatsapp/**' 20 | -------------------------------------------------------------------------------- /tado_aa/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Tado Auto Assist 3 | version: 1.7.1 4 | slug: tado_aa 5 | description: Tado Auto-Assist for Geofencing and open Window detection 6 | url: https://github.com/FaserF/hassio-addons/tree/master/tado_aa 7 | arch: 8 | - aarch64 9 | - amd64 10 | image: ghcr.io/faserf/tado_aa-{arch} 11 | init: false 12 | options: 13 | username: 14 | password: 15 | minTemp: int(5, 25) 16 | maxTemp: int(5, 25) 17 | log_level: info 18 | schema: 19 | username: str 20 | password: password 21 | minTemp: int 22 | maxTemp: int 23 | log_level: list(info|minimal)? 24 | -------------------------------------------------------------------------------- /.unsupported/bt-mqtt-gateway/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: bt-mqtt-gateway 3 | version: 1.7.1 4 | slug: bt-mqtt-gateway 5 | description: Bluetooth MQTT Gateway Server 6 | url: https://github.com/FaserF/hassio-addons/tree/master/bt-mqtt-gateway 7 | host_network: true 8 | arch: 9 | - aarch64 10 | - amd64 11 | startup: services 12 | services: 13 | - mqtt:want 14 | map: 15 | - share 16 | init: false 17 | host_dbus: true 18 | panel_icon: mdi:bluetooth-transfer 19 | options: 20 | config_path: "/share/bt-mqtt-gateway.yaml" 21 | debug: false 22 | schema: 23 | config_path: str 24 | debug: bool 25 | -------------------------------------------------------------------------------- /netboot-xyz/root/defaults/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes 4; 2 | pid /run/nginx.pid; 3 | include /etc/nginx/modules/*.conf; 4 | 5 | events { 6 | worker_connections 768; 7 | } 8 | 9 | http { 10 | sendfile on; 11 | tcp_nopush on; 12 | tcp_nodelay on; 13 | keepalive_timeout 65; 14 | types_hash_max_size 2048; 15 | client_max_body_size 0; 16 | include /etc/nginx/mime.types; 17 | default_type application/octet-stream; 18 | access_log /config/log/nginx/access.log; 19 | error_log /config/log/nginx/error.log; 20 | gzip on; 21 | gzip_disable "msie6"; 22 | include /config/nginx/site-confs/*; 23 | 24 | } 25 | daemon off; 26 | -------------------------------------------------------------------------------- /.unsupported/freenom-dns-updater/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | config_file=$(bashio::config 'config_file') 3 | update_time_in_seconds=$(bashio::config 'update_time_in_seconds') 4 | 5 | if [ ! -f $config_file ]; then 6 | echo "Seems there is no config file at $config_file" 7 | echo "Check the path again and be sure to use a path somewhere at /share. Exiting now" 8 | exit 1 9 | fi 10 | 11 | source ./venv/bin/activate 12 | 13 | fdu update $config_file 14 | 15 | echo "Starting FDU every $update_time_in_seconds with the config file $config_file" 16 | 17 | fdu process -c -i -r -t $update_time_in_seconds $config_file 18 | -------------------------------------------------------------------------------- /.unsupported/tuya-convert/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: tuya-convert BETA 3 | version: 0.1.8 4 | slug: tuya-convert 5 | description: >- 6 | Tuya Convert - Flash Tuya devices with open Source software (Beta/Deprecated) 7 | url: https://github.com/FaserF/hassio-addons/tree/master/tuya-convert 8 | arch: 9 | - aarch64 10 | - amd64 11 | startup: services 12 | map: 13 | - share:rw 14 | host_network: true 15 | init: false 16 | privileged: 17 | - NET_ADMIN 18 | options: 19 | backup_path: "/share/tuya-convert/" 20 | firmware: tasmota.bin 21 | accept_eula: "false" 22 | schema: 23 | backup_path: str 24 | firmware: str 25 | accept_eula: str 26 | -------------------------------------------------------------------------------- /pterodactyl-wings/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: pterodactyl Wings Gameserver 3 | version: 1.5.1 4 | slug: pterodactyl_wings 5 | description: Open Source Gameserver 6 | url: https://github.com/FaserF/hassio-addons/tree/master/pterodactyl-wings 7 | arch: 8 | - aarch64 9 | - amd64 10 | image: ghcr.io/faserf/pterodactyl-wings-{arch} 11 | # webui: "[PROTO:ssl]://[HOST]:[PORT:8080]" 12 | map: 13 | - share:rw 14 | ingress: true 15 | init: false 16 | panel_icon: mdi:controller 17 | options: 18 | config_file: 19 | schema: 20 | config_file: str 21 | ports: 22 | "2022": 2022 23 | 8080/tcp: 8080 24 | ports_description: 25 | 8080/tcp: "8080" 26 | 2022/tcp: "2022" 27 | -------------------------------------------------------------------------------- /openssl/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bashio 2 | website_name=$(bashio::config 'website_name') 3 | key_file=/ssl/key_openssl.pem 4 | cert_file=/ssl/cert_openssl.pem 5 | 6 | if test -f "$key_file"; then 7 | echo "$key_file exists already. A new one will now be created!" 8 | rm $key_file 9 | fi 10 | 11 | if test -f "$cert_file"; then 12 | echo "$cert_file exists already. A new one will now be created!" 13 | rm $cert_file 14 | fi 15 | 16 | openssl req -x509 -newkey rsa:4096 -keyout $key_file -out $cert_file -days 10000 -nodes -subj /CN=$website_name 17 | 18 | echo "Certificates were generated. They are now located here: $key_file & $cert_file . The addon will now be stopped." 19 | exit 20 | -------------------------------------------------------------------------------- /.unsupported/freenom-dns-updater/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Freenom-dns-updater 3 | version: 1.7.1 4 | slug: freenom-dns-updater 5 | description: >- 6 | Freenom Registrar Domain Management - update dns records, Manage 7 | (add/update/remove) a domain's dns record, auto renew domains and more. 8 | url: https://github.com/FaserF/hassio-addons/tree/master/freenom-dns-updater 9 | arch: 10 | - aarch64 11 | - amd64 12 | startup: application 13 | boot: auto 14 | map: 15 | - share:rw 16 | ingress: false 17 | init: false 18 | panel_icon: mdi:web-box 19 | options: 20 | config_file: 21 | update_time_in_seconds: 86400 22 | schema: 23 | config_file: str 24 | update_time_in_seconds: int 25 | -------------------------------------------------------------------------------- /pterodactyl-wings/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | RUN \ 6 | apk add --no-cache ca-certificates curl tini tzdata; \ 7 | mkdir -p /etc/pterodactyl /var/log/pterodactyl /tmp/pterodactyl 8 | 9 | #RUN curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64")" \ 10 | RUN curl -L -o /usr/local/bin/wings "https://github.com/pterodactyl/wings/releases/latest/download/wings_linux_amd64" \ 11 | && chmod u+x /usr/local/bin/wings 12 | 13 | # Copy data for add-on 14 | COPY run.sh / 15 | RUN chmod a+x /run.sh 16 | CMD [ "/run.sh" ] 17 | -------------------------------------------------------------------------------- /tado_aa/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | username=$(bashio::config 'username') 3 | password=$(bashio::config 'password') 4 | minTemp=$(bashio::config 'minTemp') 5 | maxTemp=$(bashio::config 'maxTemp') 6 | log_level=$(bashio::config 'log_level') 7 | 8 | sed -i "s/your_tado_username/${username}/" /tado_aa.py 9 | sed -i "s/your_tado_password/${password}/" /tado_aa.py 10 | sed -i "s/5/${minTemp}/" /tado_aa.py 11 | sed -i "s/25/${maxTemp}/" /tado_aa.py 12 | 13 | source ./venv/bin/activate 14 | 15 | echo "Starting Tado Auto Assist python script from adrianslabu/tado_aa" 16 | if [ $log_level != "minimal" ]; then 17 | python3 -u /tado_aa.py 18 | else 19 | python3 /tado_aa.py 20 | fi 21 | -------------------------------------------------------------------------------- /.unsupported/tuya-convert/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | RUN apk add --update bash git iw dnsmasq hostapd screen curl py3-pip py3-wheel python3-dev mosquito haveged net-tools openssl openssl-dev gcc musl-dev linux-headers sudo coreutils grep iproute2 6 | RUN python3 -m pip install --upgrade paho-mqtt tornado git+https://github.com/drbild/sslpsk.git pycryptodomex 7 | RUN git clone --depth 1 https://github.com/ct-Open-Source/tuya-convert /usr/local/tuya-convert 8 | RUN sed -i 's|ls -m|ls|' /usr/local/tuya-convert/scripts/setup_checks.sh 9 | WORKDIR "/usr/local/tuya-convert" 10 | 11 | # Copy data for add-on 12 | COPY start.sh / 13 | RUN chmod a+x /start.sh 14 | CMD [ "/start.sh" ] -------------------------------------------------------------------------------- /apache2-minimal-mariadb/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Create directory for apache2 to store PID file 6 | RUN mkdir /run/apache2 7 | 8 | RUN apk --no-cache add apache2 php84-apache2 libxml2-dev apache2-utils apache2-mod-wsgi apache2-ssl 9 | RUN apk --no-cache add php84 php84-mysqli php84-opcache php84-curl php84-mbstring php84-zip 10 | RUN apk --no-cache add mariadb-client 11 | 12 | #Configure Logging 13 | RUN sed -i -r 's@Errorlog .*@Errorlog /dev/stderr@i' /etc/apache2/httpd.conf 14 | RUN echo "Transferlog /dev/stdout" >> /etc/apache2/httpd.conf 15 | 16 | # Copy data for add-on 17 | COPY run.sh / 18 | COPY index.html / 19 | RUN chmod a+x /run.sh 20 | CMD [ "/run.sh" ] 21 | -------------------------------------------------------------------------------- /switch_lan_play_server/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Install requirements for add-on 6 | RUN apk -U --no-cache add libpcap-dev 7 | RUN apk -U --no-cache add libuv-dev 8 | RUN apk -U --no-cache add git 9 | RUN apk -U --no-cache add g++ 10 | RUN apk -U --no-cache add npm 11 | RUN apk -U --no-cache add nano 12 | RUN apk -U --no-cache add screen 13 | RUN apk -U --no-cache add build-base 14 | 15 | #Install SLP 16 | RUN git clone https://github.com/spacemeowx2/switch-lan-play.git \ 17 | && cd switch-lan-play/server \ 18 | && npm install \ 19 | && npm run build 20 | 21 | # Copy data for add-on 22 | COPY run.sh / 23 | RUN chmod a+x /run.sh 24 | 25 | CMD [ "/run.sh" ] -------------------------------------------------------------------------------- /ShieldFile/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM=ghcr.io/home-assistant/amd64-base:alpine 2 | FROM ${BUILD_FROM} 3 | 4 | # Install necessary tools 5 | # 'curl' and 'bash' for installing filebrowser 6 | # 'dos2unix' to fix potential Windows line ending issues in scripts 7 | RUN apk add --no-cache curl bash dos2unix 8 | 9 | # Setup Filebrowser 10 | # We grab the binary from the official install script 11 | RUN curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash 12 | 13 | # Create database directory 14 | RUN mkdir -p /data/database 15 | 16 | # Copy Addon run script to S6 services directory 17 | # Copy Run Script 18 | COPY run.sh /run.sh 19 | RUN dos2unix /run.sh && chmod a+x /run.sh 20 | 21 | ENTRYPOINT [ "/run.sh" ] -------------------------------------------------------------------------------- /.unsupported/freenom-dns-updater/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Create directory for FDU 6 | #RUN mkdir -p '/opt/freenom_dns_updater' 7 | #COPY . /opt/freenom_dns_updater/ 8 | #WORKDIR /opt/freenom_dns_updater 9 | RUN apk add --no-cache zlib openssl-dev binutils py3-pip 10 | 11 | # Prepare venv 12 | RUN python3 -m venv venv 13 | 14 | # Install python-tado via pip 15 | RUN source ./venv/bin/activate && \ 16 | pip install freenom-dns-updater==1.2.9 17 | #RUN rm -rf /opt/freenom_dns_updater 18 | 19 | # Copy data for add-on 20 | #ENTRYPOINT [ "fdu" ] 21 | #CMD [ "process", "-i", "-c", "-r", "-t", "3600", "/etc/freenom.yml" ] 22 | COPY run.sh / 23 | RUN chmod a+x /run.sh 24 | CMD [ "/run.sh" ] 25 | -------------------------------------------------------------------------------- /switch_lan_play_server/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bashio 2 | 3 | #VARIABLES 4 | username=$(bashio::config 'username') 5 | password=$(bashio::config 'password') 6 | 7 | echo "For more informations or bugs with lan-play itself please visit: https://github.com/spacemeowx2/switch-lan-play" 8 | 9 | echo "Starting lan-play server - To Connect your switch with this server have a look at https://github.com/spacemeowx2/switch-lan-play#2-switch" 10 | cd switch-lan-play/server 11 | if [ ! -z "$username" ] && [ ! -z "$password" ] && [ ! $username = "null" ] && [ ! $password = "null" ]; then 12 | npm start --simpleAuth $username:$password 13 | else 14 | echo "No username and/or password was provided. Using no authentification to connect to this Server." 15 | npm start 16 | fi 17 | -------------------------------------------------------------------------------- /ShieldFile/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | certfile: 3 | name: "Certificate File" 4 | description: "The name of your SSL certificate file in /ssl/." 5 | keyfile: 6 | name: "Private Key File" 7 | description: "The name of your private key file in /ssl/." 8 | base_directory: 9 | name: "Base Directory" 10 | description: "The root directory that ShieldFile will serve (e.g., /share, /media, /config)." 11 | port: 12 | name: "Port" 13 | description: "The port ShieldFile will listen on (Default: 8443)." 14 | users: 15 | name: "Users" 16 | description: "List of users to create/update. Warning: Modifying this might reset passwords." 17 | log_level: 18 | name: "Log Level" 19 | description: "Verbosity of logs." 20 | -------------------------------------------------------------------------------- /tado_aa/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Set shell 6 | SHELL ["/bin/bash", "-o", "pipefail", "-c"] 7 | 8 | # Setup base 9 | # hadolint ignore=DL3003 10 | RUN apk add --no-cache wget unzip sed py3-pip 11 | 12 | # Prepare venv 13 | RUN python3 -m venv venv 14 | 15 | # Install python-tado via pip 16 | RUN source ./venv/bin/activate && \ 17 | pip install python-tado==0.19.2 18 | 19 | RUN wget https://github.com/adrianslabu/tado_aa/archive/refs/heads/main.zip 20 | RUN unzip main.zip && rm main.zip && cp tado_aa-main/tado_aa.py / && rm -r tado_aa-main 21 | 22 | RUN apk del --purge wget unzip 23 | 24 | # Copy data for add-on 25 | COPY run.sh / 26 | #COPY config.yml /wiki/ 27 | RUN chmod a+x /run.sh 28 | RUN chmod a+x /tado_aa.py 29 | CMD [ "/run.sh" ] 30 | -------------------------------------------------------------------------------- /ShieldFile/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | certfile: 3 | name: "Zertifikats-Datei" 4 | description: "Der Name deiner SSL-Zertifikatsdatei im /ssl/ Verzeichnis." 5 | keyfile: 6 | name: "Privater Schlüssel" 7 | description: "Der Name deiner privaten Schlüsseldatei im /ssl/ Verzeichnis." 8 | base_directory: 9 | name: "Basis-Verzeichnis" 10 | description: "Das Stammverzeichnis, das ShieldFile bereitstellt (z.B. /share, /media, /config)." 11 | port: 12 | name: "Port" 13 | description: "Der Port, auf dem ShieldFile lauscht (Standard: 8443)." 14 | users: 15 | name: "Benutzer" 16 | description: "Liste der Benutzer. Warnung: Änderungen hier können Passwörter zurücksetzen." 17 | log_level: 18 | name: "Log Level" 19 | description: "Detailgrad der Protokolle." 20 | -------------------------------------------------------------------------------- /.unsupported/xqrepack/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | RUN \ 6 | apk add --no-cache \ 7 | wget python3 python3-dev py3-pip lzo-dev mtd-utils-ubi squashfs-tools fakeroot make g++ coreutils 8 | 9 | #Install Pip Dependencies 10 | RUN pip install python-lzo 11 | RUN pip install ubi_reader 12 | 13 | RUN mkdir /xqrepack 14 | WORKDIR /xqrepack 15 | 16 | RUN wget -O /xqrepack/repack-squashfs.sh https://raw.githubusercontent.com/geekman/xqrepack/master/repack-squashfs.sh 17 | RUN wget -O /xqrepack/ubinize.sh https://raw.githubusercontent.com/geekman/xqrepack/master/ubinize.sh 18 | #RUN wget -O /xqrepack/xqflash https://raw.githubusercontent.com/geekman/xqrepack/master/xqflash 19 | 20 | # Copy data for add-on 21 | COPY run.sh / 22 | RUN chmod a+x /run.sh 23 | CMD [ "/run.sh" ] 24 | -------------------------------------------------------------------------------- /switch_lan_play/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Install requirements for add-on 6 | RUN apk -U --no-cache add libpcap-dev 7 | RUN apk -U --no-cache add libuv-dev 8 | RUN apk -U --no-cache add git 9 | RUN apk -U --no-cache add g++ 10 | RUN apk -U --no-cache add cmake 11 | RUN apk -U --no-cache add nano 12 | RUN apk -U --no-cache add screen 13 | RUN apk -U --no-cache add build-base 14 | 15 | #Install SLP Client 16 | RUN git clone https://github.com/spacemeowx2/switch-lan-play.git \ 17 | && cd switch-lan-play \ 18 | && mkdir build \ 19 | && cd build \ 20 | && cmake .. \ 21 | && make \ 22 | && cd src \ 23 | && chmod +x lan-play \ 24 | && cp lan-play / 25 | 26 | # Copy data for add-on 27 | COPY run.sh / 28 | RUN chmod a+x /run.sh 29 | 30 | CMD [ "/run.sh" ] -------------------------------------------------------------------------------- /AegisBot/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Changelog 4 | 5 | ## [0.1.4] - 2025-12-20 6 | 7 | ### Added 8 | 9 | - Added `demo_mode` and `demo_mode_type` configuration options 10 | - Improved environment variable passing for demo state 11 | 12 | ## [0.1.1] 13 | 14 | - Small fixes preventing addon start 15 | 16 | ## [0.1.0] - 2025-12-19 17 | 18 | ### Added 19 | 20 | - Initial release of AegisBot Home Assistant Add-on 21 | - Telegram Bot integration with token configuration 22 | - GitHub OAuth support for dashboard authentication 23 | - SQLite and PostgreSQL database support 24 | - Developer mode for main branch updates 25 | - Database reset functionality 26 | - Multi-architecture support (aarch64, amd64, armv7) 27 | - Ingress support for Home Assistant integration 28 | - Nginx reverse proxy for frontend/backend 29 | -------------------------------------------------------------------------------- /wiki.js/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Wiki.JS 3 | version: 2.2.1 4 | slug: wikijs 5 | description: The most powerful and extensible open source Wiki software 6 | url: https://github.com/FaserF/hassio-addons/tree/master/wiki.js 7 | arch: 8 | # - aarch64 (nodejs does support aarch64, but nodejs musl not?) 9 | - amd64 10 | services: 11 | - mysql:need 12 | map: 13 | - ssl 14 | ingress: true 15 | init: false 16 | panel_icon: mdi:wikipedia 17 | options: 18 | ssl: true 19 | certfile: fullchain.pem 20 | keyfile: privkey.pem 21 | log_level: info 22 | schema: 23 | ssl: bool 24 | certfile: str 25 | keyfile: str 26 | log_level: list(error|warn|info|debug)? 27 | reset_database: bool? 28 | ports: 29 | 3000/tcp: 3000 30 | 3443/tcp: 3443 31 | ports_description: 32 | 3000/tcp: HTTP Entrance port 33 | 3443/tcp: HTTPS/SSL Entrance port 34 | -------------------------------------------------------------------------------- /.scripts/restore_backups.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | 4 | ADDONS = [ 5 | "AegisBot", 6 | "ShieldDNS", 7 | "ShieldFile", 8 | "apache2", 9 | "apache2-minimal", 10 | "apache2-minimal-mariadb", 11 | "bash_script_executer", 12 | "homeassistant-test-instance", 13 | "matterbridge", 14 | "netboot-xyz", 15 | "openssl", 16 | "pterodactyl-panel", 17 | "pterodactyl-wings", 18 | "solumati", 19 | "switch_lan_play", 20 | "switch_lan_play_server", 21 | "tado_aa", 22 | "whatsapp", 23 | "wiki.js", 24 | ] 25 | 26 | for addon in ADDONS: 27 | bak_path = os.path.join(addon, "README.md.bak") 28 | readme_path = os.path.join(addon, "README.md") 29 | 30 | if os.path.exists(bak_path): 31 | print(f"Restoring {addon}...") 32 | shutil.copy(bak_path, readme_path) 33 | else: 34 | print(f"⚠️ No backup for {addon}") 35 | -------------------------------------------------------------------------------- /pterodactyl-panel/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: pterodactyl Panel Gameserver - BETA 3 | version: 0.9.1 4 | slug: pterodactyl_panel 5 | description: Open-Source Gameserver - Currently not fully working 6 | url: https://github.com/FaserF/hassio-addons/tree/master/pterodactyl-panel 7 | arch: 8 | - aarch64 9 | - amd64 10 | image: ghcr.io/faserf/pterodactyl-panel-{arch} 11 | services: 12 | - mysql:need 13 | # webui: "[PROTO:ssl]://[HOST]:[PORT:80]" 14 | map: 15 | - share:rw 16 | - ssl 17 | ingress: true 18 | init: false 19 | panel_icon: mdi:controller 20 | options: 21 | password: 22 | ssl: true 23 | certfile: fullchain.pem 24 | keyfile: privkey.pem 25 | schema: 26 | password: password 27 | ssl: bool 28 | certfile: str 29 | keyfile: str 30 | reset_database: bool? 31 | ports: 32 | "443": 443 33 | 80/tcp: 80 34 | ports_description: 35 | 80/tcp: Web interface http 36 | 443/tcp: SSL Web interface 37 | -------------------------------------------------------------------------------- /matterbridge/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | config_path=$(bashio::config 'config_path') 3 | log_level=$(bashio::config 'log_level') 4 | 5 | if ! [ -f $config_path ]; then 6 | echo "There is no $config_path file! Please create one for your needs! See here for an example: https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample" 7 | echo "Try restarting the addon once your config file has been fully configured an been put somewhere on the HA /share folder." 8 | exit 1 9 | fi 10 | echo "Found config file at $config_path . Copying it now." 11 | cp $config_path /etc/matterbridge/matterbridge.toml 12 | 13 | parameter="-conf /etc/matterbridge/matterbridge.toml" 14 | if [ $log_level = "debug" ]; then 15 | parameter="${parameter} -debug" 16 | fi 17 | echo "" >/var/log/matterbridge.log 18 | 19 | echo "Starting Matterbridge..." 20 | exec /bin/matterbridge ${parameter} & 21 | exec tail -f /var/log/matterbridge.log 22 | -------------------------------------------------------------------------------- /bash_script_executer/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bash Script Executer 3 | version: 1.9.1 4 | slug: bashscriptexecuter 5 | description: >- 6 | Execute your own bash scripts inside this Homeassistant Addon environment. 7 | url: https://github.com/FaserF/hassio-addons/tree/master/bash_script_executer 8 | arch: 9 | - aarch64 10 | - amd64 11 | image: ghcr.io/faserf/bash_script_executer-{arch} 12 | map: 13 | - share:rw 14 | init: false 15 | panel_icon: mdi:web-box 16 | options: 17 | script_path: "/share/scripts/mycoolscript.sh" 18 | script_path2: "false" 19 | script_path3: "false" 20 | schema: 21 | script_path: str 22 | script_argument1: str? 23 | script_argument2: str? 24 | script_argument3: str? 25 | script_path2: str 26 | script2_argument1: str? 27 | script2_argument2: str? 28 | script2_argument3: str? 29 | script_path3: str 30 | script3_argument1: str? 31 | script3_argument2: str? 32 | script3_argument3: str? 33 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Issues and feature requests 2 | 3 | You've found a bug in the source code, a mistake in the documentation or maybe 4 | you'd like a new feature? You can help us by submitting an issue to our 5 | [GitHub Repository][github]. Before you create an issue, make sure you search 6 | the archive, maybe your question was already answered. 7 | 8 | Even better: You could submit a pull request with a fix / new feature! 9 | 10 | ## Pull request process 11 | 12 | 1. Search our repository for open or closed [pull requests][prs] that relates 13 | to your submission. You don't want to duplicate effort. 14 | 15 | 1. You may merge the pull request in once you have the sign-off of two other 16 | developers, or if you do not have permission to do that, you may request 17 | the second reviewer to merge it for you. 18 | 19 | [github]: https://github.com/faserf/hassio-addons/issues 20 | [prs]: https://github.com/faserf/hassio-addons/pulls 21 | -------------------------------------------------------------------------------- /netboot-xyz/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Netboot.xyz 3 | version: 1.10.1 4 | slug: netboot-xyz 5 | description: PXE-Server to deploy a OS inside your local network 6 | url: https://github.com/FaserF/hassio-addons/tree/master/netboot-xyz 7 | arch: 8 | - aarch64 9 | - amd64 10 | image: ghcr.io/faserf/netboot-xyz-{arch} 11 | host_network: true 12 | # webui: http://[HOST]:[PORT:3000] 13 | ingress: true 14 | init: false 15 | full_access: true 16 | privileged: 17 | - NET_ADMIN 18 | map: 19 | - media:rw 20 | panel_icon: mdi:download-network 21 | options: 22 | path: "/media/netboot/image" 23 | path_config: "/media/netboot/config" 24 | dhcp_range: 192.168.178.200 25 | schema: 26 | path: str 27 | path_config: str 28 | dhcp_range: str 29 | ports: 30 | "85": 85 31 | "3000": 3000 32 | 69/udp: 69 33 | ports_description: 34 | "85": NGINX server for hosting assets 35 | "3000": Web configuration interface for netboot-xyz - DO NOT CHANGE! 36 | 69/udp: TFTP Port - DO NOT CHANGE! 37 | -------------------------------------------------------------------------------- /.unsupported/tuya-convert/start.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bashio 2 | backup_path=$(bashio::config 'backup_path') 3 | selection=$(bashio::config 'firmware') 4 | accept_eula=$(bashio::config 'accept_eula') 5 | 6 | touch config.txt 7 | #echo WLAN=wlan0 >config.txt 8 | echo AP=vtrust-flash >>config.txt 9 | echo GATEWAY=10.42.42.1 >>config.txt 10 | echo LOCALBACKUPDIR=$backup_path >>config.txt 11 | echo selection=$selection >>config.txt 12 | echo backupfolder=$backup_path >>config.txt 13 | 14 | if [ "$accept_eula" = "true" ]; then 15 | echo "EULA was accepted - starting script" 16 | touch ./scripts/eula_accepted 17 | ls -l 18 | ./start_flash.sh 19 | else 20 | echo "EULA wasnt accepted. Exiting. You can find the EULA here: https://github.com/ct-Open-Source/tuya-convert/blob/master/scripts/setup_checks.sh#L18" 21 | exit 22 | fi 23 | 24 | echo "Addon will now be stopped. If you want to flash another one, be sure to restart the addon." 25 | echo "======================================================" 26 | -------------------------------------------------------------------------------- /ShieldFile/config.yaml: -------------------------------------------------------------------------------- 1 | name: "ShieldFile" 2 | version: "1.0.13" 3 | slug: "shieldfile" 4 | description: "Secure, Web-based File Manager (SFTP over HTTPS)" 5 | url: "https://github.com/FaserF/hassio-addons/tree/master/ShieldFile" 6 | startup: services 7 | arch: 8 | - aarch64 9 | - amd64 10 | - armhf 11 | - armv7 12 | - i386 13 | boot: auto 14 | init: false 15 | host_network: true 16 | map: 17 | - config:rw 18 | - ssl:rw 19 | - share:rw 20 | - media:rw 21 | - backup:rw 22 | options: 23 | certfile: "fullchain.pem" 24 | keyfile: "privkey.pem" 25 | users: 26 | - username: "admin" 27 | password: "changeme" 28 | base_directory: "/share" 29 | port: 8443 30 | log_level: "info" 31 | schema: 32 | certfile: str 33 | keyfile: str 34 | users: 35 | - username: str 36 | password: str 37 | base_directory: str 38 | port: port 39 | log_level: list(debug|info|error|warning) 40 | # image: "ghcr.io/faserf/shieldfile-{arch}" # Disabled for local dev / bashio build 41 | -------------------------------------------------------------------------------- /.github/workflows/orchestrator-docs.yaml: -------------------------------------------------------------------------------- 1 | name: Orchestrator Docs & Standards 2 | 3 | on: 4 | schedule: 5 | - cron: "0 0 * * 1" # Weekly check 6 | workflow_dispatch: 7 | 8 | jobs: 9 | doc-audit: 10 | name: 📚 Documentation Audit 11 | runs-on: ubuntu-latest 12 | permissions: 13 | contents: write 14 | pull-requests: write 15 | steps: 16 | - name: ⤵️ Check out code 17 | uses: actions/checkout@v6 18 | 19 | - name: 📝 Update Templates 20 | run: | 21 | python3 .scripts/sync_templates.py 22 | 23 | - name: 📄 Standardize READMEs & Configs (Auto-Fix) 24 | run: | 25 | python3 .scripts/standardize_readmes.py 26 | 27 | - name: 📖 Badge & Style Audit (Auto-Fix) 28 | run: | 29 | python3 .scripts/check_docs.py --fix 30 | 31 | - name: 💾 Commit Changes 32 | uses: stefanzweifel/git-auto-commit-action@v7 33 | with: 34 | commit_message: "docs: auto-update documentation standards" 35 | -------------------------------------------------------------------------------- /matterbridge/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} AS builder 4 | 5 | RUN apk --no-cache add wget go git tar 6 | ARG MATTERBRIDGE_VERSION="v1.26.0" 7 | 8 | RUN wget https://github.com/42wim/matterbridge/archive/refs/tags/${MATTERBRIDGE_VERSION}.tar.gz 9 | 10 | RUN tar xzf ${MATTERBRIDGE_VERSION}.tar.gz 11 | RUN rm ${MATTERBRIDGE_VERSION}.tar.gz 12 | RUN cd /matterbridge-1.26.0 \ 13 | && CGO_ENABLED=0 go build -tags whatsappmulti -mod vendor -ldflags "-X github.com/42wim/matterbridge/version.GitHash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge 14 | 15 | FROM ${BUILD_FROM} 16 | RUN apk --no-cache add ca-certificates mailcap 17 | COPY --from=builder /bin/matterbridge /bin/matterbridge 18 | RUN mkdir /etc/matterbridge \ 19 | && touch /etc/matterbridge/matterbridge.toml \ 20 | && ln -sf /matterbridge.toml /etc/matterbridge/matterbridge.toml 21 | 22 | # Copy data for add-on 23 | COPY run.sh / 24 | RUN chmod a+x /run.sh 25 | RUN chmod a+x /bin/matterbridge 26 | CMD [ "/run.sh" ] 27 | -------------------------------------------------------------------------------- /.github/paths-filter.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Those are the addon path filters used in the workflows to determine which 3 | # addon needs to be build. 4 | --- 5 | AegisBot: AegisBot/** 6 | ShieldDNS: ShieldDNS/** 7 | ShieldFile: ShieldFile/** # Image : yes 8 | apache2-minimal-mariadb: apache2-minimal-mariadb/** 9 | apache2-minimal: apache2-minimal/** # Image : yes 10 | apache2: apache2/** # Image : yes 11 | bash_script_executer: bash_script_executer/** # Image : yes 12 | bt-mqtt-gateway: bt-mqtt-gateway/** 13 | freenom-dns-updater: freenom-dns-updater/** 14 | matterbridge: matterbridge/** # Image : yes 15 | netboot-xyz: netboot-xyz/** # Image : yes 16 | openssl: openssl/** # Image : yes 17 | pterodactyl-panel: pterodactyl-panel/** # Image : yes 18 | pterodactyl-wings: pterodactyl-wings/** # Image : yes 19 | solumati: solumati/** # Image : yes 20 | switch_lan_play: switch_lan_play/** # Image : yes 21 | switch_lan_play_server: switch_lan_play_server/** 22 | tado_aa: tado_aa/** # Image : yes 23 | tuya-convert: tuya-convert/** 24 | wiki.js: wiki.js/** 25 | xqrepack: xqrepack/** 26 | -------------------------------------------------------------------------------- /whatsapp/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 0.2.0 4 | 5 | - 🛠️ **Fix**: Ingress Dashboard now works correctly (trailing slash URL fix) 6 | - 🛠️ **Fix**: Browser fingerprint consistency (macOS/Chrome) 7 | - ⬆️ **Upgrade**: Baileys to 6.7.21 (latest v6) 8 | - ✨ **New**: Debug logging in browser console for Ingress fetch calls 9 | 10 | ## 0.1.0 11 | 12 | - ✨ **New**: Secured API with Token Authentication (Ingress & Integration) 13 | - ✨ **New**: Ingress Dashboard with Status, API Token and Live QR Code 14 | - ✨ **New**: Smart Discovery (Auto-detects Addon Hostname) 15 | - ✨ **New**: Reset Session option in Integration 16 | - 🛠️ **Fix**: Ingress Compatibility (Wildcard Routing, Relative Paths) 17 | - 🛠️ **Fix**: Build & Startup Issues (Node 24, S6 Overlay) 18 | 19 | ## 0.0.2 20 | 21 | - Upgrade to Node.js 24 (Alpine Edge) 22 | - Convert backend to ESM (ES Modules) 23 | - Full S6 Service Supervision (Platinum Standard) 24 | - Change default port to 8066 25 | - Fix Translation Errors 26 | - Add Icons 27 | 28 | ## 0.0.1 29 | 30 | - Initial Release (Baileys Backend) 31 | -------------------------------------------------------------------------------- /solumati/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Solumati" 3 | version: "1.5.10" 4 | slug: "solumati" 5 | description: "The Anti-Swipe Revolution - Self-hosted dating platform focused on meaningful matches." 6 | url: "https://github.com/FaserF/hassio-addons/tree/master/solumati" 7 | arch: 8 | - aarch64 9 | - amd64 10 | # image: ghcr.io/faserf/solumati-{arch} 11 | init: false 12 | ingress: true 13 | panel_icon: mdi:heart-multiple 14 | panel_title: Solumati 15 | map: 16 | - homeassistant_config:rw 17 | - share:rw 18 | ports: 19 | 80/tcp: 8099 20 | ports_description: 21 | 80/tcp: "Web Interface Port (use Ingress for secure access)" 22 | options: 23 | log_level: info 24 | test_mode: false 25 | app_base_url: "" 26 | factory_reset: false 27 | marketing_page_enabled: false 28 | dev_use_main_branch: false 29 | github_token: "" 30 | schema: 31 | log_level: list(trace|debug|info|notice|warning|error|fatal)? 32 | test_mode: bool 33 | app_base_url: str? 34 | factory_reset: bool? 35 | marketing_page_enabled: bool? 36 | dev_use_main_branch: bool? 37 | github_token: str? 38 | -------------------------------------------------------------------------------- /apache2-minimal/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Apache2 Minimal 3 | version: 2.15.1 4 | slug: apache2-minimal 5 | description: Open Source Webserver without PHP and minimal extra modules. 6 | url: https://github.com/FaserF/hassio-addons/tree/master/apache2-minimal 7 | arch: 8 | - aarch64 9 | - amd64 10 | image: ghcr.io/faserf/apache2-minimal-{arch} 11 | map: 12 | - ssl:rw 13 | - media:rw 14 | - share:rw 15 | ingress: true 16 | init: false 17 | panel_icon: mdi:web-box 18 | options: 19 | document_root: /share/htdocs 20 | default_conf: default 21 | default_ssl_conf: default 22 | website_name: null 23 | ssl: true 24 | certfile: fullchain.pem 25 | keyfile: privkey.pem 26 | init_commands: [] 27 | schema: 28 | document_root: str 29 | default_conf: str 30 | default_ssl_conf: str 31 | website_name: str 32 | username: str? 33 | password: password? 34 | ssl: bool 35 | certfile: str 36 | keyfile: str 37 | init_commands: 38 | - str? 39 | ports: 40 | 80/tcp: 80 41 | 443/tcp: 8324 42 | ports_description: 43 | 80/tcp: Web interface http 44 | 443/tcp: SSL Web interface 45 | -------------------------------------------------------------------------------- /ShieldDNS/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM=ghcr.io/hassio-addons/base:19.0.0 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Setup CoreDNS and Cloudflared 6 | COPY --from=coredns/coredns:latest /coredns /usr/bin/coredns 7 | COPY --from=cloudflare/cloudflared:latest /usr/local/bin/cloudflared /usr/bin/cloudflared 8 | 9 | # Install dependencies (if any extra needed beyond base) 10 | # We add netcat-openbsd for port checking (nc) and net-tools for netstat 11 | RUN apk add --no-cache bind-tools openssl nginx netcat-openbsd net-tools 12 | 13 | # Create web root and required directories 14 | RUN mkdir -p /var/www/html /run/nginx 15 | 16 | # Copy Web Assets 17 | COPY www/index.html /var/www/html/index.html 18 | COPY www/logo.png /var/www/html/logo.png 19 | 20 | # Copy Addon run script to S6 services directory 21 | # We move this to services.d to allow S6 to supervise it properly 22 | # preventing the "s6-overlay-suexec: fatal: can only run as pid 1" error 23 | RUN mkdir -p /etc/services.d/shielddns 24 | COPY run.sh /etc/services.d/shielddns/run 25 | RUN dos2unix /etc/services.d/shielddns/run && chmod +x /etc/services.d/shielddns/run -------------------------------------------------------------------------------- /apache2/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Apache2 3 | version: 2.15.1 4 | slug: apache2 5 | description: Open Source Webserver with PHP and MariaDB. 6 | url: https://github.com/FaserF/hassio-addons/tree/master/apache2 7 | arch: 8 | - aarch64 9 | - amd64 10 | image: ghcr.io/faserf/apache2-{arch} 11 | # webui: http://[HOST]:[PORT:80] 12 | map: 13 | - ssl:rw 14 | - media:rw 15 | - share:rw 16 | ingress: true 17 | init: false 18 | panel_icon: mdi:web-box 19 | options: 20 | document_root: /share/htdocs 21 | php_ini: default 22 | default_conf: default 23 | default_ssl_conf: default 24 | website_name: null 25 | ssl: true 26 | certfile: fullchain.pem 27 | keyfile: privkey.pem 28 | init_commands: [] 29 | schema: 30 | document_root: str 31 | php_ini: str 32 | default_conf: str 33 | default_ssl_conf: str 34 | website_name: str 35 | username: str? 36 | password: password? 37 | ssl: bool 38 | certfile: str 39 | keyfile: str 40 | init_commands: 41 | - str? 42 | ports: 43 | 80/tcp: 80 44 | 443/tcp: 8324 45 | ports_description: 46 | 80/tcp: Web interface http 47 | 443/tcp: SSL Web interface 48 | -------------------------------------------------------------------------------- /whatsapp/DOCS.md: -------------------------------------------------------------------------------- 1 | # WhatsApp Addon Documentation 2 | 3 | ## Architecture 4 | 5 | This add-on is a "bridge". It does **not** communicate with Home Assistant directly 6 | via the Event Bus. Instead, it acts as a server that the **WhatsApp Custom 7 | Component** connects to. 8 | 9 | **Flow:** 10 | `Home Assistant` -> `WhatsApp Integration` -> `HTTP (Port 8000)` -> `This Addon` 11 | -> `Playwright (Chrome)` -> `WhatsApp Web` 12 | 13 | ## Troubleshooting 14 | 15 | ### "Browser Context Closed" 16 | 17 | If you see errors about the browser context, it might have crashed. The add-on is 18 | designed to restart the browser process automatically on the next request or crash 19 | the container to let Supervisor restart it. 20 | 21 | ### Session Lost 22 | 23 | If you lose your session, you may need to re-scan the QR code. You can trigger 24 | a new scan by reinstalling the integration or (in future versions) calling a 25 | "Logout" service. 26 | 27 | ## Persistence 28 | 29 | Your session data is stored in `/data`. This directory is persistent across add-on 30 | updates and restarts, ensuring you don't have to scan the QR code frequently. 31 | -------------------------------------------------------------------------------- /netboot-xyz/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | ARG NETBOOTXYZ_VERSION="0.7.6" 6 | 7 | RUN \ 8 | echo "**** install runtime packages ****" && \ 9 | apk add --no-cache \ 10 | dnsmasq \ 11 | nginx \ 12 | nodejs \ 13 | tftp-hpa && \ 14 | echo "**** install build packages ****" && \ 15 | apk add --no-cache --virtual=build-dependencies \ 16 | npm && \ 17 | echo "**** install WebApp version ${NETBOOTXYZ_VERSION} ****" && \ 18 | curl -o /tmp/webapp.tar.gz -L https://github.com/netbootxyz/webapp/archive/${NETBOOTXYZ_VERSION}.tar.gz && \ 19 | mkdir -p /app/ && tar xf /tmp/webapp.tar.gz -C \ 20 | /app/ --strip-components=1 && \ 21 | npm install --prefix /app && \ 22 | echo "**** cleanup ****" && \ 23 | apk del --purge \ 24 | build-dependencies && \ 25 | rm -rf \ 26 | /tmp/* 27 | 28 | # copy local files 29 | COPY root/ / 30 | 31 | # app runs on port 3000 32 | EXPOSE 3000 33 | 34 | # Ensure all run files from the services are executable 35 | RUN chmod a+x /etc/services.d/*/run 36 | 37 | # Configure DNSMASQ 38 | RUN chmod a+x /etc/cont-init.d/* 39 | -------------------------------------------------------------------------------- /apache2-minimal/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | document_root: 3 | name: "Document Root" 4 | description: "Directory where the websites are located." 5 | default_conf: 6 | name: "Apache Configuration File" 7 | description: "Name of the Apache configuration file to use." 8 | default_ssl_conf: 9 | name: "Apache SSL Configuration File" 10 | description: "Name of the Apache SSL configuration file to use." 11 | website_name: 12 | name: "Website Name" 13 | description: "Name of the website." 14 | username: 15 | name: "Basic Auth Username" 16 | description: "Username for Basic Authentication." 17 | password: 18 | name: "Basic Auth Password" 19 | description: "Password for Basic Authentication." 20 | ssl: 21 | name: "Enable SSL" 22 | description: "Enable SSL support." 23 | certfile: 24 | name: "Certificate File" 25 | description: "Name of the certificate file." 26 | keyfile: 27 | name: "Private Key File" 28 | description: "Name of the private key file." 29 | init_commands: 30 | name: "Init Commands" 31 | description: "List of custom commands to run at startup." 32 | -------------------------------------------------------------------------------- /tado_aa/LICENSE.txt: -------------------------------------------------------------------------------- 1 | This project is licensed under the MIT License (c) 2019–2025 FaserF. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. -------------------------------------------------------------------------------- /.github/workflows/orchestrator-automerge.yaml: -------------------------------------------------------------------------------- 1 | name: Orchestrator Auto-Merge 2 | 3 | on: 4 | pull_request: 5 | types: 6 | - opened 7 | - synchronize 8 | - reopened 9 | 10 | jobs: 11 | enable-auto-merge: 12 | name: 🤖 Enable Auto-Merge 13 | runs-on: ubuntu-latest 14 | if: >- 15 | github.event.pull_request.head.repo.fork == false && 16 | ( 17 | github.event.pull_request.user.login == 'dependabot[bot]' || 18 | github.event.pull_request.user.login == 'renovate[bot]' || 19 | github.event.pull_request.user.login == 'FaserF' 20 | ) 21 | permissions: 22 | contents: write 23 | pull-requests: write 24 | steps: 25 | - name: 🤖 Enable Native Auto-Merge 26 | env: 27 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 28 | PR_URL: ${{ github.event.pull_request.html_url }} 29 | run: | 30 | # Enable strict auto-merge. 31 | # This delegates the 'when to merge' decision to GitHub's Branch Protection rules. 32 | # The PR will only merge once ALL required status checks (CI) have passed. 33 | gh pr merge --auto --squash "$PR_URL" 34 | -------------------------------------------------------------------------------- /.unsupported/bt-mqtt-gateway/start.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | config_path=$(bashio::config 'config_path') 3 | DEBUG=$(bashio::config 'debug') 4 | 5 | if ! [ -f $config_path ]; then 6 | echo "There is no $config_path file! Please have a look at the example config https://github.com/zewelor/bt-mqtt-gateway/blob/master/config.yaml.example ." 7 | echo "Try restarting the addon once your config file has been fully configured an been put somewhere on the HA /share folder." 8 | exit 1 9 | fi 10 | 11 | source ./venv/bin/activate 12 | 13 | cd /application 14 | echo "Found config file at $config_path . Copying it now." 15 | cp $config_path config.yaml 16 | 17 | echo "Huge thanks to @zewelor who is the creator of bt-mqtt-gateway - https://github.com/zewelor/bt-mqtt-gateway" 18 | echo "If there are any bugs occurring below this line, please report it to the bt-mqtt-gateway developer and not to @FaserF - thanks." 19 | 20 | if [ "$DEBUG" = 'true' ]; then 21 | echo "Start bt-mqtt gateway in debug mode" 22 | python3 ./gateway.py -d 23 | status=$? 24 | echo "Gateway died..." 25 | exit $status 26 | else 27 | echo "Starting bt-mqtt-gateway in normal mode" 28 | python3 ./gateway.py 29 | fi 30 | -------------------------------------------------------------------------------- /solumati/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | log_level: 3 | name: "Log Level" 4 | description: "Controls the verbosity of the logs. 'info' is recommended for normal operation." 5 | test_mode: 6 | name: "Test Mode" 7 | description: "If enabled, the add-on will generate dummy users and data for testing purposes." 8 | app_base_url: 9 | name: "Application Base URL" 10 | description: "The external URL where Solumati is accessible. Used for generating links. If empty, it tries to auto-detect from Ingress." 11 | factory_reset: 12 | name: "Factory Reset" 13 | description: "⚠️ DANGER: If enabled, ALL data (users, chats, images) will be permanently deleted on the next restart. Disable immediately after use!" 14 | marketing_page_enabled: 15 | name: "Enable Marketing Page" 16 | description: "If enabled, a landing/marketing page will be shown to unauthenticated users instead of the login screen." 17 | dev_use_main_branch: 18 | name: "Developer: Use Main Branch" 19 | description: "⚠️ ADVANCED: If enabled, the add-on will download and build the latest code from the GitHub 'main' branch on EVERY start. This significantly increases startup time." 20 | -------------------------------------------------------------------------------- /apache2-minimal-mariadb/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Apache2 Minimal with MariaDB Client 3 | version: 2.15.1 4 | slug: apache2-minimal-mariadb 5 | description: Open Source Webserver with MariaDB Client and some PHP Modules. 6 | url: https://github.com/FaserF/hassio-addons/tree/master/apache2-minimal-mariadb 7 | arch: 8 | - aarch64 9 | - amd64 10 | # image: ghcr.io/faserf/apache2-minimal-mariadb-{arch} 11 | map: 12 | - ssl:rw 13 | - media:rw 14 | - share:rw 15 | ingress: true 16 | init: false 17 | panel_icon: mdi:web-box 18 | options: 19 | document_root: /share/htdocs 20 | php_ini: default 21 | default_conf: default 22 | default_ssl_conf: default 23 | website_name: null 24 | ssl: true 25 | certfile: fullchain.pem 26 | keyfile: privkey.pem 27 | init_commands: [] 28 | schema: 29 | document_root: str 30 | php_ini: str 31 | default_conf: str 32 | default_ssl_conf: str 33 | website_name: str 34 | username: str? 35 | password: password? 36 | ssl: bool 37 | certfile: str 38 | keyfile: str 39 | init_commands: 40 | - str? 41 | ports: 42 | 80/tcp: 80 43 | 443/tcp: 8324 44 | ports_description: 45 | 80/tcp: Web interface http 46 | 443/tcp: SSL Web interface 47 | -------------------------------------------------------------------------------- /apache2-minimal/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | document_root: 3 | name: "Dokumenten-Stammverzeichnis" 4 | description: "Verzeichnis, in dem sich die Webseiten befinden." 5 | default_conf: 6 | name: "Apache-Konfigurationsdatei" 7 | description: "Name der zu verwendenden Apache-Konfigurationsdatei." 8 | default_ssl_conf: 9 | name: "Apache-SSL-Konfigurationsdatei" 10 | description: "Name der zu verwendenden Apache-SSL-Konfigurationsdatei." 11 | website_name: 12 | name: "Name der Webseite" 13 | description: "Name der Webseite." 14 | username: 15 | name: "Benutzername" 16 | description: "Benutzername für die Basic Authentication." 17 | password: 18 | name: "Passwort" 19 | description: "Passwort für die Basic Authentication." 20 | ssl: 21 | name: "SSL aktivieren" 22 | description: "Aktiviert die SSL-Unterstützung." 23 | certfile: 24 | name: "Zertifikatsdatei" 25 | description: "Name der Zertifikatsdatei." 26 | keyfile: 27 | name: "Private Schlüsseldatei" 28 | description: "Name der privaten Schlüsseldatei." 29 | init_commands: 30 | name: "Startbefehle" 31 | description: "Liste benutzerdefinierter Befehle, die beim Start ausgeführt werden sollen." 32 | -------------------------------------------------------------------------------- /AegisBot/nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 8099 default_server; 3 | server_name _; 4 | 5 | # Frontend (React App) - Static Files 6 | location / { 7 | root /app/frontend; 8 | index index.html; 9 | try_files $uri $uri/ /index.html; 10 | 11 | # Cache static assets 12 | location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { 13 | expires 1y; 14 | add_header Cache-Control "public, immutable"; 15 | } 16 | } 17 | 18 | # Backend (FastAPI) - API Proxy 19 | location /api { 20 | proxy_pass http://127.0.0.1:8001; 21 | proxy_http_version 1.1; 22 | proxy_set_header Host $host; 23 | proxy_set_header X-Real-IP $remote_addr; 24 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 25 | proxy_set_header X-Forwarded-Proto $scheme; 26 | 27 | # WebSocket support (for real-time dashboard) 28 | proxy_set_header Upgrade $http_upgrade; 29 | proxy_set_header Connection "upgrade"; 30 | 31 | # Timeouts 32 | proxy_connect_timeout 300s; 33 | proxy_send_timeout 300s; 34 | proxy_read_timeout 300s; 35 | } 36 | 37 | # File uploads 38 | client_max_body_size 100M; 39 | } 40 | -------------------------------------------------------------------------------- /apache2/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | document_root: 3 | name: "Document Root" 4 | description: "Directory where the websites are located." 5 | php_ini: 6 | name: "PHP Configuration File" 7 | description: "Name of the PHP configuration file to use." 8 | default_conf: 9 | name: "Apache Configuration File" 10 | description: "Name of the Apache configuration file to use." 11 | default_ssl_conf: 12 | name: "Apache SSL Configuration File" 13 | description: "Name of the Apache SSL configuration file to use." 14 | website_name: 15 | name: "Website Name" 16 | description: "Name of the website." 17 | username: 18 | name: "Basic Auth Username" 19 | description: "Username for Basic Authentication." 20 | password: 21 | name: "Basic Auth Password" 22 | description: "Password for Basic Authentication." 23 | ssl: 24 | name: "Enable SSL" 25 | description: "Enable SSL support." 26 | certfile: 27 | name: "Certificate File" 28 | description: "Name of the certificate file." 29 | keyfile: 30 | name: "Private Key File" 31 | description: "Name of the private key file." 32 | init_commands: 33 | name: "Init Commands" 34 | description: "List of custom commands to run at startup." 35 | -------------------------------------------------------------------------------- /apache2-minimal-mariadb/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | document_root: 3 | name: "Document Root" 4 | description: "Directory where the websites are located." 5 | php_ini: 6 | name: "PHP Configuration File" 7 | description: "Name of the PHP configuration file to use." 8 | default_conf: 9 | name: "Apache Configuration File" 10 | description: "Name of the Apache configuration file to use." 11 | default_ssl_conf: 12 | name: "Apache SSL Configuration File" 13 | description: "Name of the Apache SSL configuration file to use." 14 | website_name: 15 | name: "Website Name" 16 | description: "Name of the website." 17 | username: 18 | name: "Basic Auth Username" 19 | description: "Username for Basic Authentication." 20 | password: 21 | name: "Basic Auth Password" 22 | description: "Password for Basic Authentication." 23 | ssl: 24 | name: "Enable SSL" 25 | description: "Enable SSL support." 26 | certfile: 27 | name: "Certificate File" 28 | description: "Name of the certificate file." 29 | keyfile: 30 | name: "Private Key File" 31 | description: "Name of the private key file." 32 | init_commands: 33 | name: "Init Commands" 34 | description: "List of custom commands to run at startup." 35 | -------------------------------------------------------------------------------- /pterodactyl-panel/root/etc/nginx/templates/http.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80 default; 3 | listen [::]:80 default; 4 | 5 | root /var/www/html/public; 6 | index index.php; 7 | charset utf-8; 8 | 9 | location / { 10 | try_files $uri $uri/ /index.php?$query_string; 11 | } 12 | 13 | location = /favicon.ico { access_log off; log_not_found off; } 14 | location = /robots.txt { access_log off; log_not_found off; } 15 | 16 | # allow larger file uploads and longer script runtimes 17 | client_max_body_size 100m; 18 | client_body_timeout 120s; 19 | 20 | sendfile off; 21 | 22 | location ~ \.php$ { 23 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 24 | fastcgi_pass unix:/var/run/php-fpm.sock; 25 | fastcgi_index index.php; 26 | include fastcgi_params; 27 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 28 | fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M"; 29 | fastcgi_intercept_errors off; 30 | fastcgi_buffer_size 16k; 31 | fastcgi_buffers 4 16k; 32 | fastcgi_connect_timeout 300; 33 | fastcgi_send_timeout 300; 34 | fastcgi_read_timeout 300; 35 | } 36 | 37 | location ~ /\.ht { 38 | deny all; 39 | } 40 | } -------------------------------------------------------------------------------- /solumati/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | log_level: 3 | name: "Log Level" 4 | description: "Steuert die Ausführlichkeit der Protokolle. 'info' wird für den normalen Betrieb empfohlen." 5 | test_mode: 6 | name: "Test Modus" 7 | description: "Wenn aktiviert, generiert das Add-on Dummy-Benutzer und Daten zu Testzwecken." 8 | app_base_url: 9 | name: "Anwendungs-Basis-URL" 10 | description: "Die externe URL, unter der Solumati erreichbar ist. Wird zum Erstellen von Links verwendet. Wenn leer, wird versucht, sie automatisch von Ingress zu erkennen." 11 | factory_reset: 12 | name: "Werkseinstellungen zurücksetzen" 13 | description: "⚠️ ACHTUNG: Wenn aktiviert, werden ALLE Daten (Benutzer, Chats, Bilder) beim nächsten Neustart dauerhaft gelöscht. Nach Benutzung sofort wieder deaktivieren!" 14 | marketing_page_enabled: 15 | name: "Marketing-Seite aktivieren" 16 | description: "Wenn aktiviert, wird nicht angemeldeten Benutzern eine Landing-/Marketing-Seite anstelle des Anmeldebildschirms angezeigt." 17 | dev_use_main_branch: 18 | name: "Entwickler: Main Branch nutzen" 19 | description: "⚠️ FORTGESCHRITTEN: Wenn aktiviert, lädt das Add-on bei JEDEM Start den neuesten Code aus dem GitHub 'main' Branch herunter und baut ihn neu. Dies verlängert die Startzeit erheblich." 20 | -------------------------------------------------------------------------------- /apache2/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | document_root: 3 | name: "Dokumenten-Stammverzeichnis" 4 | description: "Verzeichnis, in dem sich die Webseiten befinden." 5 | php_ini: 6 | name: "PHP-Konfigurationsdatei" 7 | description: "Name der zu verwendenden PHP-Konfigurationsdatei." 8 | default_conf: 9 | name: "Apache-Konfigurationsdatei" 10 | description: "Name der zu verwendenden Apache-Konfigurationsdatei." 11 | default_ssl_conf: 12 | name: "Apache-SSL-Konfigurationsdatei" 13 | description: "Name der zu verwendenden Apache-SSL-Konfigurationsdatei." 14 | website_name: 15 | name: "Name der Webseite" 16 | description: "Name der Webseite." 17 | username: 18 | name: "Benutzername" 19 | description: "Benutzername für die Basic Authentication." 20 | password: 21 | name: "Passwort" 22 | description: "Passwort für die Basic Authentication." 23 | ssl: 24 | name: "SSL aktivieren" 25 | description: "Aktiviert die SSL-Unterstützung." 26 | certfile: 27 | name: "Zertifikatsdatei" 28 | description: "Name der Zertifikatsdatei." 29 | keyfile: 30 | name: "Private Schlüsseldatei" 31 | description: "Name der privaten Schlüsseldatei." 32 | init_commands: 33 | name: "Startbefehle" 34 | description: "Liste benutzerdefinierter Befehle, die beim Start ausgeführt werden sollen." 35 | -------------------------------------------------------------------------------- /apache2-minimal-mariadb/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | document_root: 3 | name: "Dokumenten-Stammverzeichnis" 4 | description: "Verzeichnis, in dem sich die Webseiten befinden." 5 | php_ini: 6 | name: "PHP-Konfigurationsdatei" 7 | description: "Name der zu verwendenden PHP-Konfigurationsdatei." 8 | default_conf: 9 | name: "Apache-Konfigurationsdatei" 10 | description: "Name der zu verwendenden Apache-Konfigurationsdatei." 11 | default_ssl_conf: 12 | name: "Apache-SSL-Konfigurationsdatei" 13 | description: "Name der zu verwendenden Apache-SSL-Konfigurationsdatei." 14 | website_name: 15 | name: "Name der Webseite" 16 | description: "Name der Webseite." 17 | username: 18 | name: "Benutzername" 19 | description: "Benutzername für die Basic Authentication." 20 | password: 21 | name: "Passwort" 22 | description: "Passwort für die Basic Authentication." 23 | ssl: 24 | name: "SSL aktivieren" 25 | description: "Aktiviert die SSL-Unterstützung." 26 | certfile: 27 | name: "Zertifikatsdatei" 28 | description: "Name der Zertifikatsdatei." 29 | keyfile: 30 | name: "Private Schlüsseldatei" 31 | description: "Name der privaten Schlüsseldatei." 32 | init_commands: 33 | name: "Startbefehle" 34 | description: "Liste benutzerdefinierter Befehle, die beim Start ausgeführt werden sollen." 35 | -------------------------------------------------------------------------------- /bash_script_executer/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | script_path: 3 | name: "Script Path (1)" 4 | description: "Path to the first bash script to execute." 5 | script_argument1: 6 | name: "Argument 1 (1)" 7 | description: "First argument for the first script." 8 | script_argument2: 9 | name: "Argument 2 (1)" 10 | description: "Second argument for the first script." 11 | script_argument3: 12 | name: "Argument 3 (1)" 13 | description: "Third argument for the first script." 14 | script_path2: 15 | name: "Script Path (2)" 16 | description: "Path to the second bash script to execute." 17 | script2_argument1: 18 | name: "Argument 1 (2)" 19 | description: "First argument for the second script." 20 | script2_argument2: 21 | name: "Argument 2 (2)" 22 | description: "Second argument for the second script." 23 | script2_argument3: 24 | name: "Argument 3 (2)" 25 | description: "Third argument for the second script." 26 | script_path3: 27 | name: "Script Path (3)" 28 | description: "Path to the third bash script to execute." 29 | script3_argument1: 30 | name: "Argument 1 (3)" 31 | description: "First argument for the third script." 32 | script3_argument2: 33 | name: "Argument 2 (3)" 34 | description: "Second argument for the third script." 35 | script3_argument3: 36 | name: "Argument 3 (3)" 37 | description: "Third argument for the third script." 38 | -------------------------------------------------------------------------------- /bash_script_executer/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | script_path: 3 | name: "Skript-Pfad (1)" 4 | description: "Pfad zum ersten auszuführenden Bash-Skript." 5 | script_argument1: 6 | name: "Argument 1 (1)" 7 | description: "Erstes Argument für das erste Skript." 8 | script_argument2: 9 | name: "Argument 2 (1)" 10 | description: "Zweites Argument für das erste Skript." 11 | script_argument3: 12 | name: "Argument 3 (1)" 13 | description: "Drittes Argument für das erste Skript." 14 | script_path2: 15 | name: "Skript-Pfad (2)" 16 | description: "Pfad zum zweiten auszuführenden Bash-Skript." 17 | script2_argument1: 18 | name: "Argument 1 (2)" 19 | description: "Erstes Argument für das zweite Skript." 20 | script2_argument2: 21 | name: "Argument 2 (2)" 22 | description: "Zweites Argument für das zweite Skript." 23 | script2_argument3: 24 | name: "Argument 3 (2)" 25 | description: "Drittes Argument für das zweite Skript." 26 | script_path3: 27 | name: "Skript-Pfad (3)" 28 | description: "Pfad zum dritten auszuführenden Bash-Skript." 29 | script3_argument1: 30 | name: "Argument 1 (3)" 31 | description: "Erstes Argument für das dritte Skript." 32 | script3_argument2: 33 | name: "Argument 2 (3)" 34 | description: "Zweites Argument für das dritte Skript." 35 | script3_argument3: 36 | name: "Argument 3 (3)" 37 | description: "Drittes Argument für das dritte Skript." 38 | -------------------------------------------------------------------------------- /AegisBot/config.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: AegisBot 3 | version: "0.1.4" 4 | slug: aegisbot 5 | description: Production-ready Telegram Moderation Bot with AI-driven FAQ and Security Features 6 | url: https://github.com/FaserF/AegisBot 7 | arch: 8 | - aarch64 9 | - amd64 10 | - armv7 11 | startup: application 12 | boot: auto 13 | init: false 14 | ingress: true 15 | ingress_port: 8099 16 | ingress_stream: true 17 | panel_icon: mdi:robot 18 | ports: 19 | 8099/tcp: 8099 20 | ports_description: 21 | 8099/tcp: Web Interface (HTTP) 22 | map: 23 | - type: share 24 | read_only: false 25 | options: 26 | version: "latest" 27 | github_token: "" 28 | github_repo: "FaserF/AegisBot" 29 | developer_mode: false 30 | reset_database: false 31 | log_level: info 32 | database: 33 | type: sqlite 34 | secret_key: "" 35 | project_name: "AegisBot" 36 | debug: false 37 | demo_mode: false 38 | demo_mode_type: ephemeral 39 | schema: 40 | version: str 41 | github_token: password? 42 | github_repo: str? 43 | developer_mode: bool 44 | reset_database: bool 45 | log_level: list(trace|debug|info|warning|error|fatal)? 46 | database: 47 | type: list(sqlite|postgresql) 48 | postgresql_host: str? 49 | postgresql_port: port? 50 | postgresql_user: str? 51 | postgresql_password: password? 52 | postgresql_database: str? 53 | secret_key: password? 54 | project_name: str? 55 | debug: bool? 56 | demo_mode: bool 57 | demo_mode_type: list(ephemeral|persistent)? 58 | -------------------------------------------------------------------------------- /apache2-minimal/README.md: -------------------------------------------------------------------------------- 1 | # Apache2 Minimal 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_apache2-minimal) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Open Source Webserver without PHP and minimal extra modules. 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | Have a look at the README for Apache2 full Addon for more informations. 17 | [README](https://github.com/FaserF/hassio-addons/blob/master/apache2/README.md) 18 | 19 | --- 20 | 21 | ## ⚙️ Configuration 22 | 23 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 24 | 25 | ### Options 26 | 27 | ```yaml 28 | certfile: fullchain.pem 29 | default_conf: default 30 | default_ssl_conf: default 31 | document_root: /share/htdocs 32 | init_commands: [] 33 | keyfile: privkey.pem 34 | ssl: true 35 | website_name: null 36 | ``` 37 | 38 | --- 39 | 40 | ## 👨‍💻 Credits & License 41 | 42 | This project is open-source and available under the MIT License. 43 | Maintained by **FaserF**. 44 | -------------------------------------------------------------------------------- /solumati/nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name localhost; 4 | 5 | # Security headers 6 | add_header X-Frame-Options "SAMEORIGIN" always; 7 | add_header X-Content-Type-Options "nosniff" always; 8 | add_header X-XSS-Protection "1; mode=block" always; 9 | add_header Referrer-Policy "strict-origin-when-cross-origin" always; 10 | 11 | root /app/frontend; 12 | index index.html; 13 | 14 | # Serve React Frontend 15 | location / { 16 | try_files $uri $uri/ /index.html; 17 | } 18 | 19 | # Proxy API requests to Backend 20 | location /api/ { 21 | proxy_pass http://127.0.0.1:7777/; 22 | proxy_http_version 1.1; 23 | proxy_set_header Upgrade $http_upgrade; 24 | proxy_set_header Connection "upgrade"; 25 | proxy_set_header Host $host; 26 | proxy_set_header X-Real-IP $remote_addr; 27 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 28 | } 29 | 30 | # Proxy Docs/Redoc 31 | location /docs { 32 | proxy_pass http://127.0.0.1:7777; 33 | } 34 | 35 | location /redoc { 36 | proxy_pass http://127.0.0.1:7777; 37 | } 38 | 39 | location /openapi.json { 40 | proxy_pass http://127.0.0.1:7777; 41 | } 42 | 43 | # Proxy Static Files from Backend (User Images) 44 | location /static { 45 | proxy_pass http://127.0.0.1:7777; 46 | } 47 | 48 | # Allow Health Checks 49 | location /health { 50 | proxy_pass http://127.0.0.1:7777; 51 | } 52 | } -------------------------------------------------------------------------------- /apache2-minimal-mariadb/README.md: -------------------------------------------------------------------------------- 1 | # Apache2 Minimal with MariaDB Client 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_apache2-minimal-mariadb) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Open Source Webserver with MariaDB Client and some PHP Modules. 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | Have a look at the README for Apache2 full Addon for more informations. 17 | [README](https://github.com/FaserF/hassio-addons/blob/master/apache2/README.md) 18 | 19 | --- 20 | 21 | ## ⚙️ Configuration 22 | 23 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 24 | 25 | ### Options 26 | 27 | ```yaml 28 | certfile: fullchain.pem 29 | default_conf: default 30 | default_ssl_conf: default 31 | document_root: /share/htdocs 32 | init_commands: [] 33 | keyfile: privkey.pem 34 | php_ini: default 35 | ssl: true 36 | website_name: null 37 | ``` 38 | 39 | --- 40 | 41 | ## 👨‍💻 Credits & License 42 | 43 | This project is open-source and available under the MIT License. 44 | Maintained by **FaserF**. 45 | -------------------------------------------------------------------------------- /netboot-xyz/root/etc/cont-init.d/36-download-menus: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bash 2 | 3 | # create local logs dir 4 | mkdir -p \ 5 | /config/menus/remote \ 6 | /config/menus/local 7 | 8 | # download menus if not found 9 | if [[ ! -f /config/menus/remote/menu.ipxe ]]; then 10 | if [[ -z ${MENU_VERSION+x} ]]; then \ 11 | MENU_VERSION=$(curl -sL "https://api.github.com/repos/netbootxyz/netboot.xyz/releases/latest" | jq -r '.tag_name') 12 | fi 13 | echo "[netbootxyz-init] Downloading Netboot.xyz at ${MENU_VERSION}" 14 | # menu files 15 | curl -o \ 16 | /config/endpoints.yml -sL \ 17 | "https://raw.githubusercontent.com/netbootxyz/netboot.xyz/${MENU_VERSION}/endpoints.yml" 18 | curl -o \ 19 | /tmp/menus.tar.gz -sL \ 20 | "https://github.com/netbootxyz/netboot.xyz/releases/download/${MENU_VERSION}/menus.tar.gz" 21 | tar xf \ 22 | /tmp/menus.tar.gz -C \ 23 | /config/menus/remote 24 | # boot files 25 | curl -o \ 26 | /config/menus/remote/netboot.xyz-undionly.kpxe -sL \ 27 | "https://github.com/netbootxyz/netboot.xyz/releases/download/${MENU_VERSION}/netboot.xyz-undionly.kpxe" 28 | curl -o \ 29 | /config/menus/remote/netboot.xyz.efi -sL \ 30 | "https://github.com/netbootxyz/netboot.xyz/releases/download/${MENU_VERSION}/netboot.xyz.efi" 31 | curl -o \ 32 | /config/menus/remote/netboot.xyz.kpxe -sL \ 33 | "https://github.com/netbootxyz/netboot.xyz/releases/download/${MENU_VERSION}/netboot.xyz.kpxe" 34 | # layer and cleanup 35 | echo -n ${MENU_VERSION} > /config/menuversion.txt 36 | cp /config/menus/remote/* /config/menus 37 | rm -f /tmp/menus.tar.gz 38 | fi 39 | -------------------------------------------------------------------------------- /ShieldDNS/translations/en.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | upstream_dns: 3 | name: Upstream DNS Server 4 | description: "The IP address of your upstream DNS server (e.g., AdGuard Home or 1.1.1.1)." 5 | certfile: 6 | name: Certificate File 7 | description: "Your SSL certificate file name in /ssl/." 8 | keyfile: 9 | name: Private Key File 10 | description: "Your SSL private key file name in /ssl/." 11 | cloudflare_tunnel_token: 12 | name: Cloudflare Tunnel Token 13 | description: "Optional: Your Cloudflare Tunnel token if you want to expose this service directly." 14 | enable_info_page: 15 | name: Enable Info Page 16 | description: "Show a secure 'ShieldDNS Endpoint' landing page on the HTTPS port (instead of 404/Error) when accessed via browser." 17 | log_level: 18 | name: Log Level 19 | description: "Control the verbosity of logs." 20 | dot_port: 21 | name: DoT Port 22 | description: "Port to listen on for DNS-over-TLS (Default: 8853)." 23 | doh_port: 24 | name: DoH Port 25 | description: "Port to listen on for DNS-over-HTTPS (Default: 3443)." 26 | fallback_dns: 27 | name: Enable Fallback DNS 28 | description: "Enable a fallback DNS server if the upstream is unreachable." 29 | fallback_dns_server: 30 | name: Fallback DNS Server 31 | description: "The IP address of the fallback DNS server (e.g., 1.1.1.1)." 32 | doh_alt_port_1: 33 | name: Alt DoH Port 1 34 | description: "Optional: Additional port for DoH (e.g., 784)." 35 | doh_alt_port_2: 36 | name: Alt DoH Port 2 37 | description: "Optional: Additional port for DoH (e.g., 2443)." 38 | -------------------------------------------------------------------------------- /ShieldDNS/config.yaml: -------------------------------------------------------------------------------- 1 | name: "ShieldDNS" 2 | version: "1.3.15" 3 | slug: "shielddns" 4 | description: "High-performance DoT proxy for AdGuard Home" 5 | url: "https://github.com/FaserF/hassio-addons/tree/master/ShieldDNS" 6 | startup: services 7 | arch: 8 | - aarch64 9 | - amd64 10 | - armhf 11 | - armv7 12 | - i386 13 | boot: auto 14 | init: false 15 | host_network: true 16 | map: 17 | - config:rw 18 | - ssl:rw 19 | options: 20 | upstream_dns: "192.168.1.2" 21 | certfile: "fullchain.pem" 22 | keyfile: "privkey.pem" 23 | cloudflare_tunnel_token: "" 24 | enable_info_page: false 25 | log_level: "info" 26 | # DoT Port (Required for Android "Private DNS" Native Setting) 27 | # SAFE DEFAULT: 8853 (To avoid conflict with AdGuard Home on 853) 28 | # SETUP: Map WAN Port 853 -> LAN Port 8853 in your Router for Android to work. 29 | dot_port: 8853 30 | doh_port: 3443 31 | fallback_dns: false 32 | fallback_dns_server: "1.1.1.1" 33 | schema: 34 | upstream_dns: str 35 | certfile: str 36 | keyfile: str 37 | cloudflare_tunnel_token: str? 38 | enable_info_page: bool? 39 | log_level: list(debug|info|error|warning) 40 | dot_port: port? 41 | doh_port: port? 42 | fallback_dns: bool? 43 | fallback_dns_server: str? 44 | doh_alt_port_1: port? 45 | doh_alt_port_2: port? 46 | # ports: 47 | # # With host_network: true, we do not map ports via Docker. 48 | # # The addon binds directly to the ports defined in 'options'. 49 | # # Removing this section avoids the "Network" configuration tab in HA, which is misleading here. 50 | # # 853/tcp: 853 51 | # # 443/tcp: 3443 52 | # image: "ghcr.io/faserf/shielddns" # Disabled for local dev / bashio build 53 | -------------------------------------------------------------------------------- /ShieldDNS/translations/de.yaml: -------------------------------------------------------------------------------- 1 | configuration: 2 | upstream_dns: 3 | name: Upstream DNS Server 4 | description: "Die IP-Adresse deines Upstream DNS Servers (z.B. AdGuard Home oder 1.1.1.1)." 5 | certfile: 6 | name: Zertifikatsdatei 7 | description: "Der Name deiner SSL-Zertifikatsdatei im /ssl/ Verzeichnis." 8 | keyfile: 9 | name: Privater Schlüssel 10 | description: "Der Name deiner privaten Schlüsseldatei im /ssl/ Verzeichnis." 11 | cloudflare_tunnel_token: 12 | name: Cloudflare Tunnel Token 13 | description: "Optional: Dein Cloudflare Tunnel Token, falls du den Dienst direkt exposen möchtest." 14 | enable_info_page: 15 | name: Info-Seite aktivieren 16 | description: "Zeigt eine 'ShieldDNS Endpoint' Infoseite auf dem HTTPS Port (statt 404/Fehler), wenn man ihn im Browser aufruft." 17 | log_level: 18 | name: Log Level 19 | description: "Steuert die Detailgenauigkeit der Logs." 20 | dot_port: 21 | name: DoT Port 22 | description: "Port für DNS-over-TLS (Standard: 8853)." 23 | doh_port: 24 | name: DoH Port 25 | description: "Port für DNS-over-HTTPS (Standard: 3443)." 26 | fallback_dns: 27 | name: Fallback DNS aktivieren 28 | description: "Aktiviere einen Fallback DNS Server, falls der Upstream nicht erreichbar ist." 29 | fallback_dns_server: 30 | name: Fallback DNS Server 31 | description: "Die IP-Adresse des Fallback DNS Servers (z.B. 1.1.1.1)." 32 | doh_alt_port_1: 33 | name: Alt DoH Port 1 34 | description: "Optional: Zusätzlicher Port für DoH (z.B. 784)." 35 | doh_alt_port_2: 36 | name: Alt DoH Port 2 37 | description: "Optional: Zusätzlicher Port für DoH (z.B. 2443)." 38 | -------------------------------------------------------------------------------- /homeassistant-test-instance/README.md: -------------------------------------------------------------------------------- 1 | # Home Assistant Test Instance 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_homeassistant-test-instance) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > A standalone Home Assistant Core instance for testing purposes. 11 | 12 | --- 13 | 14 | > [!CAUTION] 15 | > **Experimental / Beta Status** 16 | > 17 | > This add-on is still in development and/or primarily developed for personal use. 18 | > It is not extensively tested yet, but is expected to work fundamentally. 19 | 20 | --- 21 | 22 | ## 📖 About 23 | 24 | A standalone Home Assistant Core instance for testing purposes running as an add-on. 25 | 26 | ## Installation 27 | 28 | 1. Install the add-on. 29 | 2. Start the add-on. 30 | 3. Access the new instance at `http://homeassistant.local:8124`. 31 | 32 | --- 33 | 34 | ## ⚙️ Configuration 35 | 36 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 37 | 38 | ### Options 39 | 40 | ```yaml 41 | {} 42 | ``` 43 | 44 | --- 45 | 46 | ## 👨‍💻 Credits & License 47 | 48 | This project is open-source and available under the MIT License. 49 | Maintained by **FaserF**. 50 | -------------------------------------------------------------------------------- /pterodactyl-panel/root/etc/nginx/templates/https.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80 default; 3 | listen [::]:80 default; 4 | 5 | location ^~ /.well-known { 6 | alias /var/www/html/public/.well-known; 7 | } 8 | 9 | location / { 10 | return 301 https://$host$request_uri; 11 | } 12 | } 13 | 14 | server { 15 | listen 443 ssl http2 default; 16 | listen [::]:443 ssl http2 default; 17 | 18 | root /var/www/html/public; 19 | index index.php; 20 | charset utf-8; 21 | 22 | ssl_certificate ${SSL_CERT}; 23 | ssl_certificate_key ${SSL_CERT_KEY}; 24 | 25 | location / { 26 | try_files $uri $uri/ /index.php?$query_string; 27 | } 28 | 29 | location = /favicon.ico { access_log off; log_not_found off; } 30 | location = /robots.txt { access_log off; log_not_found off; } 31 | 32 | # allow larger file uploads and longer script runtimes 33 | client_max_body_size 100m; 34 | client_body_timeout 120s; 35 | 36 | sendfile off; 37 | 38 | location ~ \.php$ { 39 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 40 | fastcgi_pass unix:/var/run/php-fpm.sock; 41 | fastcgi_index index.php; 42 | include fastcgi_params; 43 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 44 | fastcgi_param PHP_VALUE "upload_max_filesize = 100M \n post_max_size=100M"; 45 | fastcgi_intercept_errors off; 46 | fastcgi_buffer_size 16k; 47 | fastcgi_buffers 4 16k; 48 | fastcgi_connect_timeout 300; 49 | fastcgi_send_timeout 300; 50 | fastcgi_read_timeout 300; 51 | } 52 | 53 | location ~ /\.ht { 54 | deny all; 55 | } 56 | } -------------------------------------------------------------------------------- /ShieldDNS/README.md: -------------------------------------------------------------------------------- 1 | # ShieldDNS 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_ShieldDNS) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > High-performance DoT proxy for AdGuard Home 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | 17 | 18 | 19 | mobile devices and forward them to your local AdGuard Home or other DNS 20 | servers. This secures your DNS queries even when you are on your local network 21 | (if your device enforces Private DNS) or if you expose this port securely. 22 | 23 | --- 24 | 25 | ## ⚙️ Configuration 26 | 27 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 28 | 29 | ### Options 30 | 31 | ```yaml 32 | certfile: fullchain.pem 33 | cloudflare_tunnel_token: '' 34 | doh_port: 3443 35 | dot_port: 8853 36 | enable_info_page: false 37 | fallback_dns: false 38 | fallback_dns_server: 1.1.1.1 39 | keyfile: privkey.pem 40 | log_level: info 41 | upstream_dns: 192.168.1.2 42 | ``` 43 | 44 | --- 45 | 46 | ## 👨‍💻 Credits & License 47 | 48 | This project is open-source and available under the MIT License. 49 | Maintained by **FaserF**. 50 | -------------------------------------------------------------------------------- /pterodactyl-panel/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} as base 4 | 5 | RUN apk --update add redis curl gettext mariadb-client nginx php82 php82-bcmath php82-common php82-dom php82-fileinfo 6 | RUN apk --update add php82-fpm php82-gd php82-pecl-memcached php82-mbstring php82-openssl php82-pdo php82-phar php82-json 7 | RUN apk --update add php82-sodium php82-pdo_mysql php82-session php82-simplexml php82-tokenizer php82-ctype php82-zlib php82-zip php82-xmlwriter tini 8 | RUN mkdir -p /var/www/html /run/nginx /etc/nginx/conf.d/ 9 | RUN ln -s /usr/bin/php82 /usr/bin/php 10 | 11 | # Build phase of the container 12 | # This is where composer is added and pterodactyl properly setup 13 | FROM base as build 14 | WORKDIR /var/www/html 15 | RUN apk add yarn git 16 | RUN git clone https://github.com/pterodactyl/panel ./ --depth 1 --branch release/v1.10.4 17 | RUN rm -rf .git 18 | RUN chmod -R 755 storage/* bootstrap/cache 19 | RUN find storage -type d > .storage.tmpl 20 | RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer 21 | RUN cp .env.example .env 22 | RUN composer install --ansi --no-dev --optimize-autoloader 23 | RUN chown -R nginx:nginx * 24 | RUN yarn install --production 25 | RUN yarn add cross-env 26 | RUN yarn run build:production 27 | RUN rm -rf node_modules 28 | 29 | # Final Production phase of the controller 30 | # All build requirements get scrapped as to maintain a small image 31 | FROM base as production 32 | 33 | WORKDIR /var/www/html 34 | 35 | COPY --from=build --chown=nginx:nginx /var/www/html /var/www/html 36 | COPY ./root/ / 37 | 38 | # Copy data for add-on 39 | COPY run.sh / 40 | RUN chmod a+x /run.sh 41 | RUN chmod 775 /var/www/html/* 42 | CMD [ "/run.sh" ] -------------------------------------------------------------------------------- /wiki.js/README.md: -------------------------------------------------------------------------------- 1 | # Wiki.JS 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_wiki.js) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > The most powerful and extensible open source Wiki software 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | Wiki.js for Homeassistant OS 17 | 18 | The most powerful and extensible open source Wiki software. 19 | Make documentation a joy to write using Wiki.js's beautiful and intuitive interface! 20 | 21 | ## Installation 22 | 23 | The installation of this add-on is pretty straightforward and not different in 24 | comparison to installing any other custom Home Assistant add-on. 25 | 26 | Just click the link above or add my repo to the hassio addons repositorys: 27 | 28 | 29 | Please ensure that the MariaDB Addon is installed! 30 | 31 | --- 32 | 33 | ## ⚙️ Configuration 34 | 35 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 36 | 37 | ### Options 38 | 39 | ```yaml 40 | certfile: fullchain.pem 41 | keyfile: privkey.pem 42 | log_level: info 43 | ssl: true 44 | ``` 45 | 46 | --- 47 | 48 | ## 👨‍💻 Credits & License 49 | 50 | This project is open-source and available under the MIT License. 51 | Maintained by **FaserF**. 52 | -------------------------------------------------------------------------------- /ShieldFile/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.0.13 4 | 5 | - Fixed `filebrowser users update` syntax error ("accepts 1 arg, received 2"). 6 | - Now correctly uses `--password` flag for updates. 7 | 8 | ## 1.0.12 9 | 10 | - Changed Dockerfile `ENTRYPOINT` to `["/run.sh"]` to completely override S6 initialization. 11 | 12 | ## 1.0.11 13 | 14 | - Switched Base Image to standard `ghcr.io/home-assistant/amd64-base:alpine` to 15 | resolve S6 overlay conflicts. 16 | - This aligns the execution environment with other working addons (like Solumati). 17 | 18 | ## 1.0.10 19 | 20 | - Added `ENTRYPOINT []` to Dockerfile to guarantee S6 overlay is disabled. 21 | 22 | ## 1.0.9 23 | 24 | - Refactored startup to use direct `CMD` execution instead of S6 services to 25 | definitively resolve PID 1 errors. 26 | - **Note**: This requires a manual `git push` to take effect. 27 | 28 | ## 1.0.8 29 | 30 | - Added debug logging to verify execution of new script version. 31 | 32 | ## 1.0.7 33 | 34 | - Re-release to ensure manual environment loading fix is propagated. 35 | 36 | ## 1.0.6 37 | 38 | - Implemented manual environment loading to fix PID 1 error while maintaining 39 | Supervisor API access. 40 | 41 | ## 1.0.5 42 | 43 | - Removed `with-contenv` from shebang to permanently resolve the 44 | "s6-overlay-suexec: fatal: can only run as pid 1" error. 45 | 46 | ## 1.0.4 47 | 48 | - Refactored startup to use S6 legacy services (services.d) properly, 49 | fixing PID 1 error. 50 | 51 | ## 1.0.3 52 | 53 | - Fixed s6-overlay-suexec "can only run as pid 1" error by adding `init: false` 54 | 55 | ## 1.0.1 & 1.0.2 56 | 57 | - **Fix**: Critical startup fix. Refactored Container structure (CMD vs S6 58 | services.d) to resolve s6 loop error. 59 | 60 | ## 1.0.0 61 | 62 | - Initial release 63 | -------------------------------------------------------------------------------- /.scripts/check_compliance.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | 5 | def check_addon(addon_path): 6 | dockerfile_path = os.path.join(addon_path, "Dockerfile") 7 | config_path = os.path.join(addon_path, "config.yaml") # or json 8 | 9 | if not os.path.exists(dockerfile_path): 10 | print(f"❌ {addon_path}: Dockerfile missing") 11 | return False 12 | 13 | with open(dockerfile_path, "r") as f: 14 | content = f.read() 15 | 16 | errors = [] 17 | 18 | # Check 1: S6 Overlay 19 | # Simple heuristic: Look for S6 related env vars or copying s6-overlay files 20 | if "S6_" not in content and "s6-overlay" not in content: 21 | errors.append("Missing S6 Overlay (init system)") 22 | 23 | # Check 2: Healthcheck 24 | if "HEALTHCHECK" not in content: 25 | errors.append("Missing HEALTHCHECK instruction") 26 | 27 | # Check 3: OCI Labels 28 | if ( 29 | "org.opencontainers.image.title" not in content 30 | or "org.opencontainers.image.description" not in content 31 | ): 32 | errors.append("Missing OCI Labels (org.opencontainers.image...)") 33 | 34 | if errors: 35 | print(f"❌ {addon_path} Failed Compliance:") 36 | for err in errors: 37 | print(f" - {err}") 38 | return False 39 | 40 | print(f"✅ {addon_path} passed compliance checks.") 41 | return True 42 | 43 | 44 | def main(): 45 | if len(sys.argv) < 2: 46 | print("Usage: python check_compliance.py [addon_dir2 ...]") 47 | sys.exit(1) 48 | 49 | failed = False 50 | for addon in sys.argv[1:]: 51 | if not check_addon(addon): 52 | failed = True 53 | 54 | if failed: 55 | sys.exit(1) 56 | 57 | 58 | if __name__ == "__main__": 59 | main() 60 | -------------------------------------------------------------------------------- /whatsapp/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM=ghcr.io/hassio-addons/base:19.0.0 2 | FROM $BUILD_FROM 3 | 4 | # Set shell 5 | SHELL ["/bin/bash", "-o", "pipefail", "-c"] 6 | 7 | # 1. Install Node.js & Git (Using standard repos for stability) 8 | RUN \ 9 | apk add --no-cache \ 10 | nodejs \ 11 | npm \ 12 | git 13 | 14 | # 2. Set workdir 15 | WORKDIR /opt/whatsapp 16 | 17 | # 3. Copy EVERYTHING from the context 18 | COPY . . 19 | 20 | # 4. Move rootfs to root (Standard HA Addon structure) & Fix Windows Line Enddings 21 | RUN \ 22 | apk add --no-cache dos2unix && \ 23 | if [ -d "rootfs" ]; then \ 24 | cp -rv rootfs/* /; \ 25 | # Fix potential Windows CRLF in s6 scripts 26 | find /etc/s6-overlay -type f -exec dos2unix {} \;; \ 27 | find /etc/s6-overlay -name run -exec chmod +x {} \;; \ 28 | find /etc/s6-overlay -name finish -exec chmod +x {} \;; \ 29 | find /etc/services.d -type f -exec dos2unix {} \; || true; \ 30 | find /etc/services.d -name run -exec chmod +x {} \; || true; \ 31 | fi 32 | 33 | # 5. Setup App 34 | RUN \ 35 | if [ -d "app" ]; then \ 36 | mv app/* ./; \ 37 | # FORCE CLEAN INSTALL: Delete lockfile and node_modules to avoid version conflicts 38 | rm -rf package-lock.json node_modules; \ 39 | npm install; \ 40 | fi 41 | 42 | # Build arguments 43 | ARG BUILD_ARCH 44 | ARG BUILD_DATE 45 | ARG BUILD_DESCRIPTION 46 | ARG BUILD_NAME 47 | ARG BUILD_REF 48 | ARG BUILD_REPOSITORY 49 | ARG BUILD_VERSION 50 | 51 | # Labels 52 | LABEL \ 53 | io.hass.name="${BUILD_NAME}" \ 54 | io.hass.description="${BUILD_DESCRIPTION}" \ 55 | io.hass.arch="${BUILD_ARCH}" \ 56 | io.hass.type="addon" \ 57 | io.hass.version="${BUILD_VERSION}" \ 58 | maintainer="FaserF" 59 | -------------------------------------------------------------------------------- /pterodactyl-panel/root/etc/nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | user nginx; 2 | worker_processes auto; 3 | error_log /dev/stderr; 4 | error_log /data/storage/logs/access.error.log; 5 | pid /var/run/nginx.pid; 6 | 7 | events { 8 | worker_connections 1024; 9 | multi_accept on; 10 | use epoll; 11 | } 12 | 13 | http { 14 | log_format main 'src:"$remote_addr" time:"$time_local" req:"$request" ' 15 | 'status:"$status" agent:"$http_user_agent" for:"$http_x_forwarded_for"'; 16 | 17 | access_log /dev/stdout main; 18 | access_log /data/storage/logs/access.log main; 19 | 20 | charset utf-8; 21 | 22 | # Hide nginx version. 23 | server_tokens off; 24 | 25 | sendfile on; 26 | tcp_nopush on; 27 | tcp_nodelay on; 28 | 29 | aio on; 30 | directio 512; 31 | 32 | keepalive_timeout 65; 33 | types_hash_max_size 2048; 34 | 35 | include /etc/nginx/mime.types; 36 | default_type application/octet-stream; 37 | 38 | # Enables gzip compression on some content. 39 | gzip on; 40 | gzip_comp_level 2; 41 | gzip_disable msie6; 42 | gzip_min_length 1024; 43 | gzip_proxied expired no-cache no-store private auth; 44 | gzip_types text/plain text/css text/xml text/javascript 45 | application/javascript application/x-javascript 46 | application/json application/xml; 47 | 48 | # SSL Parameters 49 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 50 | ssl_session_cache shared:SSL:50m; 51 | ssl_session_timeout 5m; 52 | 53 | ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH !RC4"; 54 | ssl_prefer_server_ciphers on; 55 | 56 | # General config directory 57 | include /etc/nginx/conf.d/*.conf; 58 | } 59 | -------------------------------------------------------------------------------- /.github/workflows/orchestrator-autofix.yaml: -------------------------------------------------------------------------------- 1 | name: Orchestrator Auto-Fix 2 | 3 | on: 4 | pull_request: 5 | types: [opened, synchronize, reopened] 6 | branches: 7 | - master 8 | 9 | permissions: 10 | contents: write 11 | 12 | jobs: 13 | auto-fix: 14 | name: 🔧 Auto-Fix Everything 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: ⤵️ Check out code 18 | uses: actions/checkout@v6 19 | with: 20 | ref: ${{ github.head_ref }} 21 | 22 | # 1. Shell Scripts (Format) 23 | # 1. Shell Scripts (Format) 24 | - name: 🐚 Setup shfmt 25 | uses: mfinelli/setup-shfmt@v4 26 | with: 27 | shfmt-version: "3.7.0" 28 | 29 | - name: 🐚 Run shfmt 30 | run: shfmt -l -w . 31 | 32 | # 2. Python (Format & Sort Imports) 33 | # We format the internal scripts and any add-on python files 34 | - name: 🐍 Run Black (Formatter) 35 | uses: psf/black@stable 36 | with: 37 | options: "--verbose" 38 | src: "." 39 | 40 | - name: 🐍 Run Isort (Import Sorter) 41 | uses: isort/isort-action@master 42 | with: 43 | configuration: "--profile black" 44 | 45 | # 3. Prettier (JSON, YAML, MD) 46 | - name: 💅 Run Prettier 47 | uses: creyD/prettier_action@v4.6 48 | with: 49 | prettier_options: --write "**/*.{json,js,md,yaml}" 50 | 51 | # 4. Standardize (READMEs, Beta Labels, Configs) 52 | - name: 📄 Standardize READMEs 53 | run: python3 .scripts/standardize_readmes.py 54 | 55 | # Commit back 56 | - name: 💾 Commit Changes 57 | uses: stefanzweifel/git-auto-commit-action@v7 58 | with: 59 | commit_message: "style: auto-fix (shfmt, black, isort, prettier)" 60 | branch: ${{ github.head_ref }} 61 | -------------------------------------------------------------------------------- /matterbridge/README.md: -------------------------------------------------------------------------------- 1 | # Matterbridge 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_matterbridge) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > A simple chat bridge between different messanger apps 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | Matterbridge for Homeassistant OS 17 | 18 | A simple chat bridge 19 | Letting people be where they want to be. 20 | Bridges between a growing number of protocols. 21 | 22 | ## Installation 23 | 24 | The installation of this add-on is pretty straightforward and not different in 25 | comparison to installing any other custom Home Assistant add-on. 26 | 27 | Just click the link above or add my repo to the hassio addons repositorys: 28 | 29 | Put your website files to /share/htdocs 30 | Example File where your index.html should be: /share/htdocs/index.html 31 | 32 | If you want to integrate your website with a mariadb database. Please ensure 33 | that the MariaDB Addon is installed! 34 | 35 | --- 36 | 37 | ## ⚙️ Configuration 38 | 39 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 40 | 41 | ### Options 42 | 43 | ```yaml 44 | config_path: /share/matterbridge.toml 45 | log_level: info 46 | ``` 47 | 48 | --- 49 | 50 | ## 👨‍💻 Credits & License 51 | 52 | This project is open-source and available under the MIT License. 53 | Maintained by **FaserF**. 54 | -------------------------------------------------------------------------------- /.scripts/trigger_edge_updates.py: -------------------------------------------------------------------------------- 1 | import os 2 | import subprocess 3 | 4 | # Define Edge add-ons or logic to detect them 5 | # For now, we assume any add-on ending in '-edge' or specific list 6 | EDGE_ADDONS = [ 7 | # "example-edge", 8 | # "node-red-edge" 9 | ] 10 | 11 | 12 | def get_all_addons(): 13 | addons = [] 14 | for item in os.listdir("."): 15 | if ( 16 | os.path.isdir(item) 17 | and not item.startswith(".") 18 | and os.path.exists(os.path.join(item, "config.yaml")) 19 | ): 20 | if item.endswith("-edge") or item in EDGE_ADDONS: 21 | addons.append(item) 22 | return addons 23 | 24 | 25 | def main(): 26 | addons = get_all_addons() 27 | if not addons: 28 | print("ℹ️ No edge add-ons found.") 29 | return 30 | 31 | print(f"🚀 Triggering updates for: {addons}") 32 | 33 | for addon in addons: 34 | print(f"👉 Triggering {addon}...") 35 | try: 36 | # We bump 'minor' or just rebuild? 37 | # Requirement: "Pull latest upstream -> Build -> Release" 38 | # We assume 'patch' bump to indicate update. 39 | subprocess.run( 40 | [ 41 | "gh", 42 | "workflow", 43 | "run", 44 | "orchestrator-release.yaml", 45 | "-f", 46 | f"addon={addon}", 47 | "-f", 48 | "version=patch", # Bump patch to trigger release 49 | "-f", 50 | "message=Auto-update: Upstream changes from Main", # Does orchestrator-release accept message? Not yet in inputs! 51 | ], 52 | check=True, 53 | ) 54 | except subprocess.CalledProcessError as e: 55 | print(f"❌ Failed to trigger {addon}: {e}") 56 | 57 | 58 | if __name__ == "__main__": 59 | main() 60 | -------------------------------------------------------------------------------- /pterodactyl-wings/README.md: -------------------------------------------------------------------------------- 1 | # pterodactyl Wings Gameserver 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_pterodactyl-wings) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Open Source Gameserver 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | pterodactyl Wings (Daemon) Gameserver for Homeassistant OS 17 | 18 | ![Ingress Support](../_images/pterodactyl/ingress.png) 19 | 20 | Pterodactyl® is a free, open-source game server management panel built with PHP, 21 | React, and Go. Designed with security in mind, Pterodactyl runs all game servers 22 | in isolated Docker containers while exposing a beautiful and intuitive UI to end 23 | users. 24 | Stop settling for less. Make game servers a first-class citizen on your platform. 25 | 26 | ## Installation 27 | 28 | The installation of this add-on is pretty straightforward and not different in 29 | comparison to installing any other custom Home Assistant add-on. 30 | Just click the link above or add my repo to the hassio addons repositorys: 31 | 32 | 33 | The MariaDB Integration is needed before installing this one! 34 | 35 | --- 36 | 37 | ## ⚙️ Configuration 38 | 39 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 40 | 41 | ### Options 42 | 43 | ```yaml 44 | config_file: null 45 | ``` 46 | 47 | --- 48 | 49 | ## 👨‍💻 Credits & License 50 | 51 | This project is open-source and available under the MIT License. 52 | Maintained by **FaserF**. 53 | -------------------------------------------------------------------------------- /tado_aa/README.md: -------------------------------------------------------------------------------- 1 | # Tado Auto Assist 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_tado_aa) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Tado Auto-Assist for Geofencing and open Window detection 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | 17 | 18 | 19 | Tado Auto-Assist for Geofencing and Open Window Detection for Home Assistant OS 20 | 21 | A Python script that automatically adjusts the temperature in your home based on 22 | your presence (arriving or leaving), using your settings from the Tado app. It 23 | also switches off the heating (activates Open Window Mode) in any room where a 24 | Tado TRV detects an open window. 25 | 26 | ## Installation 27 | 28 | The installation of this add-on is straightforward and similar to installing any 29 | other custom Home Assistant add-on. 30 | 31 | Just click the link above or manually add this repository to your Home Assistant 32 | add-on repositories: 33 | 34 | 35 | --- 36 | 37 | ## ⚙️ Configuration 38 | 39 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 40 | 41 | ### Options 42 | 43 | ```yaml 44 | log_level: info 45 | maxTemp: int(5, 25) 46 | minTemp: int(5, 25) 47 | password: null 48 | username: null 49 | ``` 50 | 51 | --- 52 | 53 | ## 👨‍💻 Credits & License 54 | 55 | This project is open-source and available under the MIT License. 56 | Maintained by **FaserF**. 57 | -------------------------------------------------------------------------------- /.scripts/update_base_images.sh: -------------------------------------------------------------------------------- 1 | 2 | #!/bin/bash 3 | set -e 4 | 5 | echo "Starting version increment process..." 6 | configFiles=$(find . -name 'config.yaml' -print0 | xargs -r0 echo) 7 | 8 | if [[ -z "$configFiles" ]]; then 9 | echo "Error: No config.yaml files found!" 10 | exit 0 11 | fi 12 | 13 | echo "Found config files: $configFiles" 14 | 15 | for configfile in $configFiles; do 16 | echo "--------------------------------------------" 17 | echo "Processing: $configfile" 18 | # Normalize path 19 | clean_configfile="${configfile#./}" 20 | 21 | # Check if modified in last commit (trigger condition) 22 | # Only if running on push event? No, we want to run if build.yaml changed. 23 | # The original workflow checked for build.yaml changes via paths filter. 24 | # Here we should verify if we need to bump. 25 | # Strategy: Check if build.yaml sibling has changed effectively? 26 | # Or just blindly bump if triggered? 27 | # Original logic: "if git diff ... grep configfile ... skipping". 28 | # It assumes we are reacting to *other* changes. 29 | 30 | # Simpler logic for Orchestrator: 31 | # If build.yaml in this dir changed, bump config.yaml. 32 | dir=$(dirname "$configfile") 33 | if git diff --name-only HEAD~1 HEAD | grep -q "$dir/build.yaml"; then 34 | echo "Build.yaml changed in $dir. Bumping version..." 35 | 36 | # ... Version Bump Logic (Major.Minor.Patch) ... 37 | OLD_VERSION=$(grep -E '^[[:space:]]*version:[[:space:]]+[0-9]+\.[0-9]+\.[0-9]+' "$configfile" | head -1 | awk '{print $2}' | tr -d '"') 38 | 39 | IFS='.' read -r major minor patch <<< "$OLD_VERSION" 40 | patch=$((patch + 1)) 41 | NEW_VERSION="$major.$minor.$patch" 42 | 43 | echo "Bumping $OLD_VERSION -> $NEW_VERSION" 44 | sed -i "s/^version: .*/version: \"$NEW_VERSION\"/" "$configfile" 45 | 46 | # Changelog Update 47 | if [ -f "$dir/CHANGELOG.md" ]; then 48 | sed -i "/# Changelog/a \\\\n## $NEW_VERSION\\n- Update base image\\n" "$dir/CHANGELOG.md" 49 | fi 50 | else 51 | echo "No build.yaml change for $dir. Skipping." 52 | fi 53 | done 54 | -------------------------------------------------------------------------------- /bash_script_executer/README.md: -------------------------------------------------------------------------------- 1 | # Bash Script Executer 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_bash_script_executer) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Execute your own bash scripts inside this Homeassistant Addon environment. 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | Bash Script Executer for Homeassistant OS 17 | 18 | This is a simple Docker Image to execute personal scripts. The reason I am 19 | needing this, is that the HA OS has limited features installed (for example 20 | no curl, sed etc) and this Addon fixes that issue. 21 | 22 | You can run up to three different scripts with this addon. 23 | 24 | This docker image comes with: busybox-extras curl grep coreutils sed xmlstarlet 25 | 26 | ## Installation 27 | 28 | The installation of this add-on is pretty straightforward and not different in 29 | comparison to installing any other custom Home Assistant add-on. 30 | 31 | Just click the link above or add my repo to the hassio addons repositorys: 32 | 33 | Put your scripts somewhere in the /share/ folder. Other folders are not visible 34 | to this addon. 35 | 36 | Example File where your script could be: /share/scripts/script.sh 37 | 38 | --- 39 | 40 | ## ⚙️ Configuration 41 | 42 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 43 | 44 | ### Options 45 | 46 | ```yaml 47 | script_path: /share/scripts/mycoolscript.sh 48 | script_path2: 'false' 49 | script_path3: 'false' 50 | ``` 51 | 52 | --- 53 | 54 | ## 👨‍💻 Credits & License 55 | 56 | This project is open-source and available under the MIT License. 57 | Maintained by **FaserF**. 58 | -------------------------------------------------------------------------------- /.scripts/sync_templates.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import yaml 4 | 5 | TEMPLATE_PATH = ".github/ISSUE_TEMPLATE/bug_report.yml" 6 | 7 | 8 | def get_addons(): 9 | addons = [] 10 | for item in os.listdir("."): 11 | if ( 12 | os.path.isdir(item) 13 | and not item.startswith(".") 14 | and os.path.exists(os.path.join(item, "config.yaml")) 15 | ): 16 | addons.append(item) 17 | return sorted(addons) 18 | 19 | 20 | def sync_template(): 21 | if not os.path.exists(TEMPLATE_PATH): 22 | print(f"❌ Template not found at {TEMPLATE_PATH}") 23 | return 24 | 25 | print(f"📄 Reading {TEMPLATE_PATH}...") 26 | with open(TEMPLATE_PATH, "r") as f: 27 | data = yaml.safe_load(f) 28 | 29 | # Find the dropdown input for "Which add-on is having issues?" 30 | # Structure varies, assuming standard GitHub Form schema 31 | # body: [ { type: dropdown, id: addon, attributes: { options: [] } } ] 32 | 33 | found = False 34 | new_options = get_addons() 35 | new_options.insert(0, "Other") # Ensure 'Other' is there 36 | 37 | if "body" in data: 38 | for input_field in data["body"]: 39 | if input_field.get("type") == "dropdown": 40 | label = input_field.get("attributes", {}).get("label", "").lower() 41 | if "add-on" in label or "addon" in label: 42 | print(f"Found input: {label}") 43 | input_field["attributes"]["options"] = new_options 44 | found = True 45 | break 46 | 47 | if found: 48 | print(f"✅ Updating add-on list to: {new_options}") 49 | # Write back (preserving comments is hard with PyYAML, but GitHub Forms don't usually have crucial comments inside YAML structure we need directly) 50 | # Note: PyYAML might reorder keys. For standards, it's usually acceptable. 51 | with open(TEMPLATE_PATH, "w") as f: 52 | yaml.dump(data, f, sort_keys=False, default_flow_style=False) 53 | else: 54 | print("⚠️ Could not find Add-on dropdown in template.") 55 | 56 | 57 | if __name__ == "__main__": 58 | sync_template() 59 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | description: Suggest an idea for this project for one of FaserF's Custom Addon's 4 | title: "[Feature Request]: " 5 | labels: ["enhancement"] 6 | assignees: 7 | - FaserF 8 | body: 9 | - type: markdown 10 | attributes: 11 | value: | 12 | This feature request request form is for feature requests only! 13 | 14 | If you have a bug or issue request, please use the bug report template! 15 | - type: textarea 16 | validations: 17 | required: true 18 | attributes: 19 | label: The request 20 | description: >- 21 | A clear and concise description of what you want to happen. 22 | - type: markdown 23 | attributes: 24 | value: | 25 | ## Environment 26 | - type: dropdown 27 | validations: 28 | required: true 29 | attributes: 30 | label: For which Add-On 31 | description: > 32 | The name of the Addon you are wishing a new feature. 33 | For example: Apache2 34 | options: 35 | - AegisBot 36 | - ShieldDNS 37 | - ShieldFile 38 | - apache2 39 | - apache2-minimal 40 | - apache2-minimal-mariadb 41 | - bash_script_executer 42 | - bt-mqtt-gateway 43 | - freenom-dns-updater 44 | - matterbridge 45 | - netboot-xyz 46 | - openssl 47 | - pterodactyl-panel 48 | - pterodactyl-wings 49 | - solumati 50 | - switch_lan_play 51 | - switch_lan_play_server 52 | - tado_aa 53 | - tuya-convert 54 | - wiki.js 55 | - xqrepack 56 | - Other 57 | - type: markdown 58 | attributes: 59 | value: | 60 | # Details 61 | - type: textarea 62 | attributes: 63 | label: Is your feature request related to a problem? 64 | render: txt 65 | description: >- 66 | A clear and concise description of what the problem is. 67 | Ex. I'm always frustrated when [...] 68 | - type: textarea 69 | attributes: 70 | label: Additional information 71 | description: > 72 | If you have any additional information for us, use the field below. 73 | -------------------------------------------------------------------------------- /switch_lan_play_server/README.md: -------------------------------------------------------------------------------- 1 | # Switch LAN Play Server 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_switch_lan_play_server) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Nintendo Switch Lan Play -Server 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | Nintendo Switch LAN-Play Server for Homeassistant OS 17 | 18 | To play with your CFW Nintendo Switch online, you can use this addon + a public 19 | or private Server. This addon can be used, to stop running the lan play client 20 | on a Desktop PC/Laptop. 21 | 22 | This is just the Server Software and NOT the Client Sotware. To use a lan-play 23 | client with Homeassistant OS, please have a look at my other addon: 24 | 25 | 26 | This docker image will self-compile the latest lan-play software and run it 27 | based on your architecture. More information can be found here: 28 | 29 | 30 | The first start can take up to 10 minutes because of this! Depending on your hardware. 31 | 32 | ## Installation 33 | 34 | The installation of this add-on is pretty straightforward and not different in 35 | comparison to installing any other custom Home Assistant add-on. 36 | 37 | Just click the link above or add my repo to the hassio addons repositorys: 38 | 39 | --- 40 | 41 | ## ⚙️ Configuration 42 | 43 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 44 | 45 | ### Options 46 | 47 | --- 48 | 49 | ## 👨‍💻 Credits & License 50 | 51 | This project is open-source and available under the MIT License. 52 | Maintained by **FaserF**. 53 | -------------------------------------------------------------------------------- /apache2/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Create directory for apache2 to store PID file 6 | RUN mkdir /run/apache2 7 | 8 | RUN apk --no-cache add apache2 php84-apache2 libxml2-dev apache2-utils apache2-mod-wsgi apache2-ssl apache2-proxy 9 | RUN apk --no-cache add php84 php84-dev php84-fpm php84-mysqli php84-opcache php84-gd zlib php84-curl php84-phar \ 10 | php84-mbstring php84-zip php84-pdo php84-pdo_mysql php84-iconv php84-dom php84-session php84-intl php84-soap php84-fileinfo \ 11 | php84-xml php84-ctype php84-pecl-xdebug php84-pdo_sqlite php84-tokenizer php84-exif php84-xmlwriter php84-cgi php84-simplexml \ 12 | php84-sockets 13 | RUN apk --no-cache add \ 14 | php84-simplexml \ 15 | php84-gd \ 16 | php84-json \ 17 | php84-imap \ 18 | php84-apcu 19 | RUN apk --no-cache add mosquitto mosquitto-dev 20 | RUN apk --no-cache add mariadb-client 21 | RUN apk --no-cache add ffmpeg 22 | 23 | #musl-locales/php-locales 24 | RUN apk add --no-cache cmake make musl-dev gcc gettext-dev libintl 25 | RUN wget https://gitlab.com/rilian-la-te/musl-locales/-/archive/master/musl-locales-master.zip \ 26 | && unzip musl-locales-master.zip \ 27 | && cd musl-locales-master \ 28 | && cmake -DLOCALE_PROFILE=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr . && make && make install \ 29 | && cd .. && rm -r musl-locales-master 30 | 31 | # Install ssh2 extension 32 | #RUN apk --no-cache add libssh2-dev php84-pear zlib-dev build-base 33 | #RUN pecl channel-update pecl.php.net \ 34 | # && pecl install ssh2-1.3.1 35 | #RUN docker-php-ext-enable ssh2 36 | #From here beginning most likely needed 37 | #RUN apk --no-cache add libssh2-dev 38 | #RUN wget -O ssh2.tgz https://pecl.php.net/get/ssh2-1.3.1.tgz \ 39 | # && mkdir ssh2 && tar vxzf ssh2.tgz -C ssh2 --strip-components 1 \ 40 | # && cd ../ssh2 && phpize81 \ 41 | # && ./configure --with-ssh2 --with-php-config=/etc/php84/php.ini \ 42 | # && make && make install \ 43 | # && cd ../ && rm -rf ssh2.tgz ssh2 44 | 45 | #Configure Logging 46 | RUN sed -i -r 's@Errorlog .*@Errorlog /dev/stderr@i' /etc/apache2/httpd.conf 47 | RUN echo "Transferlog /dev/stdout" >> /etc/apache2/httpd.conf 48 | 49 | # Copy data for add-on 50 | COPY run.sh / 51 | COPY index.html / 52 | RUN chmod a+x /run.sh 53 | CMD [ "/run.sh" ] 54 | -------------------------------------------------------------------------------- /solumati/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | # hadolint ignore=DL3006 3 | FROM ${BUILD_FROM} 4 | 5 | # Setup Environment 6 | ENV LANG C.UTF-8 7 | ENV PIP_ROOT_USER_ACTION=ignore 8 | ENV PIP_BREAK_SYSTEM_PACKAGES=1 9 | 10 | # Install System Requirements 11 | # hadolint ignore=DL3018 12 | RUN \ 13 | apk add --no-cache \ 14 | nodejs \ 15 | npm \ 16 | postgresql \ 17 | postgresql-dev \ 18 | nginx \ 19 | gcc \ 20 | musl-dev \ 21 | libffi-dev \ 22 | 23 | curl \ 24 | python3 \ 25 | py3-pip 26 | 27 | # --- SOURCE CODE FETCH STAGE --- 28 | # Download the specific release tarball 29 | ARG SOLUMATI_VERSION="v2025.12.4b0" 30 | WORKDIR /tmp 31 | RUN curl -L "https://github.com/FaserF/Solumati/archive/refs/tags/${SOLUMATI_VERSION}.tar.gz" -o solumati.tar.gz && \ 32 | tar -xzf solumati.tar.gz && \ 33 | mv Solumati-* src && \ 34 | rm solumati.tar.gz 35 | 36 | # --- FRONTEND BUILD STAGE --- 37 | WORKDIR /tmp/frontend_build 38 | # Copy package files from the cloned source 39 | RUN cp /tmp/src/frontend/package.json . && \ 40 | (cp /tmp/src/frontend/package-lock.json* . || true) && \ 41 | npm install && \ 42 | cp -r /tmp/src/frontend/. . && \ 43 | if [ -f "vite.config.ts" ]; then \ 44 | sed -i "s|defineConfig({|defineConfig({ base: './',|g" vite.config.ts; \ 45 | else \ 46 | sed -i "s|defineConfig({|defineConfig({ base: './',|g" vite.config.js; \ 47 | fi && \ 48 | sed -i "s|export const API_URL = .*|export const API_URL = './api';|g" src/config.js && \ 49 | sed -i "s|const API_URL = .*|const API_URL = './api';|g" src/config.js && \ 50 | npm run build 51 | 52 | # --- BACKEND SETUP --- 53 | WORKDIR /app/backend 54 | # Copy backend requirements from cloned source 55 | # Copy backend requirements from cloned source 56 | RUN cp /tmp/src/backend/requirements.txt . && \ 57 | pip install --no-cache-dir -r requirements.txt 58 | 59 | # Copy backend code from cloned source 60 | RUN cp -r /tmp/src/backend/. . 61 | 62 | # Move built frontend to a location Nginx can serve 63 | # Move built frontend to a location Nginx can serve 64 | RUN mkdir -p /app/frontend && \ 65 | cp -r /tmp/frontend_build/dist/* /app/frontend/ 66 | 67 | # Setup Nginx 68 | COPY nginx.conf /etc/nginx/http.d/default.conf 69 | 70 | # Copy Run Script 71 | COPY run.sh /run.sh 72 | RUN chmod a+x /run.sh 73 | 74 | CMD [ "/run.sh" ] -------------------------------------------------------------------------------- /switch_lan_play/README.md: -------------------------------------------------------------------------------- 1 | # Switch LAN Play Client 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_switch_lan_play) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Nintendo Switch Lan Play -Client 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | Nintendo Switch LAN-Play Client for Homeassistant OS 17 | 18 | ![The Lan-Play Home Home Assistant Add-on](../_images/switch_lan_play/screenshot.png) 19 | 20 | To play with your CFW Nintendo Switch online, you can use this addon + a public 21 | or private Server. This addon can be used, to stop running the lan play client 22 | on a Desktop PC/Laptop. 23 | 24 | This is just the Client Software and NOT the Server Software. To use a lan-play 25 | server with Homeassistant OS, please have a look at my other addon: 26 | 27 | 28 | This docker image will self-compile the latest lan-play software and run it 29 | based on your architecture. More information can be found here: 30 | 31 | 32 | The first installation can take up to 10 minutes because of this! Depending on 33 | your hardware. 34 | 35 | ## Installation 36 | 37 | The installation of this add-on is pretty straightforward and not different in 38 | comparison to installing any other custom Home Assistant add-on. 39 | 40 | Just click the link above or add my repo to the hassio addons repositorys: 41 | 42 | 43 | --- 44 | 45 | ## ⚙️ Configuration 46 | 47 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 48 | 49 | ### Options 50 | 51 | ```yaml 52 | server: null 53 | ``` 54 | 55 | --- 56 | 57 | ## 👨‍💻 Credits & License 58 | 59 | This project is open-source and available under the MIT License. 60 | Maintained by **FaserF**. 61 | -------------------------------------------------------------------------------- /netboot-xyz/root/etc/cont-init.d/10-prerequisite.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | nginx_uid=abc 3 | declare nginx_port 4 | nginx_port=$(bashio::addon.port 85) 5 | dhcp_range=$(bashio::config 'dhcp_range') 6 | path=$(bashio::config 'path') 7 | path_config=$(bashio::config 'path_config') 8 | 9 | #echo "Port: $nginx_port" 10 | 11 | echo "Creating user $nginx_uid and setting permissions..." 12 | 13 | # Set the uid:gid to run as 14 | adduser --disabled-password --system --no-create-home $nginx_uid 15 | addgroup $nginx_uid 16 | adduser $nginx_uid $nginx_uid 17 | adduser $nginx_uid nginx 18 | 19 | echo "Generating nginx config..." 20 | if bashio::var.has_value "${nginx_port}"; then 21 | echo "server {" >/defaults/default 22 | echo " listen $nginx_port;" >>/defaults/default 23 | echo " location / {" >>/defaults/default 24 | echo " root /assets;" >>/defaults/default 25 | echo " autoindex on;" >>/defaults/default 26 | echo " }" >>/defaults/default 27 | echo "}" >>/defaults/default 28 | else 29 | echo "Nginx port was not set! Setting 85 as default!" 30 | echo "server {" >/defaults/default 31 | echo " listen 85;" >>/defaults/default 32 | echo " location / {" >>/defaults/default 33 | echo " root /assets;" >>/defaults/default 34 | echo " autoindex on;" >>/defaults/default 35 | echo " }" >>/defaults/default 36 | echo "}" >>/defaults/default 37 | fi 38 | 39 | echo "Linking folder $path to /assets and $path_config to /config." 40 | 41 | if [ -d /assets ]; then 42 | echo "assets exists" 43 | ls -l /assets 44 | fi 45 | if [ -d /assets/netboot-image ]; then 46 | echo "/assets/netboot-image exists" 47 | ls -l /assets/netboot-image 48 | fi 49 | if [ -d /config ]; then 50 | echo "/config exists" 51 | ls -l /config 52 | fi 53 | 54 | if [ ! -d $path ]; then 55 | echo "Looks like the path $path did not exist! We will create it. Copy your installations ISOs etc there." 56 | mkdir -p $path 57 | fi 58 | ln -s $path /assets 59 | if [ ! -d $path_config ]; then 60 | echo "Looks like the path $path_config did not exist! We will still start the addon with default options!" 61 | mkdir -p $path_config 62 | fi 63 | ln -s $path_config /config 64 | 65 | if [ ! -d /config/menus ]; then 66 | mkdir /config/menus 67 | fi 68 | 69 | #Setup dnsmasq 70 | if [ ! -d /etc/dnsmasq.d ]; then 71 | /bin/mkdir /etc/dnsmasq.d 72 | fi 73 | cp /defaults/dnsmasq.conf /etc/dnsmasq.d/dnsmasq.conf 74 | 75 | echo $'\n' >>/etc/dnsmasq.d/dnsmasq.conf 76 | echo "dhcp-range=$dhcp_range,proxy" >>/etc/dnsmasq.d/dnsmasq.conf 77 | -------------------------------------------------------------------------------- /.unsupported/bt-mqtt-gateway/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG BUILD_FROM 2 | FROM ${BUILD_FROM} 3 | 4 | RUN mkdir /application 5 | 6 | # Install necessary packages 7 | RUN apk add --no-cache tzdata bluez bluez-libs sudo bluez-deprecated 8 | RUN apk add --no-cache --virtual build-dependencies git bluez-dev musl-dev make gcc glib-dev 9 | RUN apk add --no-cache --update wget unzip py3-pip 10 | 11 | # Download and unzip the application 12 | RUN wget https://github.com/zewelor/bt-mqtt-gateway/archive/refs/heads/master.zip 13 | RUN unzip -d /tmp/ master.zip && rm -r master.zip && cp -r /tmp/bt-mqtt-gateway-master/* /application 14 | 15 | # Ensure gateway.py is executable 16 | RUN chmod +x /application/gateway.py 17 | 18 | # Manually create logger.yaml if it doesn't exist using heredoc 19 | RUN cat < /application/logger.yaml 20 | version: 1 21 | disable_existing_loggers: True 22 | 23 | formatters: 24 | default: 25 | format: '%(asctime)s %(message)s' 26 | datefmt: '%X' 27 | minimal: 28 | format: '%(message)s' 29 | debug: 30 | format: '%(asctime)s %(levelname)s %(name)s %(filename)s:%(lineno)d:%(funcName)s - %(message)s' 31 | 32 | handlers: 33 | console: 34 | class: logging.StreamHandler 35 | formatter: default 36 | stream: ext://sys.stdout 37 | dummy_debug: 38 | class: logging.NullHandler 39 | formatter: debug 40 | 41 | loggers: 42 | bt-mqtt-gw: 43 | level: INFO 44 | dummy_debug: 45 | handlers: [dummy_debug] 46 | 47 | root: 48 | handlers: [console] 49 | EOF 50 | 51 | # Prepare virtual environment 52 | RUN python3 -m venv /application/venv 53 | 54 | # Activate venv and install dependencies from requirements.txt 55 | RUN /bin/sh -c "source /application/venv/bin/activate && pip install --no-cache-dir -r /application/requirements.txt" 56 | 57 | # Debugging step: show the content of gateway.py 58 | RUN cat /application/gateway.py 59 | 60 | # Debugging step: directly run gateway.py to check for errors and log the output 61 | RUN /bin/sh -c "source /application/venv/bin/activate && python /application/gateway.py -r all > /application/gateway_output.log 2>&1 || (cat /application/gateway_output.log && exit 1)" 62 | 63 | # If the above step is successful, install the dependencies listed by gateway.py 64 | RUN /bin/sh -c "source /application/venv/bin/activate && pip install --no-cache-dir $(/application/gateway.py -r all)" 65 | 66 | # Clean up 67 | RUN apk del build-dependencies wget unzip 68 | 69 | # Copy start script and make it executable 70 | COPY start.sh / 71 | RUN chmod a+x /start.sh 72 | 73 | CMD [ "/start.sh" ] 74 | -------------------------------------------------------------------------------- /pterodactyl-panel/README.md: -------------------------------------------------------------------------------- 1 | # pterodactyl Panel Gameserver - BETA 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_pterodactyl-panel) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Open-Source Gameserver - Currently not fully working 11 | 12 | --- 13 | 14 | > [!CAUTION] 15 | > **Experimental / Beta Status** 16 | > 17 | > This add-on is still in development and/or primarily developed for personal use. 18 | > It is not extensively tested yet, but is expected to work fundamentally. 19 | 20 | --- 21 | 22 | ## 📖 About 23 | 24 | pterodactyl Panel Gameserver for Homeassistant OS 25 | 26 | ![Ingress Support](../_images/pterodactyl/ingress.png) 27 | 28 | > [!WARNING] 29 | > Currently only limited working. Right now it can be considered beta and 30 | > unstable. Don't blame me if your gameservers would be lost etc. 31 | > 32 | > For me I am unable to login until now. Seems to have something to do with redis, 33 | > but I dont get what exactly. 34 | 35 | Pterodactyl® is a free, open-source game server management panel built with PHP, 36 | React, and Go. Designed with security in mind, Pterodactyl runs all game servers 37 | in isolated Docker containers while exposing a beautiful and intuitive UI to end 38 | users. 39 | Stop settling for less. Make game servers a first-class citizen on your platform. 40 | 41 | ## Installation 42 | 43 | The installation of this add-on is pretty straightforward and not different in 44 | comparison to installing any other custom Home Assistant add-on. 45 | Just click the link above or add my repo to the hassio addons repositorys: 46 | 47 | 48 | --- 49 | 50 | ## ⚙️ Configuration 51 | 52 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 53 | 54 | ### Options 55 | 56 | ```yaml 57 | certfile: fullchain.pem 58 | keyfile: privkey.pem 59 | password: null 60 | ssl: true 61 | ``` 62 | 63 | --- 64 | 65 | ## 👨‍💻 Credits & License 66 | 67 | This project is open-source and available under the MIT License. 68 | Maintained by **FaserF**. 69 | -------------------------------------------------------------------------------- /AegisBot/README.md: -------------------------------------------------------------------------------- 1 | # AegisBot 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_AegisBot) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Production-ready Telegram Moderation Bot with AI-driven FAQ and Security Features 11 | 12 | --- 13 | 14 | > [!CAUTION] 15 | > **Experimental / Beta Status** 16 | > 17 | > This add-on is still in development and/or primarily developed for personal use. 18 | > It is not extensively tested yet, but is expected to work fundamentally. 19 | 20 | --- 21 | 22 | ## 📖 About 23 | 24 | ![AegisBot Logo](icon.png) 25 | 26 | Production-ready Telegram Moderation Bot with AI-driven FAQ and Security Features. 27 | 28 | ## Features 29 | 30 | - 🛡️ **Advanced Moderation**: Automated warning, kick, and block system with RBAC 31 | - 🧠 **AI Intent Analysis**: Heuristic engine detecting scams and malicious intent 32 | - 🔄 **Real-time Dashboard**: WebSocket-driven live event stream 33 | - 📈 **Sophisticated Analytics**: Interactive security trends and visualizations 34 | - 🌍 **Full i18n**: Multi-language support (EN/DE) 35 | - 🚫 **Intelligent Filtering**: Auto-learning blacklist suggestions 36 | 37 | ## Installation 38 | 39 | See the [Documentation](DOCS.md) for detailed installation instructions. 40 | 41 | ## Quick Start 42 | 43 | 1. Add this repository to Home Assistant 44 | 1. Install the AegisBot add-on 45 | 1. Configure your Telegram Bot Token 46 | 1. Start the add-on 47 | 1. Access via Ingress 48 | 49 | --- 50 | 51 | ## ⚙️ Configuration 52 | 53 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 54 | 55 | ### Options 56 | 57 | ```yaml 58 | database: 59 | type: sqlite 60 | debug: false 61 | demo_mode: false 62 | demo_mode_type: ephemeral 63 | developer_mode: false 64 | github_repo: FaserF/AegisBot 65 | github_token: '' 66 | log_level: info 67 | project_name: AegisBot 68 | reset_database: false 69 | secret_key: '' 70 | version: latest 71 | ``` 72 | 73 | --- 74 | 75 | ## 👨‍💻 Credits & License 76 | 77 | This project is open-source and available under the MIT License. 78 | Maintained by **FaserF**. 79 | -------------------------------------------------------------------------------- /whatsapp/README.md: -------------------------------------------------------------------------------- 1 | # WhatsApp 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_whatsapp) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Home Assistant WhatsApp Backend (Baileys/Node.js) 11 | 12 | --- 13 | 14 | > [!CAUTION] 15 | > **Experimental / Beta Status** 16 | > 17 | > This add-on is still in development and/or primarily developed for personal use. 18 | > It is not extensively tested yet, but is expected to work fundamentally. 19 | 20 | --- 21 | 22 | ## 📖 About 23 | 24 | > **A lightweight, robust backend for the WhatsApp Integration in Home Assistant.** 25 | > Powered by [Baileys](https://github.com/WhiskeySockets/Baileys) and Node.js. 🚀 26 | 27 | This addon acts as a bridge between Home Assistant and the WhatsApp Web 28 | protocol. It runs a high-performance Node.js application that simulates a real 29 | WhatsApp client (like a browser), allowing you to send messages, images, and 30 | notifications directly from your smart home. 31 | 32 | ### ✨ Key Features 33 | 34 | - **🚀 Ultra Fast**: Built on Node.js 22 and the lightweight Baileys library 35 | (no heavy Chrome/Puppeteer required!). 36 | - **🔒 Secure & Private**: Runs locally on your device. No cloud bridge, no 37 | external API costs. 38 | - **💾 Persistent Session**: Stays logged in even after restarts. 39 | - **🐳 Docker Optimized**: Platinum Quality image (S6 Overlay, Alpine Base). 40 | 41 | ## 🛠️ Installation 42 | 43 | 1. **Add Repository**: Add this repository to your Home Assistant Add-on Store. 44 | 1. **Install**: Search for **"WhatsApp"** and click **Install**. 45 | 1. **Start**: Click **Start**. Wait a few seconds for the logs to show "API 46 | listening". 47 | 1. **Watchdog**: Enable "Watchdog" to ensure high availability. 48 | 49 | --- 50 | 51 | ## ⚙️ Configuration 52 | 53 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 54 | 55 | ### Options 56 | 57 | ```yaml 58 | log_level: info 59 | ``` 60 | 61 | --- 62 | 63 | ## 👨‍💻 Credits & License 64 | 65 | This project is open-source and available under the MIT License. 66 | Maintained by **FaserF**. 67 | -------------------------------------------------------------------------------- /netboot-xyz/README.md: -------------------------------------------------------------------------------- 1 | # Netboot.xyz 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_netboot-xyz) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > PXE-Server to deploy a OS inside your local network 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | 17 |
18 | Netboot.xyz Logo 19 |
20 | Your favorite operating systems in one place. 21 |
22 |
23 | 24 | 25 | **Netboot.xyz** allows you to PXE boot into a wide variety of Operating System 26 | installers and utilities from a lightweight, easy-to-use menu. This add-on lets 27 | you host your own Netboot.xyz instance directly from your Home Assistant server, 28 | perfect for homelabs and network management. 29 | 30 | ## ✨ Features 31 | 32 | - **🌐 Network Booting**: Boot various OS installers and tools over the 33 | network. 34 | - **🐧 Wide OS Support**: Includes major Linux distributions, utilities, and 35 | more. 36 | - **🎛️ Web Interface**: Easy management via a web-based configuration UI. 37 | - **🛠️ Customizable**: Add your own custom assets and configurations. 38 | - **🏠 Home Assistant Ingress**: Secure, integrated access via the sidebar. 39 | 40 | ## 🚀 Installation 41 | 42 | 1. Add this repository to your **Home Assistant Add-on Store**. 43 | 1. Install the **Netboot.xyz** add-on. 44 | 1. Configure the options (see below). 45 | 1. Start the add-on. 46 | 1. Click **"OPEN WEB UI"** to manage your boot menus. 47 | 1. **Important**: Configure your home router's DHCP server to point 48 | `next-server` to your Home Assistant IP and file to `netboot.xyz.kpxe`. 49 | 50 | --- 51 | 52 | ## ⚙️ Configuration 53 | 54 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 55 | 56 | ### Options 57 | 58 | ```yaml 59 | dhcp_range: 192.168.178.200 60 | path: /media/netboot/image 61 | path_config: /media/netboot/config 62 | ``` 63 | 64 | --- 65 | 66 | ## 👨‍💻 Credits & License 67 | 68 | This project is open-source and available under the MIT License. 69 | Maintained by **FaserF**. 70 | -------------------------------------------------------------------------------- /solumati/README.md: -------------------------------------------------------------------------------- 1 | # Solumati 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_solumati) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > The Anti-Swipe Revolution - Self-hosted dating platform focused on meaningful matches. 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | 17 |
18 | Solumati Logo 19 |
20 | The Anti-Swipe Revolution 21 |
22 |
23 | 24 | 25 | **Solumati** is a self-hosted dating platform designed to bring meaning back to 26 | matchmaking. By hosting this add-on, you run your own private instance of the 27 | Solumati platform directly on your Home Assistant server, ensuring complete data 28 | privacy and control. 29 | 30 | ## ✨ Features 31 | 32 | - **🔒 Secure & Private**: Your data stays on your server. 33 | - **🏠 Home Assistant Ingress**: Seamless integration via the HA sidebar with 34 | no port forwarding required. 35 | - **🔌 Auto-Configuration**: Zero-config setup; the database connection is 36 | managed automatically. 37 | - **🧪 Test Mode**: Includes a built-in mode to generate dummy users for safe 38 | testing. 39 | - **📧 OAuth & SMTP**: Full support for external authentication and email 40 | notifications (configured via the Admin Panel). 41 | 42 | ## 🚀 Installation 43 | 44 | 1. Add this repository to your **Home Assistant Add-on Store**. 45 | 1. Install the **Solumati** add-on. 46 | 1. Review the **Configuration** options below. 47 | 1. Start the add-on. 48 | 1. Click **"OPEN WEB UI"** to launch the interface. 49 | 50 | --- 51 | 52 | ## ⚙️ Configuration 53 | 54 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 55 | 56 | ### Options 57 | 58 | ```yaml 59 | app_base_url: '' 60 | dev_use_main_branch: false 61 | factory_reset: false 62 | github_token: '' 63 | log_level: info 64 | marketing_page_enabled: false 65 | test_mode: false 66 | ``` 67 | 68 | --- 69 | 70 | ## 👨‍💻 Credits & License 71 | 72 | This project is open-source and available under the MIT License. 73 | Maintained by **FaserF**. 74 | -------------------------------------------------------------------------------- /openssl/README.md: -------------------------------------------------------------------------------- 1 | # OpenSSL 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_openssl) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Generate self-signed certificates 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | OpenSSL - Self signed certificates for Homeassistant OS 17 | 18 | OpenSSL is a software library for applications that secure communications over 19 | computer networks against eavesdropping or need to identify the party at the 20 | other end. It is widely used by Internet servers, including the majority of 21 | HTTPS websites. 22 | 23 | OpenSSL contains an open-source implementation of the SSL and TLS protocols. 24 | The core library, written in the C programming language, implements basic 25 | cryptographic functions and provides various utility functions. Wrappers 26 | allowing the use of the OpenSSL library in a variety of computer languages are 27 | available. 28 | 29 | The OpenSSL Software Foundation (OSF) represents the OpenSSL project in most 30 | legal capacities including contributor license agreements, managing donations, 31 | and so on. OpenSSL Software Services (OSS) also represents the OpenSSL project, 32 | for Support Contracts. 33 | 34 | ## Installation 35 | 36 | The installation of this add-on is pretty straightforward and not different in 37 | comparison to installing any other custom Home Assistant add-on. 38 | 39 | Just click the link above or add my repo to the hassio addons repositorys: 40 | 41 | After starting the addon, a self signed certificate will be created and placed to: 42 | /ssl/key_openssl.pem 43 | /ssl/cert_openssl.pem 44 | 45 | These can then be used by other addons, for example my apache2 webserver addon. 46 | If the certificates are about to expire, just restart the addone once and new 47 | certificates will be created. 48 | WARNING: After restarting the addon, old certificates named as above will be 49 | deleted and overwritten! 50 | 51 | --- 52 | 53 | ## ⚙️ Configuration 54 | 55 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 56 | 57 | ### Options 58 | 59 | ```yaml 60 | website_name: null 61 | ``` 62 | 63 | --- 64 | 65 | ## 👨‍💻 Credits & License 66 | 67 | This project is open-source and available under the MIT License. 68 | Maintained by **FaserF**. 69 | -------------------------------------------------------------------------------- /wiki.js/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | ssl=$(bashio::config 'ssl') 3 | certfile=$(bashio::config 'certfile') 4 | keyfile=$(bashio::config 'keyfile') 5 | log_level=$(bashio::config 'log_level') 6 | 7 | declare host 8 | declare password 9 | declare port 10 | declare username 11 | 12 | if [ $ssl = "true" ]; then 13 | echo "You have activated SSL. SSL Settings will be applied" 14 | if [ ! -f /ssl/$certfile ]; then 15 | echo "Cannot find certificate file $certfile . Turn off SSL or check for if the file really exists at /ssl/" 16 | exit 1 17 | fi 18 | if [ ! -f /ssl/$keyfile ]; then 19 | echo "Cannot find certificate key file $keyfile . Turn off SSL or check for if the file really exists at /ssl/" 20 | exit 1 21 | fi 22 | fi 23 | 24 | # Require mariadb service to be available 25 | #if ! bashio::services.available "mysql"; then 26 | # bashio::log.error \ 27 | # "This add-on requires the MariaDB core add-on 2.0 or newer!" 28 | # bashio::exit.nok \ 29 | # "Make sure the MariaDB add-on is installed and running" 30 | #fi 31 | 32 | echo "This add-on requires the MariaDB core add-on 2.0 or newer!" 33 | 34 | host=$(bashio::services "mysql" "host") 35 | password=$(bashio::services "mysql" "password") 36 | port=$(bashio::services "mysql" "port") 37 | username=$(bashio::services "mysql" "username") 38 | 39 | #Drop database based on config flag 40 | if bashio::config.true 'reset_database'; then 41 | bashio::log.warning 'Recreating database' 42 | echo "DROP DATABASE IF EXISTS wiki;" | 43 | mariadb -h "${host}" -P "${port}" -u "${username}" -p"${password}" --skip_ssl 44 | 45 | #Remove reset_database option 46 | bashio::addon.option 'reset_database' 47 | fi 48 | 49 | #Create Config file 50 | echo "port: 3000" >/wiki/config.yml 51 | echo "db:" >>/wiki/config.yml 52 | echo " type: mariadb" >>/wiki/config.yml 53 | echo " host: ${host}" >>/wiki/config.yml 54 | echo " port: ${port}" >>/wiki/config.yml 55 | echo " user: ${username}" >>/wiki/config.yml 56 | echo " pass: ${password}" >>/wiki/config.yml 57 | echo " db: wiki" >>/wiki/config.yml 58 | echo "ssl:" >>/wiki/config.yml 59 | echo " enabled: $ssl" >>/wiki/config.yml 60 | echo " port: 3443" >>/wiki/config.yml 61 | echo " provider: custom" >>/wiki/config.yml 62 | echo " format: pem" >>/wiki/config.yml 63 | echo " key: /ssl/$keyfile" >>/wiki/config.yml 64 | echo " cert: /ssl/$certfile" >>/wiki/config.yml 65 | echo "pool:" >>/wiki/config.yml 66 | echo "bindIP: 0.0.0.0" >>/wiki/config.yml 67 | echo "logLevel: $log_level" >>/wiki/config.yml 68 | echo "offline: false" >>/wiki/config.yml 69 | echo "ha: false" >>/wiki/config.yml 70 | echo "dataPath: ./data" >>/wiki/config.yml 71 | 72 | # Create database if not exists 73 | echo "CREATE DATABASE IF NOT EXISTS wiki;" | 74 | mariadb -h "${host}" -P "${port}" -u "${username}" -p"${password}" --skip_ssl 75 | 76 | echo "Starting Wiki.JS" 77 | node server 78 | -------------------------------------------------------------------------------- /.scripts/auto_update.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | import subprocess 4 | 5 | from bump_version import bump_version 6 | 7 | 8 | def get_changed_files(): 9 | try: 10 | # Get list of changed files in the last commit 11 | result = subprocess.check_output( 12 | ["git", "diff", "--name-only", "HEAD~1", "HEAD"] 13 | ).decode("utf-8") 14 | return result.splitlines() 15 | except subprocess.CalledProcessError: 16 | print("⚠️ Could not get changed files (shallow clone?)") 17 | return [] 18 | 19 | 20 | def main(): 21 | changed_files = get_changed_files() 22 | if not changed_files: 23 | print("No changed files detected.") 24 | return 25 | 26 | # Group by directory (add-on) 27 | changed_addons = set() 28 | for f in changed_files: 29 | if "/" in f: 30 | parts = f.split("/") 31 | # Assuming add-ons are in root folders or addons/ folder. 32 | # Based on repo structure, they seem to be in root like "whatsapp", "solumati". 33 | if parts[0] not in [".github", ".scripts", "unsupported", ".git"]: 34 | addon = parts[0] 35 | if os.path.isdir(addon) and os.path.exists( 36 | os.path.join(addon, "config.yaml") 37 | ): 38 | changed_addons.add(addon) 39 | 40 | print(f"🔎 Detected potential add-on changes: {list(changed_addons)}") 41 | 42 | for addon in changed_addons: 43 | print(f"👉 Checking {addon}...") 44 | 45 | # Check if config.yaml was touched 46 | config_touched = any(f == f"{addon}/config.yaml" for f in changed_files) 47 | 48 | # Check if build-impacting files were touched (Dockerfile, build.yaml) 49 | build_touched = any( 50 | f.startswith(f"{addon}/") 51 | and (f.endswith("Dockerfile") or f.endswith("build.yaml")) 52 | for f in changed_files 53 | ) 54 | 55 | if build_touched and not config_touched: 56 | print( 57 | f"🛠️ Code changed but version not bumped. Bumping patch for {addon}..." 58 | ) 59 | try: 60 | bump_version( 61 | addon, "patch", "Maintenance: Automated dependency/base update" 62 | ) 63 | # We need to output this for the workflow to know what to release 64 | with open(os.environ.get("GITHUB_OUTPUT", "output.txt"), "a") as f: 65 | f.write(f"updated_addon={addon}\n") 66 | except Exception as e: 67 | print(f"❌ Failed to bump {addon}: {e}") 68 | elif config_touched: 69 | print( 70 | f"ℹ️ Version (config.yaml) already changed for {addon}. Assuming manual handling." 71 | ) 72 | else: 73 | print(f"ℹ️ No build-critical changes for {addon}.") 74 | 75 | 76 | if __name__ == "__main__": 77 | main() 78 | -------------------------------------------------------------------------------- /bash_script_executer/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bashio 2 | script_path=$(bashio::config 'script_path') 3 | script_argument1=$(bashio::config 'script_argument1') 4 | script_argument2=$(bashio::config 'script_argument2') 5 | script_argument3=$(bashio::config 'script_argument3') 6 | script_path2=$(bashio::config 'script_path2') 7 | script2_argument1=$(bashio::config 'script2_argument1') 8 | script2_argument2=$(bashio::config 'script2_argument2') 9 | script2_argument3=$(bashio::config 'script2_argument3') 10 | script_path3=$(bashio::config 'script_path3') 11 | script3_argument1=$(bashio::config 'script3_argument1') 12 | script3_argument2=$(bashio::config 'script3_argument2') 13 | script3_argument3=$(bashio::config 'script3_argument3') 14 | 15 | if [ $script_path != "false" ]; then 16 | if [ ! -f $script_path ]; then 17 | echo "Cant find your first script at $script_path" 18 | echo "Exiting now..." 19 | exit 1 20 | fi 21 | fi 22 | 23 | if [ $script_path2 != "false" ]; then 24 | if [ ! -f $script_path2 ]; then 25 | echo "Cant find your second script at $script_path2" 26 | echo "Exiting now..." 27 | exit 1 28 | fi 29 | fi 30 | 31 | if [ $script_path3 != "false" ]; then 32 | if [ ! -f $script_path3 ]; then 33 | echo "Cant find your third script at $script_path3" 34 | echo "Exiting now..." 35 | exit 1 36 | fi 37 | fi 38 | 39 | #Set 711 rights to script 40 | echo "Fixing permissions." 41 | if [ $script_path != "false" ]; then 42 | find $script_path -type d -exec chmod 711 {} \; 43 | fi 44 | if [ $script_path2 != "false" ]; then 45 | find $script_path2 -type d -exec chmod 711 {} \; 46 | fi 47 | if [ $script_path3 != "false" ]; then 48 | find $script_path3 -type d -exec chmod 711 {} \; 49 | fi 50 | 51 | if [ $script_path != "false" ]; then 52 | echo "Executing the first script $script_path with the argument $script_argument1 and the second argument $script_argument2 and the third argument $script_argument3 now..." 53 | echo "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" 54 | bash $script_path $script_argument1 $script_argument2 $script_argument3 55 | fi 56 | 57 | if [ $script_path2 != "false" ]; then 58 | echo "Executing the second script $script_path2 with the argument $script2_argument1 and the second argument $script2_argument2 and the third argument $script2_argument3 now..." 59 | echo "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" 60 | bash $script_path2 $script2_argument2 $script2_argument3 61 | fi 62 | 63 | if [ $script_path3 != "false" ]; then 64 | echo "Executing the third script $script_path3 with the argument $script3_argument1 and the second argument $script3_argument2 and the third argument $script3_argument3 now..." 65 | echo "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" 66 | bash $script_path3 $script3_argument1 $script3_argument2 $script3_argument3 67 | fi 68 | 69 | echo "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#" 70 | echo "All Scripts were executed. Stopping container..." 71 | -------------------------------------------------------------------------------- /solumati/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.5.9 4 | 5 | - Automatically updated Solumati to version v2025.12.3b1 6 | 7 | ## 1.5.8 8 | 9 | - Improved build script robustness: now checks for `vite.config.ts` or 10 | `vite.config.js` automatically. 11 | - Enhanced API URL replacement to handle different syntax variations. 12 | 13 | ## 1.5.7 14 | 15 | - Fixed connection refused error by correcting build script to target `vite.config.ts`. 16 | - Fixed API URL replacement in frontend config. 17 | 18 | ## 1.5.6 19 | 20 | - Automatically updated Solumati to version v2025.12.3b1 21 | 22 | ## 1.5.5 23 | 24 | - Fixed build error by targeting correct `vite.config.js` filename. 25 | 26 | ## 1.5.4 27 | 28 | - Switched to local build (removed pre-built image dependency) 29 | 30 | ## 1.5.3 31 | 32 | - Improved Ingress support with relative paths and dynamic port handling 33 | 34 | ## 1.5.2 35 | 36 | - Automatically updated Solumati to version vv2025.12.3b0 37 | 38 | ## 1.5.1 39 | 40 | - Updated Solumati to vv2025.12.3b0 41 | 42 | ## 1.5.0 43 | 44 | - Updated Solumati to v2025.12.2-b6 45 | - new dev option to use main branch 46 | 47 | ## 1.4.4 48 | 49 | - Updated Solumati to v2025.12.2-b5 50 | 51 | ## 1.4.3 52 | 53 | - Updated Solumati to v2025.12.2-b4 54 | - **NEW**: Enable Marketing Page Option 55 | 56 | ## 1.4.1 57 | 58 | - **NEW**: Factory Reset option (⚠️ Danger Zone) - Completely wipes all data (database, images, settings) - 5-second delay before reset to allow cancellation - Must be manually disabled after reset 59 | - **REMOVED**: OAuth/project_name options (these are configured in Admin Panel, 60 | not env vars) 61 | - Updated documentation with factory reset warnings 62 | - Updated Solumati to v2025.12.2-b3 63 | 64 | ## 1.4.0 65 | 66 | - **NEW**: Home Assistant Ingress support (secure sidebar access) 67 | - **NEW**: Configurable options in HA UI: - `app_base_url` - Auto-detected from Ingress or manually set - `project_name` - Custom app name - `github_client_id` - GitHub OAuth - `google_client_id` - Google OAuth - `microsoft_client_id` - Microsoft OAuth 68 | - Improved startup logging with environment info 69 | - Updated documentation 70 | - update Solumati to v2025.12.2-b2 71 | 72 | ## 1.3.14 73 | 74 | - updated Solumati to v2025.12.1-b11 75 | 76 | ## 1.3.12 77 | 78 | - updated Solumati to v2025.12.1-b10 79 | 80 | ## 1.3.10 81 | 82 | - updated Solumati to v2025.12.1-b9 83 | 84 | ## 1.3.8 85 | 86 | - updated Solumati to v2025.12.1-b8 87 | 88 | ## 1.3.6 89 | 90 | - updated Solumati to v2025.12.1-b7 91 | 92 | ## 1.3.4 93 | 94 | - updated Solumati to v2025.12.1-b6 95 | 96 | ## 1.3.2 97 | 98 | - updated Solumati to v2025.12.1-b5 99 | 100 | ## 1.3.1 101 | 102 | - updated Solumati to v2025.12.1-b4 103 | 104 | ## 1.2.0 105 | 106 | - New features 107 | - Bug fixes 108 | 109 | ## 1.1.0 110 | 111 | - New features 112 | - Bug fixes 113 | 114 | ## 1.0.0 115 | 116 | - Initial release 117 | -------------------------------------------------------------------------------- /.unsupported/xqrepack/run.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv bashio 2 | firmware_path=$(bashio::config 'firmware_path') 3 | firmware_name=$(bashio::config 'firmware_name') 4 | firmware_name_new=r3600-raw-img.bin 5 | rm1800=false 6 | 7 | if [ ! -f "$firmware_path$firmware_name" ]; then 8 | echo "$firmware_path$firmware_name does not exist. Exiting..." 9 | exit 10 | fi 11 | 12 | if [[ $firmware_name == *"rm1800"* ]] || [ "$firmware_name" = *"ax1800"* ]; then 13 | firmware_name_new_rm1800=rm1800-raw-img.bin 14 | rm1800=true 15 | echo "Detected rm1800 firmware name. Will append --data to ubinze.sh script" 16 | else 17 | echo "Did not detect a rm1800 firmware, will start the process with the default xqrepack settings." 18 | echo "If you tried to use it with a rm1800 image, do NOT flash the image and restart the addon with the firmware_name rm1800 inside." 19 | fi 20 | 21 | cd /xqrepack 22 | 23 | echo "Extracting Firmware Image $firmware_path$firmware_name" 24 | ubireader_extract_images -w $firmware_path$firmware_name 25 | 26 | echo "-------------------------------------------------------------" 27 | echo "Patch the rootfs using the @geekman repack-squashfs.sh script" 28 | rootfs_name=$(find ./ubifs-root/$firmware_name/ -maxdepth 1 -name "*vol-ubi_rootfs.ubifs*" -print) 29 | echo "Rootfs was detected: $rootfs_name" 30 | chmod -R 755 ./ 31 | chmod -R 755 /tmp/ 32 | fakeroot -- ./repack-squashfs.sh $rootfs_name 33 | 34 | echo "-------------------------------------------------------------" 35 | echo "Recombine the kernel and patched rootfs with @geekman ubinize.sh" 36 | rootfs_kernel_name=$(find ./ubifs-root/$firmware_name/ -maxdepth 1 -name "*vol-kernel.ubifs*" -print) 37 | echo "rootfs_kernel_name was detected: $rootfs_kernel_name" 38 | rootfs_new_name=$(find ./ubifs-root/$firmware_name/ -maxdepth 1 -name "*ubi_rootfs.ubifs.new*" -print) 39 | echo "rootfs_new_name was detected: $rootfs_new_name" 40 | chmod -R 755 ./ 41 | if [ $rm1800 = "true" ]; then 42 | echo "starting ubinize.sh with --data for the rm1800 image now..." 43 | ./ubinize.sh $rootfs_kernel_name $rootfs_new_name --data 44 | else 45 | echo "starting ubinize.sh for the r3600 image now..." 46 | ./ubinize.sh $rootfs_kernel_name $rootfs_new_name 47 | fi 48 | 49 | echo "-------------------------------------------------------------" 50 | if [ $rm1800 = "true" ]; then 51 | echo "Copying new firmware file $firmware_name_new to $firmware_path$firmware_name_new_rm1800" 52 | if test -f "$firmware_path$firmware_name_new_rm1800"; then 53 | echo "$firmware_path$firmware_name_new_rm1800 exists already, deleting old firmware image!" 54 | rm $firmware_path$firmware_name_new_rm1800 55 | fi 56 | mv $firmware_name_new $firmware_path$firmware_name_new_rm1800 57 | else 58 | echo "Copying new firmware file $firmware_name_new to $firmware_path" 59 | if test -f "$firmware_path$firmware_name_new"; then 60 | echo "$firmware_path$firmware_name_new exists already, deleting old firmware image!" 61 | rm $firmware_path$firmware_name_new 62 | fi 63 | mv $firmware_name_new $firmware_path 64 | fi 65 | -------------------------------------------------------------------------------- /ShieldFile/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | source /usr/lib/bashio/bashio.sh 3 | 4 | # Manually load S6 environment to ensure Bashio has access to SUPERVISOR_TOKEN 5 | # This avoids using `with-contenv` which causes PID 1 errors in this context 6 | if [ -d /var/run/s6/container_environment ]; then 7 | for var in /var/run/s6/container_environment/*; do 8 | [ -e "$var" ] || continue 9 | declare -x "$(basename "$var")=$(cat "$var")" 10 | done 11 | fi 12 | 13 | # Define paths 14 | CONFIG_PATH="/data/filebrowser.json" 15 | DB_PATH="/data/database.db" 16 | CERT_DIR="/ssl" 17 | 18 | bashio::log.info "🛡️ Starting ShieldFile Addon v1.0.8 (Debug: No-Contenv Mode)..." 19 | 20 | # Read Config 21 | CERT_FILE=$(bashio::config 'certfile') 22 | KEY_FILE=$(bashio::config 'keyfile') 23 | PORT=$(bashio::config 'port') 24 | BASE_DIR=$(bashio::config 'base_directory') 25 | LOG_LEVEL=$(bashio::config 'log_level') 26 | 27 | # Certificates 28 | FULL_CERT_PATH="${CERT_DIR}/${CERT_FILE}" 29 | FULL_KEY_PATH="${CERT_DIR}/${KEY_FILE}" 30 | 31 | if bashio::fs.file_exists "${FULL_CERT_PATH}" && bashio::fs.file_exists "${FULL_KEY_PATH}"; then 32 | bashio::log.info " Certificate found: ${FULL_CERT_PATH}" 33 | else 34 | bashio::log.warning " Certificate NOT found at ${FULL_CERT_PATH}. Generating Self-Signed..." 35 | mkdir -p "$(dirname "${FULL_CERT_PATH}")" 36 | mkdir -p "$(dirname "${FULL_KEY_PATH}")" 37 | openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 \ 38 | -nodes -keyout "${FULL_KEY_PATH}" -out "${FULL_CERT_PATH}" \ 39 | -subj "/CN=shieldfile-addon" \ 40 | -addext "subjectAltName=DNS:shieldfile-addon,IP:127.0.0.1" 41 | fi 42 | 43 | # Initialize DB if missing 44 | if [ ! -f "$DB_PATH" ]; then 45 | bashio::log.info "📁 Initializing Database at ${DB_PATH}..." 46 | filebrowser config init --database "$DB_PATH" 47 | 48 | # Set Branding 49 | filebrowser config set --branding.name "ShieldFile" --branding.disableExternal --database "$DB_PATH" 50 | else 51 | bashio::log.info "📁 Database found." 52 | fi 53 | 54 | # Add/Update Users 55 | bashio::log.info "👤 Syncing users..." 56 | 57 | for user in $(bashio::config 'users|keys'); do 58 | USERNAME=$(bashio::config "users[${user}].username") 59 | PASSWORD=$(bashio::config "users[${user}].password") 60 | 61 | # Try add (fails if exists), then update 62 | if filebrowser users add "$USERNAME" "$PASSWORD" --perm.admin --database "$DB_PATH" 2>/dev/null; then 63 | bashio::log.info " Created user: $USERNAME" 64 | else 65 | filebrowser users update "$USERNAME" --password "$PASSWORD" --perm.admin --database "$DB_PATH" 66 | bashio::log.info " Updated user: $USERNAME" 67 | fi 68 | done 69 | 70 | # Start 71 | bashio::log.info "🚀 ShieldFile listening on port ${PORT} (Root: ${BASE_DIR})" 72 | 73 | # Construct Args 74 | ARGS="" 75 | ARGS="$ARGS --port $PORT" 76 | ARGS="$ARGS --root $BASE_DIR" 77 | ARGS="$ARGS --database $DB_PATH" 78 | ARGS="$ARGS --cert $FULL_CERT_PATH" 79 | ARGS="$ARGS --key $FULL_KEY_PATH" 80 | ARGS="$ARGS --address 0.0.0.0" # Listen on all interfaces (Host Network) 81 | 82 | # Run 83 | exec filebrowser $ARGS 84 | -------------------------------------------------------------------------------- /ShieldDNS/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 1.3.15 4 | 5 | - **Improvement**: Implemented intentional "Smart Fallback" for DoT Port. 6 | Default is now `853` (Standard), but if blocked (e.g. by AdGuard), it 7 | automatically switches to `8853`. This fixes CI/CD tests while maintaining 8 | ease of use. 9 | 10 | ## 1.3.14 11 | 12 | - **Fix**: Resolved "unbound variable" startup crash by correcting variable 13 | initialization order in `run.sh`. 14 | - **Change**: Changed default `dot_port` to `8853` to prevent boot loops if AdGuard 15 | Home (port 853) is active. 16 | - **Improvement**: Added robust pre-flight port checks using `netstat`. 17 | Conflicts now pause startup and show the conflicting process name instead of 18 | crashing. 19 | - **Cleanup**: Removed unused "Alternative DoH Ports" (784, 2443) to simplify 20 | configuration. 21 | 22 | ## 1.3.13 23 | 24 | - Fixed Nginx exiting immediately (daemon mode) by forcing `daemon off;`, resolving 25 | the restart loop. 26 | 27 | ## 1.3.12 28 | 29 | - Fixed CoreDNS startup crash by explicitly clearing `Corefile` before generation 30 | (preventing duplicate config entries). 31 | 32 | ## 1.3.11 33 | 34 | - Fixed CoreDNS crash caused by "null" string in port configuration. 35 | - Updated Nginx SSL config to remove deprecated `http2` directive. 36 | 37 | ## 1.3.10 38 | 39 | - Re-release to ensure all previous fixes (unbound variables, shebangs) are propagated. 40 | 41 | ## 1.3.9 42 | 43 | - Reverted shebang to `with-contenv` to restore Supervisor API access 44 | (fixing "Forbidden" error). 45 | 46 | ## 1.3.8 47 | 48 | - Fixed "unbound variable" crash when optional features are disabled. 49 | - Removed `with-contenv` from shebang to prevent S6 context conflicts. 50 | 51 | ## 1.3.7 52 | 53 | - Fixed startup error "unable to exec bashio" by correcting shebang to `with-contenv` 54 | 55 | ## 1.3.6 56 | 57 | - Fixed s6-overlay-suexec "can only run as pid 1" error by adding `init: false` 58 | 59 | ## 1.3.3 & 1.3.4 & 1.3.5 60 | 61 | - **Fix**: Critical startup fix. Refactored Container structure (CMD vs S6 62 | services.d) to resolve s6 loop error. 63 | 64 | ## 1.3.1 65 | 66 | - **Refinement**: Made `dot_port` and `doh_port` optional. You can now run DoT-only 67 | or DoH-only. 68 | - **Fix**: Startup script now verifies at least one port is active. 69 | - **New**: Added functional Status Indicator to the Info Page (checks /dns-query). 70 | - **Fix**: Fixed S6 startup error by restoring correct shebang. 71 | 72 | ## 1.3.0 73 | 74 | - **Feature**: Optional "Single Port" Info Page (Serve Web + DoH on same port). 75 | - **Config**: Added `enable_info_page` option. 76 | 77 | ## 1.2.0 78 | 79 | - **Feature**: Host Network Mode (`host_network: true`) for Source IP visibility. 80 | - **Refinement**: Made alternative DoH ports optional (removed from default config). 81 | - **Change**: Changed default DoT port to `8853` to avoid AdGuard Home conflict. 82 | 83 | ## 1.1.0 84 | 85 | - **Feature**: Added DoH (DNS-over-HTTPS) support. 86 | - **New**: Added ShieldDNS Logo. 87 | - **Docs**: Cloudflare Tunnel integration guide. 88 | -------------------------------------------------------------------------------- /.scripts/move_unsupported.py: -------------------------------------------------------------------------------- 1 | import json 2 | import os 3 | import shutil 4 | 5 | # Configuration 6 | UNSUPPORTED_ADDONS = [ 7 | "bt-mqtt-gateway", 8 | "hyperion_ng", 9 | "HyperionNG", 10 | "silverstrike", 11 | "tuya-convert", 12 | "wiki.js", 13 | "Wiki.js", 14 | "freenom-dns-updater", # Adding based on user context or typical patterns, but will stick strictly to README list if possible. 15 | # From README: `bt-mqtt-gateway`, `HyperionNG`, `Silverstrike`, `Tuya-Convert`, `Wiki.js`. 16 | ] 17 | # Normalize list 18 | UNSUPPORTED_ADDONS = [x.lower() for x in UNSUPPORTED_ADDONS] 19 | 20 | ROOT_DIR = "." 21 | TARGET_DIR = "unsupported" 22 | 23 | 24 | def main(): 25 | if not os.path.exists(TARGET_DIR): 26 | os.makedirs(TARGET_DIR) 27 | print(f"Created {TARGET_DIR}") 28 | 29 | moved_count = 0 30 | 31 | # Get all directories in root 32 | for item in os.listdir(ROOT_DIR): 33 | item_path = os.path.join(ROOT_DIR, item) 34 | 35 | # Skip if not a directory or is hidden or is the target dir 36 | if ( 37 | not os.path.isdir(item_path) 38 | or item.startswith(".") 39 | or item == TARGET_DIR 40 | or item == "scripts" 41 | ): 42 | continue 43 | 44 | # Check if item is in unsupported list 45 | if item.lower() in UNSUPPORTED_ADDONS: 46 | target_path = os.path.join(TARGET_DIR, item) 47 | 48 | # Check if already exists 49 | if os.path.exists(target_path): 50 | print(f"⚠️ {item} already in {TARGET_DIR}, skipping move.") 51 | else: 52 | print(f"🚚 Moving {item} to {TARGET_DIR}...") 53 | try: 54 | shutil.move(item_path, target_path) 55 | moved_count += 1 56 | except Exception as e: 57 | print(f"❌ Failed to move {item}: {e}") 58 | 59 | # Update README.md 60 | if moved_count > 0: 61 | print("📝 Updating README.md links...") 62 | readme_path = os.path.join(ROOT_DIR, "README.md") 63 | if os.path.exists(readme_path): 64 | with open(readme_path, "r", encoding="utf-8") as f: 65 | content = f.read() 66 | 67 | for addon in UNSUPPORTED_ADDONS: 68 | # Naive replacement for [Name](addon) -> [Name](unsupported/addon) 69 | # We cover standard cases: "(addon)" and "('./addon')" 70 | # Note: This might need regex for robustness, but keeping simple for Phase 1. 71 | content = content.replace(f"]({addon})", f"]({TARGET_DIR}/{addon})") 72 | content = content.replace(f"](./{addon})", f"](./{TARGET_DIR}/{addon})") 73 | 74 | with open(readme_path, "w", encoding="utf-8") as f: 75 | f.write(content) 76 | else: 77 | print("⚠️ README.md not found, skipping link updates.") 78 | 79 | print(f"✅ Process complete. Moved {moved_count} add-ons.") 80 | 81 | 82 | if __name__ == "__main__": 83 | main() 84 | -------------------------------------------------------------------------------- /.unsupported/tuya-convert/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 0.1.8 4 | 5 | - Automatically updated addon-base to version v19.0.0 6 | 7 | ## 0.1.7 8 | 9 | - Automatically updated addon-base to version v19.0.0 10 | - Drop support for armhf, armv7, and i386 systems 11 | 12 | ## 0.1.6 13 | 14 | - Test 15 | 16 | ## 0.1.5 17 | 18 | - Automatically updated addon-base to version v18.2.1 19 | 20 | ## 0.1.4 21 | 22 | - Automatically updated addon-base to version v17.2.5 23 | 24 | ## 0.1.3 25 | 26 | - Automatically updated addon-base to version v17.2.2 27 | 28 | ## 0.1.2 29 | 30 | - Automatically updated addon-base to version v17.2.1 31 | 32 | ## 0.1.1 33 | 34 | - Automatically updated addon-base to version v17.2.1 35 | 36 | ## 0.1.0 37 | 38 | - General update 39 | 40 | ## 0.0.32 41 | 42 | - Automatically updated addon-base to version v17.2.1 43 | 44 | ## 0.0.31 45 | 46 | - automatically update addon-base to version v17.0.1 47 | 48 | ## 0.0.30 49 | 50 | - automatically update addon-base to version v17.0.0 51 | 52 | ## 0.0.29 53 | 54 | - automatically update addon-base to version v16.3.6 55 | 56 | ## 0.0.28 57 | 58 | - automatically update addon-base to version v16.3.5 59 | 60 | ## 0.0.27 61 | 62 | - automatically update addon-base to version v16.3.4 63 | 64 | ## 0.0.26 65 | 66 | - automatically update addon-base to version v16.3.3 67 | 68 | ## 0.0.25 69 | 70 | - automatically update addon-base to version v16.3.2 71 | 72 | ## 0.0.24 73 | 74 | - automatically update addon-base to version v16.3.1 75 | 76 | ## 0.0.23 77 | 78 | - automatically update addon-base to version v16.3.0 79 | 80 | ## 0.0.22 81 | 82 | - automatically update addon-base to version v16.2.1 83 | 84 | ## 0.0.21 85 | 86 | - automatically update addon-base to version v16.1.3 87 | 88 | ## 0.0.20 89 | 90 | - automatically update addon-base to version v16.0.0 91 | 92 | ## 0.0.19 93 | 94 | - bump hassio-addon-base to version v15.0.8 95 | 96 | ## 0.0.18 97 | 98 | - automatically update hassio-addon-base to version v14.3.2 99 | 100 | ## 0.0.17 101 | 102 | - automatically update hassio-addon-base to version v14.3.1 103 | 104 | ## 0.0.16 105 | 106 | - automatically update hassio-addon-base to version v14.2.2 107 | 108 | ## 0.0.15 109 | 110 | - automatically update hassio-addon-base to version v14.1.3 111 | 112 | ## 0.0.14 113 | 114 | - automatically update hassio-addon-base to version v14.0.8 115 | 116 | ## 0.0.13 117 | 118 | - automatically update hassio-addon-base to version v14.0.8 119 | 120 | ## 0.0.12 121 | 122 | - automatically update hassio-addon-base to the latest version 123 | 124 | ## 0.0.11 125 | 126 | - automatically update hassio-addon-base to the latest version 127 | 128 | ## 0.0.10 129 | 130 | - bump hassio-addon-base to V14.0.0 131 | - autorelease new version updates on addon base updates 132 | 133 | ## 0.0.8 134 | 135 | - bump hassio-addon-base to V12.2.4 136 | 137 | ## 0.0.7 138 | 139 | - update alpine base image to 11.0.0 140 | 141 | ## 0.0.6 142 | 143 | - update alpine base image to 10.2.0 144 | 145 | ## 0.0.5 146 | 147 | - update alpine base image to 10.1.0 148 | 149 | ## 0.0.4 150 | 151 | - rewritten the dockerfile and installation to match it to the official 152 | dockerfile from tuya-convert:development 153 | 154 | ## 0.0.3 155 | 156 | - Small Improvements 157 | 158 | ## 0.0.1 159 | 160 | - Initial release 161 | -------------------------------------------------------------------------------- /ShieldFile/README.md: -------------------------------------------------------------------------------- 1 | # ShieldFile 2 | 3 | ![Logo](logo.png) 4 | 5 | [![Open your Home Assistant instance and show the add-on dashboard.](https://my.home-assistant.io/badges/supervisor_addon.svg)](https://my.home-assistant.io/redirect/supervisor_addon/?addon=c1e285b7_ShieldFile) 6 | [![Home Assistant Add-on](https://img.shields.io/badge/home%20assistant-addon-blue.svg)](https://www.home-assistant.io/addons/) 7 | [![GitHub Release](https://img.shields.io/github/v/release/FaserF/hassio-addons?include_prereleases&style=flat-square)](https://github.com/FaserF/hassio-addons/releases) 8 | ![Project Maintenance](https://img.shields.io/badge/maintainer-FaserF-blue?style=flat-square) 9 | 10 | > Secure, Web-based File Manager (SFTP over HTTPS) 11 | 12 | --- 13 | 14 | ## 📖 About 15 | 16 | ## Secure, Web-based File Manager (SFTP over HTTPS) 17 | 18 | Main Project: [ShieldFile](https://github.com/FaserF/ShieldFile) 19 | 20 | ShieldFile provides a modern, fast, and secure way to manage files on your 21 | Home Assistant host (e.g. `/share`, `/media`, `/config`). 22 | 23 | > **Powered by [Filebrowser](https://filebrowser.org/)** ❤️ 24 | > ShieldFile wraps the amazing Filebrowser project in a "Secure-by-Default" 25 | > container optimized for Home Assistant. 26 | 27 | 28 | 29 | ## ❓ Why "ShieldFile" instead of plain Filebrowser 30 | 31 | 32 | 33 | ShieldFile is designed specifically for **Home Assistant** and **Security**: 34 | 35 | 1. **🔐 Secure Defaults**: ShieldFile enforces HTTPS. It automatically generates 36 | self-signed certificates if you don't have your own, ensuring your file 37 | transfers are never cleartext. 38 | 1. **🏠 HA Integration**: It pre-mounts your critical Home Assistant folders 39 | (`/config`, `/media`, `/share`, `/backup`) so you can manage them instantly. 40 | 1. **🛡️ Identity**: It fits perfectly into the "Shield" ecosystem (like 41 | ShieldDNS), providing a consistent, branded experience for your private cloud. 42 | 43 | ## 🤝 Compatibility 44 | 45 | ShieldFile works perfectly alongside other official and community add-ons: 46 | 47 | - **Advanced SSH & Web Terminal**: You can use the terminal to manage files via 48 | command line while using ShieldFile for a visual interface. Both access the same 49 | `/share`, `/config`, etc. directories. 50 | - **FTP**: You can use an FTP client to transfer bulk files and use ShieldFile to 51 | manage them from a browser. 52 | 53 | ## Features 54 | 55 | - **HTTPS**: Secure file transfer via browser. 56 | - **Configurable**: Choose which directory to serve. 57 | - **Multi-User**: Define primary users in `config.yaml`, manage robust permissions 58 | in the UI. 59 | - **Host Network**: High-performance direct binding. 60 | 61 | ## Installation 62 | 63 | 1. Install this repository in the Add-on Store. 64 | 1. Install **ShieldFile**. 65 | 1. Configure the options. 66 | 1. Start! 67 | 68 | --- 69 | 70 | ## ⚙️ Configuration 71 | 72 | Configure the add-on via the **Configuration** tab in the Home Assistant add-on page. 73 | 74 | ### Options 75 | 76 | ```yaml 77 | base_directory: /share 78 | certfile: fullchain.pem 79 | keyfile: privkey.pem 80 | log_level: info 81 | port: 8443 82 | users: 83 | - password: changeme 84 | username: admin 85 | ``` 86 | 87 | --- 88 | 89 | ## 👨‍💻 Credits & License 90 | 91 | This project is open-source and available under the MIT License. 92 | Maintained by **FaserF**. 93 | -------------------------------------------------------------------------------- /.unsupported/tuya-convert/README.md: -------------------------------------------------------------------------------- 1 | # Home Assistant Add-on: Tuya-Convert 2 | 3 | 4 |
5 | Tuya Convert Logo 6 |
7 | Flash Tuya devices over the air! 8 |
9 |
10 | 11 | 12 | ![Supports aarch64 Architecture](https://img.shields.io/badge/aarch64-yes-green.svg) 13 | ![Supports amd64 Architecture](https://img.shields.io/badge/amd64-yes-green.svg) 14 | ![Supports armhf Architecture](https://img.shields.io/badge/armhf-yes-green.svg) 15 | ![Supports armv7 Architecture](https://img.shields.io/badge/armv7-yes-green.svg) 16 | ![Supports i386 Architecture](https://img.shields.io/badge/i386-yes-green.svg) 17 | 18 | ## ⚠️ Important Note 19 | 20 | > [!WARNING] 21 | > **Deprecated / Experimental**: This add-on is experimental. Tuya has patched 22 | > newer firmwares to prevent this OTA hack. Use at your own risk! 23 | > Please prefer using the standalone installation of `tuya-convert` on a 24 | > Raspberry Pi or Linux laptop for better success rates. 25 | 26 | ## 📖 About 27 | 28 | **Tuya-Convert** allows you to free your Tuya-based smart devices (plugs, 29 | switches, bulbs) from the cloud by flashing them with custom firmware like 30 | **Tasmota** or **ESPHome**—without soldering! This add-on brings the famous 31 | Tuya-Convert tool directly to your Home Assistant OS environment. 32 | 33 | ## ✨ Features 34 | 35 | - **🔓 Cloud Free**: Flash custom firmware and take local control. 36 | - **🛠️ Tasmota & ESPurna**: Supports major custom firmwares out of the box. 37 | - **🏠 Home Assistant**: Integrated into your HA supervisor. 38 | 39 | ## 🚀 Installation 40 | 41 | 1. Add this repository to your **Home Assistant Add-on Store**. 42 | 1. Install the **Tuya-Convert** add-on. 43 | 1. Configure the `firmware` option. 44 | 1. Start the add-on. 45 | 46 | ## ⚙️ Configuration 47 | 48 | 49 | 50 | | Option | Type | Default | Description | 51 | | :------------ | :-------- | :-------------------- | :------------------------------------------------ | 52 | | `backup_path` | `string` | `/share/tuya-convert` | Location to save original firmware backups. | 53 | | `firmware` | `string` | `tasmota.bin` | Firmware to flash (`tasmota.bin`, `espurna.bin`). | 54 | | `accept_eula` | `boolean` | `false` | Must be set to `true` to accept the agreement. | 55 | 56 | 57 | 58 | > [!NOTE] 59 | > Make sure the `backup_path` is accessible (e.g., in `/share` or `/media`). 60 | 61 | ## 📚 Usage 62 | 63 | 1. **Start the Add-on**: It will start the AP and listening process. 64 | 1. **Connect Device**: Put your Tuya device into pairing mode (fast blinking). 65 | 1. **Connect Phone**: Connect your smartphone to the `vtrust-flash` Wi-Fi 66 | access point created by the add-on. 67 | 1. **Watch Logs**: Follow the add-on logs to see the flashing progress. 68 | 69 | ## 🆘 Support 70 | 71 | Encountered an issue? We're here to help. 72 | [Open an issue on GitHub](https://github.com/FaserF/hassio-addons/issues) to 73 | get support. 74 | 75 | ## 👨‍💻 Authors & License 76 | 77 | Maintained by **FaserF**. 78 | Original `tuya-convert` by **VTRUST** and **c't**. 79 | Licensed under the **MIT License**. 80 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # Home Assistant Community Add-ons 🏠 2 | 3 | This repository contains a collection of custom **Home Assistant Add-ons** 4 | maintained by FaserF. 5 | 6 | ## Installation 🚀 7 | 8 | 1. Click the button below to to add this repository to your Home Assistant. 9 | [![Install Repository](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2FFaserF%2Fhassio-addons) 10 | 11 | 2. Or manually add this URL: 12 | 13 | ```text 14 | https://github.com/FaserF/hassio-addons 15 | ``` 16 | 17 | ## Add-ons List 📦 18 | 19 | 20 | | Name | Description | Status | 21 | | :--- | :--- | :--- | 22 | | **[Apache2](apache2)** | Webserver (Minimal / MariaDB / PHP) | ✅ | 23 | | **[Bash Script Executer](bash_script_executer)** | Execute bash scripts in HA OS | ✅ | 24 | 25 | | **[Matterbridge](matterbridge)** | Simple chat bridge | ✅ | 26 | | **[Netboot.xyz](netboot-xyz)** | PXE Booting Service | ✅ | 27 | | **[OpenSSL](openssl)** | Self-signed certificate generator | ✅ | 28 | | **[Pterodactyl](pterodactyl-panel)** | GameServer Stack (Panel & Wings) | ✅ | 29 | | **[Switch LAN Play](switch_lan_play)** | Nintendo Switch LAN Play Client | ✅ | 30 | | **[Tado Auto Assist](tado_aa)** | Auto-adjust heating based on presence | ✅ | 31 | | **[WhatsApp](whatsapp)** | Home Assistant WhatsApp Backend (Baileys) | ✅ | 32 | | **[Wiki.js](wiki.js)** | Wiki.js | ✅ | 33 | 34 | 35 | > [!NOTE] 36 | > **Deprecated Add-on:** `bt-mqtt-gateway`, `HyperionNG`, `Silverstrike`, `Tuya-Convert`, `Wiki.js`. 37 | 38 | ## 🪦 Unsupported / Deprecated 39 | 40 | The following add-ons are no longer supported or maintained. They have been moved to the `unsupported/` directory. 41 | 42 | - **[BT MQTT Gateway](.unsupported/bt-mqtt-gateway)** 43 | - **[Freenom DNS Updater](.unsupported/freenom-dns-updater)** 44 | - **[HyperionNG](.unsupported/HyperionNG)** 45 | - **[Silverstrike](.unsupported/Silverstrike)** 46 | - **[Tuya Convert](.unsupported/tuya-convert)** 47 | - **[xqrepack](.unsupported/xqrepack)** 48 | 49 | ## Support 🙋‍♂️ 50 | 51 | Found a bug? [Open an issue](https://github.com/FaserF/hassio-addons/issues). 52 | Tested on **amd64** architecture. 53 | 54 | --- 55 | 56 | ## 📄 License 57 | 58 | This project is licensed under the MIT License (c) 2019–2026 FaserF. 59 | 60 | Permission is hereby granted, free of charge, to any person obtaining a copy 61 | of this software and associated documentation files (the "Software"), to deal 62 | in the Software without restriction, including without limitation the rights 63 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 64 | copies of the Software, and to permit persons to whom the Software is 65 | furnished to do so, subject to the following conditions: 66 | 67 | The above copyright notice and this permission notice shall be included in all 68 | copies or substantial portions of the Software. 69 | 70 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 71 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 72 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 73 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 74 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 75 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 76 | SOFTWARE. 77 | -------------------------------------------------------------------------------- /.github/workflows/orchestrator-intake.yaml: -------------------------------------------------------------------------------- 1 | name: Orchestrator New Add-on Intake 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - "**/config.yaml" 7 | - "**/config.json" 8 | push: 9 | branches: 10 | - master 11 | paths: 12 | - "**/config.yaml" 13 | - "**/config.json" 14 | 15 | jobs: 16 | intake: 17 | name: 🆕 New Add-on Intake 18 | runs-on: ubuntu-latest 19 | permissions: 20 | contents: write 21 | pull-requests: write 22 | steps: 23 | - name: ⤵️ Check out code 24 | uses: actions/checkout@v6 25 | 26 | - name: 🔍 Detect New Add-ons 27 | id: new-addons 28 | run: | 29 | # Use python script 30 | OUTPUT=$(python3 .scripts/intake.py) 31 | echo "$OUTPUT" 32 | # Check if new add-ons found (string representation of list in last line) 33 | if [[ "$OUTPUT" == *"Detected new add-on"* ]]; then 34 | echo "found=true" >> $GITHUB_OUTPUT 35 | # Extract list logic simplified: just pass to next steps implicitly via re-running or file? 36 | # For now, let's rely on detection script being idempotent. 37 | else 38 | echo "found=false" >> $GITHUB_OUTPUT 39 | fi 40 | 41 | - name: ✅ Compliance Check & Comment 42 | if: steps.new-addons.outputs.found == 'true' && github.event_name == 'pull_request' 43 | id: compliance 44 | run: | 45 | # Run compliance on ALL dirs? Or just new ones. 46 | # check_compliance.py takes args. We need to pass the new ones. 47 | # To implement this cleanly, intake.py should output a clean list or we parse it. 48 | # Simplified: We check all add-ons changed in PR? 49 | # Or just use the script to print valid output. 50 | python3 .scripts/check_compliance.py $(python3 .scripts/intake.py | grep "Detected" | awk '{print $4}') > compliance.log 2>&1 || true 51 | 52 | CONTENT=$(cat compliance.log) 53 | echo "CONTENT<> $GITHUB_ENV 54 | echo "$CONTENT" >> $GITHUB_ENV 55 | echo "EOF" >> $GITHUB_ENV 56 | 57 | if grep -q "❌" compliance.log; then 58 | echo "status=failure" >> $GITHUB_OUTPUT 59 | else 60 | echo "status=success" >> $GITHUB_OUTPUT 61 | fi 62 | 63 | - name: 💬 Post Comment 64 | if: steps.new-addons.outputs.found == 'true' && github.event_name == 'pull_request' 65 | uses: actions/github-script@v8 66 | with: 67 | script: | 68 | const output = process.env.CONTENT; 69 | github.rest.issues.createComment({ 70 | issue_number: context.issue.number, 71 | owner: context.repo.owner, 72 | repo: context.repo.repo, 73 | body: `### 🛡️ Add-on Compliance Check\n\n${output}` 74 | }) 75 | 76 | - name: 🛑 Fail if Non-Compliant 77 | if: steps.compliance.outputs.status == 'failure' 78 | run: exit 1 79 | 80 | - name: 📝 Auto-Remediate (Add to README & Templates) 81 | if: steps.new-addons.outputs.found == 'true' && github.event_name == 'push' && github.ref == 'refs/heads/master' 82 | run: | 83 | python3 .scripts/intake.py --fix 84 | python3 .scripts/sync_templates.py 85 | 86 | - name: 💾 Commit Changes 87 | if: steps.new-addons.outputs.found == 'true' && github.event_name == 'push' 88 | uses: stefanzweifel/git-auto-commit-action@v7 89 | with: 90 | commit_message: "chore: register new add-on [skip ci]" 91 | --------------------------------------------------------------------------------