diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
new file mode 100644
index 0000000..098acc0
--- /dev/null
+++ b/.devcontainer/devcontainer.json
@@ -0,0 +1,28 @@
+{
+ "name": "Example devcontainer for add-on repositories",
+ "image": "ghcr.io/home-assistant/devcontainer:addons",
+ "appPort": ["7123:8123", "7357:4357"],
+ "postStartCommand": "sudo -E bash devcontainer_bootstrap",
+ "runArgs": ["-e", "GIT_EDITOR=code --wait", "--privileged"],
+ "containerEnv": {
+ "WORKSPACE_DIRECTORY": "${containerWorkspaceFolder}"
+ },
+ "customizations": {
+ "vscode": {
+ "extensions": ["timonwong.shellcheck", "esbenp.prettier-vscode"],
+ "settings": {
+ "terminal.integrated.profiles.linux": {
+ "zsh": {
+ "path": "/usr/bin/zsh"
+ }
+ },
+ "terminal.integrated.defaultProfile.linux": "zsh",
+ "editor.formatOnPaste": false,
+ "editor.formatOnSave": true,
+ "editor.formatOnType": true,
+ "files.trimTrailingWhitespace": true
+ }
+ }
+ },
+ "mounts": [ "type=volume,target=/var/lib/docker" ]
+}
\ No newline at end of file
diff --git a/.github/.gitattributes b/.github/.gitattributes
new file mode 100644
index 0000000..93c0e78
--- /dev/null
+++ b/.github/.gitattributes
@@ -0,0 +1,6 @@
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text eol=lf
+
+# Denote all files that are truly binary and should not be modified.
+*.png binary
+*.jpg binary
\ No newline at end of file
diff --git a/.github/.gitignore b/.github/.gitignore
new file mode 100644
index 0000000..a6ba1bf
--- /dev/null
+++ b/.github/.gitignore
@@ -0,0 +1,9 @@
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+!.vscode/*.code-snippets
+
+# Local History for Visual Studio Code
+.history/
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
deleted file mode 100644
index 771559a..0000000
--- a/.github/CODEOWNERS
+++ /dev/null
@@ -1 +0,0 @@
-.github/* @frenck
diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
deleted file mode 100644
index 8b146f4..0000000
--- a/.github/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,133 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity
-and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
-
-## Our Standards
-
-Examples of behavior that contributes to a positive environment for our
-community include:
-
-- Demonstrating empathy and kindness toward other people
-- Being respectful of differing opinions, viewpoints, and experiences
-- Giving and gracefully accepting constructive feedback
-- Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-- Focusing on what is best not just for us as individuals, but for the
- overall community
-
-Examples of unacceptable behavior include:
-
-- The use of sexualized language or imagery, and sexual attention or
- advances of any kind
-- Trolling, insulting or derogatory comments, and personal or political attacks
-- Public or private harassment
-- Publishing others' private information, such as a physical or email
- address, without their explicit permission
-- Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
-
-## Scope
-
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement at
-frenck@frenck.dev.
-
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-## Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-### 2. Warning
-
-**Community Impact**: A violation through a single incident or series
-of actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or
-permanent ban.
-
-### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within
-the community.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.0, available at
-[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
-
-Community Impact Guidelines were inspired by
-[Mozilla's code of conduct enforcement ladder][mozilla coc].
-
-For answers to common questions about this code of conduct, see the FAQ at
-[https://www.contributor-covenant.org/faq][faq]. Translations are available
-at [https://www.contributor-covenant.org/translations][translations].
-
-[homepage]: https://www.contributor-covenant.org
-[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
-[mozilla coc]: https://github.com/mozilla/diversity
-[faq]: https://www.contributor-covenant.org/faq
-[translations]: https://www.contributor-covenant.org/translations
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
deleted file mode 100644
index 7b170ec..0000000
--- a/.github/CONTRIBUTING.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# Contributing
-
-When contributing to this repository, please first discuss the change you wish
-to make via issue, email, or any other method with the owners of this repository
-before making a change.
-
-Please note we have a code of conduct, please follow it in all your interactions
-with the project.
-
-## Issues and feature requests
-
-You've found a bug in the source code, a mistake in the documentation or maybe
-you'd like a new feature? You can help us by submitting an issue to our
-[GitHub Repository][github]. Before you create an issue, make sure you search
-the archive, maybe your question was already answered.
-
-Even better: You could submit a pull request with a fix / new feature!
-
-## Pull request process
-
-1. Search our repository for open or closed [pull requests][prs] that relates
- to your submission. You don't want to duplicate effort.
-
-1. You may merge the pull request in once you have the sign-off of two other
- developers, or if you do not have permission to do that, you may request
- the second reviewer to merge it for you.
-
-[github]: https://github.com/hassio-addons/repository/issues
-[prs]: https://github.com/hassio-addons/repository/pulls
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..4988caa
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+---
+custom: https://buymeacoffee.com/mesteriisw
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index 544da8f..0000000
--- a/.github/ISSUE_TEMPLATE.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# Problem/Motivation
-
-> (Why the issue was filed)
-
-## Expected behavior
-
-> (What you expected to happen)
-
-## Actual behavior
-
-> (What actually happened)
-
-## Steps to reproduce
-
-> (How can someone else make/see it happen)
-
-## Proposed changes
-
-> (If you have a proposed change, workaround or fix,
-> describe the rationale behind it)
diff --git a/.github/ISSUE_TEMPLATE/BUG-REPORT.yml b/.github/ISSUE_TEMPLATE/BUG-REPORT.yml
new file mode 100644
index 0000000..5400176
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/BUG-REPORT.yml
@@ -0,0 +1,60 @@
+---
+name: "🐛 Bug Report"
+description: Create a new ticket for a bug.
+title: "🐛 [Addon name]
"
+labels: [
+ "bug"
+]
+body:
+ - type: textarea
+ id: description
+ attributes:
+ label: "Description"
+ description: Please enter an explicit description of your issue
+ placeholder: Short and explicit description of your incident...
+ validations:
+ required: true
+ - type: textarea
+ id: reprod
+ attributes:
+ label: "Reproduction steps"
+ description: Please enter an explicit description of your issue
+ value: |
+ 1. Go to '...'
+ 2. Click on '....'
+ 3. Scroll down to '....'
+ 4. See error
+ render: bash
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: "Addon Logs"
+ description: Please paste the full log that appears when starting the addon (including banner). This will be automatically formatted into code, so no need for backticks.
+ render: bash
+ validations:
+ required: true
+ - type: dropdown
+ id: browsers
+ attributes:
+ label: "Architecture"
+ description: What architecture are you on ?
+ multiple: true
+ options:
+ - aarch64
+ - amd64
+ - armv7
+ validations:
+ required: false
+ - type: dropdown
+ id: os
+ attributes:
+ label: "OS"
+ description: What is the impacted environment ?
+ multiple: true
+ options:
+ - HAos
+ - Virtual Machine
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..bd9dfe4
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,2 @@
+---
+blank_issues_enabled: false
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
new file mode 100644
index 0000000..f05f535
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -0,0 +1,44 @@
+---
+name: "✨ Feature request"
+description: Suggest an idea for this project
+title: "✨ [REQUEST] Addon name"
+labels: [
+ "prevent stale",
+ "enhancement"
+]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ I have a real life job in parallel to this addon, and don't think I'll be able to add new addons for the moment. You can still however express your interest in case someone would do it.
+ - type: checkboxes
+ id: terms
+ attributes:
+ label: Checked
+ description: "Pre-checks"
+ options:
+ - label: "If a new addon, I have checked on Google that such as addon doesn't already exists"
+ required: true
+ - label: "If a new feature, I have searched in the discussions & issues that it was not already covered"
+ required: true
+ - type: textarea
+ id: description
+ attributes:
+ label: "Which addon?"
+ description: The title of the addon the new feature is for
+ validations:
+ required: true
+ - type: textarea
+ id: description2
+ attributes:
+ label: "Is your feature request related to a problem? Please describe"
+ description: A clear and concise description of what the problem is. Ex. I'm always frustrated when
+ validations:
+ required: true
+ - type: textarea
+ id: description3
+ attributes:
+ label: "Describe the solution you'd like"
+ description: A clear and concise description of what you want to happen
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/other-questions.md b/.github/ISSUE_TEMPLATE/other-questions.md
new file mode 100644
index 0000000..ac69885
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/other-questions.md
@@ -0,0 +1,41 @@
+---
+name: "\u2753 Any other question"
+about: Other questions or remarks not related to bugs or features
+title: "\u2753 [addon] title"
+labels: ['prevent stale']
+assignees: ""
+---
+
+
+
+**Which addon?**
+
+
+
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Which addon?**
+
+
+
+**Addon or app?**
+
+
+
+**Describe the solution you'd like**
+
+
+
+**Describe alternatives you've considered**
+
+
+
+**Additional context**
+
+
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index cbd529a..0000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Proposed Changes
-
-> (Describe the changes and rationale behind them)
-
-## Related Issues
-
-> ([Github link][autolink-references] to related issues or pull requests)
-
-[autolink-references]: https://help.github.com/articles/autolinked-references-and-urls/
\ No newline at end of file
diff --git a/.github/SECURITY.md b/.github/SECURITY.md
deleted file mode 100644
index 021b03d..0000000
--- a/.github/SECURITY.md
+++ /dev/null
@@ -1,1839 +0,0 @@
-# Security Policy
-
-I take the security of my software and services seriously. This includes
-all open source software I create, maintain or help to maintain.
-
-If you believe you have found a security vulnerability in any repository
-I maintain, including this one, please report it responsible to me as
-described below.
-
-**Please DO NOT report security vulnerabilities publicly!**
-
-So... DO NOT create a GitHub issue for it ;)
-
-## Reporting a vulnerability
-
-Privately and confidently, send me a detailed description of the vulnerability
-you have discovered using an encrypted and authenticated channel. Personally,
-I prefer this to be done using PGP encrypted email. Contact information
-needed for this is listed down below.
-
-In the report, please include as much information as possible, including:
-
-- A extensive description of the vulnerability.
-- How it could be exploited.
-- The potential impact you think it would have (e.g., DOS attackable, privacy
- concerns, leaking of credentials).
-- Steps for reproducing the vulnerability.
-- Code (if any), that is needed for reproducing the issue.
-- If you have an idea for a fix, patch or any other adjustment for mitigating
- the vulnerability reported.
-
-Sorry for the long list, but providing as much information as possible allows
-me to act more quickly. Make sure to write your report in the English language.
-
-Please take care not to violate the privacy of other people in your report.
-For example, stack traces or exploit scripts sent to me should never contain
-private or personally identifiable information.
-
-## After you have reported the vulnerability
-
-Give me at least a week to investigate and respond to the reported vulnerability
-you have found; and up to 60 days to fix and distribute it. This includes a
-window for existing users to upgrade, patch or mitigate the issue as well.
-
-If you intent, at any point, to disclose the vulnerability to someone else
-or maybe even publicly, please give me a reasonable advanced notice.
-
-If any dependent projects are involved, I will take care of informing the
-maintainers of those projects as well.
-
-## Bug bounty
-
-Unfortunately, I cannot offer a paid bug bounty program. I will, however, give
-my best efforts to show appreciation towards people that took the time and
-effort to disclose vulnerabilities responsibly.
-
-Me, and the open source community, will be forever grateful.
-
-Oh, and if we ever meet, I'm happy to buy you a beer :)
-
-## Contact information
-
-Please contact me, Franck Nijhof, directly on:
-
-security@frenck.dev (not for support!)
-
-GPG Fingerprint: `731C 60D6 80E6 E850 F31C 2E88 AB33 ADAC E710 1952`
-
-https://keys.openpgp.org/search?q=731C60D680E6E850F31C2E88AB33ADACE7101952
-
-```txt
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-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
-FHJUUkMAAAIMAAAAIGdUUkMAAAIsAAAAIGJUUkMAAAJMAAAAIGNocm0AAAJsAAAA
-JG1sdWMAAAAAAAAAAQAAAAxlblVTAAAAHAAAABwAcwBSAEcAQgAgAGIAdQBpAGwA
-dAAtAGkAbgAAbWx1YwAAAAAAAAABAAAADGVuVVMAAAAyAAAAHABOAG8AIABjAG8A
-cAB5AHIAaQBnAGgAdAAsACAAdQBzAGUAIABmAHIAZQBlAGwAeQAAAABYWVogAAAA
-AAAA9tYAAQAAAADTLXNmMzIAAAAAAAEMSgAABeP///MqAAAHmwAA/Yf///ui///9
-owAAA9gAAMCUWFlaIAAAAAAAAG+UAAA47gAAA5BYWVogAAAAAAAAJJ0AAA+DAAC2
-vlhZWiAAAAAAAABipQAAt5AAABjecGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT
-0AAACltwYXJhAAAAAAADAAAAAmZmAADypwAADVkAABPQAAAKW3BhcmEAAAAAAAMA
-AAACZmYAAPKnAAANWQAAE9AAAApbY2hybQAAAAAAAwAAAACj1wAAVHsAAEzNAACZ
-mgAAJmYAAA9c/8AAEQgAgACAAwESAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAA
-AAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNR
-YQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZH
-SElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Sl
-pqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX2
-9/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQE
-AwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoW
-JDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2
-d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJ
-ytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/bAEMACAYGBwYFCAcHBwkJCAoM
-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
-73QnlXw4/oDrjt/ZPD2SY9spk8ApQzQbKKSRuGxzZU8irDS5tLtYR9z4j1ulJGWm
-j3GvuZjjXSxHy1dwOo8ph2N7b5nmzruXH1wjgppZ48hOcLn/z1dghvh4M8eBvoho
-HElMD+bgudYsKEAwQMjPcIbjM+USR9BGSLQ3RnJhbmNrIE5pamhvZiAoRGVhbGVy
-RGlyZWN0KSA8Zi5uaWpob2ZAZGVhbGVyZGlyZWN0Lm5sPokCVAQTAQoAPgIbAwIe
-AQIXgAULCQgHAwUVCgkICwUWAgMBABYhBHMcYNaA5uhQ8xwuiKszraznEBlSBQJg
-eyeWBQkMLyuoAAoJEKszraznEBlSKNkQAKk9a6khEhDigwZWByPcNuv29uNB0m4C
-TMKP5kmUXCf1rJcMFc7rxC1JrDiSKUJpeNRJLly4ltp3D3hIt0dWU928CAeHzD9k
-veNJZMqA+KLRkjOQt3mQlsWhPN3gCN/oatrVzvchTGInuD5DQj1suPNCCoohgAIR
-z248TyTr34cLN16ehAI4PHq9ZL6+V0CbM5a36Dp5nVHtDQQOqUTQzRUGcbQdYtFg
-txs9mnODJRt91ykkKi2CBkZP4yzzjdXyAT/2JFBNk/wPNUkHSLZsN5xDwRw44KUG
-GqsL4ALMFYv/ITM6lTDDdQyo9g7DOUy36yhpo5nyka+vuvQxeTQouJ4mytaM+5fV
-nYd8PGqm+YI9EYKXpWdd55ycVrkD7qGwRPD6OROyn7sLldC6L5HhbexRNywM1qnp
-DLd1upPn2LwnqUB4P9W56NxAeVlTrYP2JyZ/1KjtmdmsRnlDv6SIWv+GwLKaVgCr
-j0YuAbk4BWQNhEVm38O9vYQPr0ti4A75t6EuHjMc1xrlpTwdMQ30hTu/M3hV6V/P
-sLN/YnVVIYvYsokOvPMd5fikOek+CUcxHIkmW1sp5ryDvUDC3wfIXvl70wWsmeU9
-4tN7TJczPIqOynRuNE3nUMMdtrxdU95Auh5BIdFANQNud1SX+E1UCKfs4VIIxNW6
-wNgrzyErU8g5iQIcBBABAgAGBQJYPYAyAAoJEE5+WcG+PB5Y+JUP/0fnrZbh/2uO
-vflSKUwb8kt4B2OYsZLdtql5L8ou/go2x6tMV+ciUSq8YkmlhCNzp5up/Qt4iRlo
-C/MCAGo3v3Y//65xCz16WoLugXVpQSl3YvGS7dq66b0kPiVEhs67S2dzymG3uvm7
-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
-ebj4joK8GrVwV3oQvb0oWg==
-=dRLN
------END PGP PUBLIC KEY BLOCK-----
-```
diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
deleted file mode 100644
index 2af0a68..0000000
--- a/.github/dependabot.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-version: 2
-updates:
- - package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- interval: daily
- time: "06:00"
- - package-ecosystem: "pip"
- directory: "/"
- schedule:
- interval: daily
- time: "06:00"
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000..d25ba40
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,10 @@
+---
+version: 2
+updates:
+ # Maintain dependencies for GitHub Actions
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ labels:
+ - "dependency-update"
diff --git a/.github/labels.yml b/.github/labels.yml
deleted file mode 100644
index 2d0f68a..0000000
--- a/.github/labels.yml
+++ /dev/null
@@ -1,85 +0,0 @@
----
-- name: "breaking-change"
- color: ee0701
- description: "A breaking change for existing users."
-- name: "bugfix"
- color: ee0701
- description: "Inconsistencies or issues which will cause a problem for users or implementors."
-- name: "documentation"
- color: 0052cc
- description: "Solely about the documentation of the project."
-- name: "enhancement"
- color: 1d76db
- description: "Enhancement of the code, not introducing new features."
-- name: "refactor"
- color: 1d76db
- description: "Improvement of existing code, not introducing new features."
-- name: "performance"
- color: 1d76db
- description: "Improving performance, not introducing new features."
-- name: "new-feature"
- color: 0e8a16
- description: "New features or options."
-- name: "maintenance"
- color: 2af79e
- description: "Generic maintenance tasks."
-- name: "ci"
- color: 1d76db
- description: "Work that improves the continue integration."
-- name: "dependencies"
- color: 1d76db
- description: "Upgrade or downgrade of project dependencies."
-
-- name: "in-progress"
- color: fbca04
- description: "Issue is currently being resolved by a developer."
-- name: "stale"
- color: fef2c0
- description: "There has not been activity on this issue or PR for quite some time."
-- name: "no-stale"
- color: fef2c0
- description: "This issue or PR is exempted from the stable bot."
-
-- name: "security"
- color: ee0701
- description: "Marks a security issue that needs to be resolved asap."
-- name: "incomplete"
- color: fef2c0
- description: "Marks a PR or issue that is missing information."
-- name: "invalid"
- color: fef2c0
- description: "Marks a PR or issue that is missing information."
-
-- name: "beginner-friendly"
- color: 0e8a16
- description: "Good first issue for people wanting to contribute to the project."
-- name: "help-wanted"
- color: 0e8a16
- description: "We need some extra helping hands or expertise in order to resolve this."
-
-- name: "hacktoberfest"
- description: "Issues/PRs are participating in the Hacktoberfest."
- color: fbca04
-- name: "hacktoberfest-accepted"
- description: "Issues/PRs are participating in the Hacktoberfest."
- color: fbca04
-
-- name: "priority-critical"
- color: ee0701
- description: "This should be dealt with ASAP. Not fixing this issue would be a serious error."
-- name: "priority-high"
- color: b60205
- description: "After critical issues are fixed, these should be dealt with before any further issues."
-- name: "priority-medium"
- color: 0e8a16
- description: "This issue may be useful, and needs some attention."
-- name: "priority-low"
- color: e4ea8a
- description: "Nice addition, maybe... someday..."
-
-- name: "major"
- color: b60205
- description: "This PR causes a major version bump in the version number."
-- name: "minor"
- color: 0e8a16
- description: "This PR causes a minor version bump in the version number."
diff --git a/.github/linters/.gitleaks.toml b/.github/linters/.gitleaks.toml
new file mode 100644
index 0000000..97ce9a2
--- /dev/null
+++ b/.github/linters/.gitleaks.toml
@@ -0,0 +1,10 @@
+title = "gitleaks config"
+
+[extend]
+# useDefault will extend the base configuration with the default gitleaks config:
+# https://github.com/zricethezav/gitleaks/blob/master/config/gitleaks.toml
+useDefault = false
+
+[allowlist]
+description = "global allowlist. whitelisting paths"
+#paths = ['''/github/workspace/epicgamesfree/templates/config.json''']
diff --git a/.github/linters/.hadolint.yaml b/.github/linters/.hadolint.yaml
new file mode 100644
index 0000000..88b67cf
--- /dev/null
+++ b/.github/linters/.hadolint.yaml
@@ -0,0 +1,8 @@
+---
+ignored:
+ - DL3002
+ - DL3006
+ - DL3007
+ - DL3008
+ - DL3009
+ - DL3018
diff --git a/.github/linters/.jscpd.json b/.github/linters/.jscpd.json
new file mode 100644
index 0000000..446e398
--- /dev/null
+++ b/.github/linters/.jscpd.json
@@ -0,0 +1,9 @@
+{
+ "threshold": 0,
+ "reporters": ["html", "markdown"],
+ "ignore": [
+ "**/.git/**",
+ "**/*.md",
+ "**/.github/**"
+ ]
+}
diff --git a/.github/linters/.markdown-lint.yml b/.github/linters/.markdown-lint.yml
new file mode 100644
index 0000000..473f1ef
--- /dev/null
+++ b/.github/linters/.markdown-lint.yml
@@ -0,0 +1,35 @@
+---
+###########################
+###########################
+## Markdown Linter rules ##
+###########################
+###########################
+
+# Linter rules doc:
+# - https://github.com/DavidAnson/markdownlint
+#
+# Note:
+# To comment out a single error:
+#
+# any violations you want
+#
+#
+
+###############
+# Rules by id #
+###############
+MD001: false # Heading levels should only increment by one level at a time
+MD002: false # First header should be a h1 header
+MD007: # Unordered list indentation
+ indent: 2
+MD012: false # Multiple consecutive blank lines
+MD013: false # Line length
+MD025: false # Multiple top level headings in the same document
+MD034: false # Bare url
+MD041: false # First line in file should be a top level header
+MD053: false # Check links are used
+
+#################
+# Rules by tags #
+#################
+blank_lines: false # Error on blank lines
diff --git a/.github/paths-filter.yml b/.github/paths-filter.yml
new file mode 100644
index 0000000..4dfdda6
--- /dev/null
+++ b/.github/paths-filter.yml
@@ -0,0 +1,109 @@
+# AUTO BUILDS #
+# From https://github.com/Poeschl/Hassio-Addons
+# name: slug/filename ; could be slug/config.* for all files
+addons_updater: addons_updater/config.* # Image : yes
+arpspoof: arpspoof/config.* # Image : yes
+autobrr: autobrr/config.* # Image : yes
+baikal: baikal/config.* # Image : yes
+bazarr: bazarr/config.* # Image : yes
+binance-trading-bot: binance-trading-bot/config.* # Image : yes
+birdnet-go: birdnet-go/config.* # Image : yes
+birdnet-pi: birdnet-pi/config.* # Image : yes
+bitwarden: bitwarden/config.* # Image : yes
+booksonic_air: booksonic_air/config.* # Image : yes
+browserless_chrome: browserless_chrome/config.* # Image : yes
+calibre: calibre/config.* # Image : yes
+calibre_web: calibre_web/config.* # Image : yes
+changedetection.io: changedetection.io/config.* # Image : yes
+cloudcommander: cloudcommander/config.* # Image : yes
+code-server: code-server/config.* # Image : yes
+codex: codex/config.* # Image : yes
+comixed: comixed/config.* # Image : yes
+elasticsearch: elasticsearch/config.* # Image : yes
+emby: emby/config.* # Image : yes
+enedisgateway2mqtt: enedisgateway2mqtt/config.* # Image : yes
+enedisgateway2mqtt_dev: enedisgateway2mqtt_dev/config.* # Image : yes
+epicgamesfree: epicgamesfree/config.* # Image : yes
+filebrowser: filebrowser/config.* # Image : yes
+fireflyiii: fireflyiii/config.* # Image : yes
+fireflyiii_data_importer: fireflyiii_data_importer/config.* # Image : yes
+fireflyiii_fints_importer: fireflyiii_fints_importer/config.* # Image : yes
+flaresolverr: flaresolverr/config.* # Image : yes
+flexget: flexget/config.* # Image : yes
+free_games_claimer: free_games_claimer/config.* # Image : yes
+gazpar2mqtt: gazpar2mqtt/config.* # Image : yes
+gitea: gitea/config.* # Image : yes
+grav: grav/config.* # Image : yes
+guacamole: guacamole/config.* # Image : yes
+immich: immich/config.* # Image : yes
+immich_ingress: immich_ingress/config.* # Image : yes
+inadyn: inadyn/config.* # Image : yes
+jackett: jackett/config.* # Image : yes
+jellyfin: jellyfin/config.* # Image : yes
+jellyseerr: jellyseerr/config.* # Image : yes
+joal: joal/config.* # Image : yes
+joplin: joplin/config.* # Image : yes
+lidarr: lidarr/config.* # Image : yes
+linkwarden: linkwarden/config.* # Image : yes
+mealie: mealie/config.* # Image : yes
+mealie_api: mealie_api/config.* # Image : yes
+mealie_frontend: mealie_frontend/config.* # IImage : yes # Image : yes
+myelectricaldata: myelectricaldata/config.* # Image : yes
+myelectricaldata_dev: myelectricaldata_dev/config.* # Image : yes
+mylar3: mylar3/config.* # Image : yes
+navidrome: navidrome/config.* # Image : yes
+nextcloud: nextcloud/config.* # Image : yes
+nzbget: nzbget/config.* # Image : yes
+omada: omada/config.* # Image : yes
+omada_v3: omada_v3/config.* # Image : yes
+ombi: ombi/config.* # Image : yes
+openproject: openproject/config.* # Image : yes
+organizr: organizr/config.* # Image : yes
+overleaf: overleaf/config.* # Image : yes
+overseerr: overseerr/config.* # Image : yes
+paperless_ngx: paperless_ngx/config.* # Image : yes
+papermerge: papermerge/config.* # Image : yes
+photoprism: photoprism/config.* # Image : yes
+piwigo: piwigo/config.* # Image : yes
+plex: plex/config.* # Image : yes
+plex_meta_manager: plex_meta_manager/config.* # Image : yes
+portainer: portainer/config.* # Image : yes
+portainer_agent: portainer_agent/config.* # Image : yes
+postgres: postgres/config.* # Image : yes
+prowlarr: prowlarr/config.* # Image : yes
+qbittorrent: qbittorrent/config.* # Image : yes
+radarr: radarr/config.* # Image : yes
+readarr: readarr/config.* # Image : yes
+requestrr: requestrr/config.* # Image : yes
+resiliosync: resiliosync/config.* # Image : yes
+sabnzb: sabnzb/config.* # Image : yes
+sabnzbd: sabnzbd/config.* # Image : yes
+scrutiny: scrutiny/config.* # Image : yes
+scrutiny_fa: scrutiny_fa/config.* # Image : yes
+seafile: seafile/config.* # Image : yes
+signalk: signalk/config.* # Image : yes
+socks5-proxy: socks5-proxy/config.* # Image : yes
+sonarr: sonarr/config.* # Image : yes
+sponsorblockcast: sponsorblockcast/config.* # Image : yes
+spotweb: spotweb/config.* # Image : yes
+tandoor_recipes: tandoor_recipes/config.* # Image : yes
+tdarr: tdarr/config.* # Image : yes
+teamspeak: teamspeak/config.* # Image : yes
+transmission: transmission/config.* # Image : yes
+transmission_openvpn: transmission_openvpn/config.* # Image : yes
+ubooquity: ubooquity/config.* # Image : yes
+unpackerr: unpackerr/config.* # Image : yes
+vaultwarden: vaultwarden/config.* # Image : yes
+webtop: webtop/config.*
+webtop_kde: webtop_kde/config.* # Image : yes
+webtrees: webtrees/config.* # Image : yes
+wger: wger/config.* # Image : yes
+whatsapper: whatsapper/config.* # Image : yes
+whoogle: whoogle/config.* # Image : yes
+xteve: xteve/config.* # Image : yes
+zoneminder: zoneminder/config.* # Image : yes
+zzz_archived_bitwarden: zzz_archived_bitwarden/config.* # Image : yes
+zzz_archived_code-server: zzz_archived_code-server/config.* # Image : yes
+zzz_archived_paperless_ngx: zzz_archived_paperless_ngx/config.* # Image : yes
+zzz_draft_birdnet-pi: zzz_draft_birdnet-pi/config.* # Image : yes
+zzz_draft_overleaf: zzz_draft_overleaf/config.* # Image : yes
diff --git a/.github/workflows/archived_lint-checks.yaml b/.github/workflows/archived_lint-checks.yaml
new file mode 100644
index 0000000..7836389
--- /dev/null
+++ b/.github/workflows/archived_lint-checks.yaml
@@ -0,0 +1,65 @@
+---
+name: Lint / Syntax checks
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ hadolint:
+ runs-on: ubuntu-latest
+ container: ghcr.io/hadolint/hadolint:latest-alpine
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+
+ - name: Get changed files
+ id: changed_files
+ uses: jitterbit/get-changed-files@v1
+
+ - name: 🔎 Run hadolint
+ run: |
+ # shellcheck disable=SC2043
+ for files in ${{ steps.changed_files.outputs.all }}; do
+ if [[ "$(basename ${files})" == "Dockerfile" ]]; then
+ echo "Hadolint $files"
+ hadolint "$files"
+ fi
+ done
+
+ shellcheck:
+ runs-on: ubuntu-latest
+ container: koalaman/shellcheck-alpine:latest
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+
+ - name: Get changed files
+ id: changed_files
+ uses: jitterbit/get-changed-files@v1
+
+ - name: 🔎 Run ShellCheck
+ run: |
+ # shellcheck disable=SC2043
+ for files in ${{ steps.changed_files.outputs.all }}; do
+ if [[ "$files" == *".sh" ]]; then
+ echo "Spellcheck $files"
+ shellcheck "$files"
+ fi
+ done
+
+ markdownlint:
+ runs-on: ubuntu-latest
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+ with:
+ # Full git history is needed to get a proper list of changed files within `super-linter`
+ fetch-depth: 0
+
+ - name: 🔎 Run markdownlint
+ uses: nosborn/github-action-markdown-cli@v3.3.0
+ with:
+ config_file: .markdownlint.yaml
diff --git a/.github/workflows/daily_README.yaml b/.github/workflows/daily_README.yaml
new file mode 100644
index 0000000..703077b
--- /dev/null
+++ b/.github/workflows/daily_README.yaml
@@ -0,0 +1,157 @@
+# yamllint disable rule:line-length
+---
+name: Generate README
+on:
+ schedule:
+ - cron: 0 17 * * *
+ workflow_dispatch: null
+jobs:
+ README_updater:
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ - name: Create README file
+ run: |
+ # Init
+
+ echo "Starting"
+
+ # Prepare template
+
+ cp .templates/.README.md README2.md
+
+ ADDONSLINE="$(sed -n '/%%ADDONS_LIST%%/=' README2.md)"
+
+ sed -i "/**ADDONS_LIST%%/d" README2.md
+
+ # Sort folders by addon name
+
+ # shellcheck disable=SC2086
+ for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
+ if [ -f "$f"/config.json ]; then
+ NAME=$(jq -r '.name' "$f"/config.json)
+ if [[ "$f" != "$NAME" ]]; then
+ echo "$f" > "$f"/oldname
+ mv "$f" "$NAME"
+ fi
+ fi
+ done
+
+
+ # Populate template
+
+ find -- * -maxdepth 0 -type d | sort -r | while read -r f; do
+ # $f is an addon directory
+ if [ -f "$f/config.json" ]; then
+
+ echo "Project $f"
+
+ # Get variables
+ if [ -f "$f/oldname" ]; then FOLDERNAME="$(cat "$f/oldname")"; else FOLDERNAME="$f"; fi
+ NAME="$(jq -r '.name' "$f/config.json")"
+ DESCRIPTION="$(jq -r '.description' "$f/config.json")"
+ # Get icon
+ if [ "$(jq '.panel_icon' "$f/config.json")" != null ]; then
+ ICON="$(jq -r '.panel_icon' "$f/config.json")"
+ ICON="${ICON#*:}"
+ ICON=""
+ else
+ ICON=""
+ fi
+
+ # Write infos
+ echo "Writing infos"
+ sed -i "$ADDONSLINE"'{G;}' README2.md
+ if [[ "$(jq '.schema' "$f/config.json" 2>/dev/null)" == *"localdisks"* ]]; then sed -i "$ADDONSLINE"'a ![localdisks][localdisks-badge]' README2.md; fi
+ if [[ "$(jq '.schema' "$f/config.json" 2>/dev/null)" == *"networkdisks"* ]]; then sed -i "$ADDONSLINE"'a ![smb][smb-badge]' README2.md; fi
+ if [[ "$(jq '.full_access' "$f/config.json" 2>/dev/null)" == "true" ]]; then sed -i "$ADDONSLINE"'a ![full_access][full_access-badge]' README2.md; fi
+ if [[ "$(jq '.services[]' "$f/config.json" 2>/dev/null)" == *"mqtt"* ]]; then sed -i "$ADDONSLINE"'a ![mqtt][mqtt-badge]' README2.md; fi
+ if [[ "$(jq '.services[]' "$f/config.json" 2>/dev/null)" == *"mysql"* ]]; then sed -i "$ADDONSLINE"'a ![MariaDB][mariadb-badge]' README2.md; fi
+ if [[ "$(jq '.ingress' "$f/config.json" 2>/dev/null)" == "true" ]]; then sed -i "$ADDONSLINE"'a ![ingress][ingress-badge]' README2.md; fi
+ if [[ "$(jq '.arch[]' "$f/config.json")" == *"armv7"* ]]; then
+ sed -i "$ADDONSLINE"'a ![armv7][armv7-badge]' README2.md
+ else sed -i "$ADDONSLINE"'a ![armv7no][armv7no-badge]' README2.md; fi || true
+ if [[ "$(jq '.arch[]' "$f/config.json")" == *"amd64"* ]]; then
+ sed -i "$ADDONSLINE"'a ![amd64][amd64-badge]' README2.md
+ else sed -i "$ADDONSLINE"'a ![amd64no][amd64no-badge]' README2.md; fi || true
+ if [[ "$(jq '.arch[]' "$f/config.json")" == *"aarch64"* ]]; then
+ sed -i "$ADDONSLINE"'a ![aarch64][aarch64-badge]' README2.md
+ else sed -i "$ADDONSLINE"'a ![aarch64no][aarch64no-badge]' README2.md; fi || true
+ if [[ -f "$f/updater.json" ]]; then sed -i "$ADDONSLINE"'a ' README2.md; fi
+ sed -i "$ADDONSLINE"'a ' README2.md || true
+ sed -i "$ADDONSLINE"'a ✓ '"$ICON"' ['"$NAME"']('"$FOLDERNAME"'/) : '"$DESCRIPTION\\n" README2.md
+ fi
+ done
+
+ # Restore folders name
+
+ echo "Restore structure..."
+ find -- * -maxdepth 0 -type d | sort -r | while read -r f; do
+ if [ -f "$f/oldname" ]; then
+ NAME="$(cat "$f/oldname")"
+ rm "$f/oldname"
+ mv "$f" "$NAME"
+ fi
+ done
+ echo "... done"
+
+ # Write stats
+
+ # shellcheck disable=SC2002
+ echo "Global stats..."
+ STATS_DOWNLOADS="$(awk 'NR==2{print $1}' Stats)"
+ sed -i "s|%%STATS_DOWNLOADS%%|$STATS_DOWNLOADS|g" README2.md && \
+ sed -i "s|%%STATS_ADDONS%%|$(find . -name "config.json" | wc -l)|g" README2.md && \
+ STATS_ONE="$(awk 'NR==3{print $(NF)}' Stats)" && \
+ STATS_TWO="$(awk 'NR==4{print $(NF)}' Stats)" && \
+ STATS_THREE="$(awk 'NR==5{print $(NF)}' Stats)"
+ echo "Best addon is $STATS_ONE"
+ sed -i "s|%%STATS_ONE%%|${STATS_ONE^}|g" README2.md
+ sed -i "s|%%STATS_TWO%%|${STATS_TWO^}|g" README2.md
+ sed -i "s|%%STATS_THREE%%|${STATS_THREE^}|g" README2.md
+ echo "... done"
+
+ # Breakdown per arch
+ echo "Breakdown per arch..."
+ STATS_ARMV7="$(awk '{SUM+=$3}END{print SUM}' Stats2)"
+ STATS_AMD64="$(awk '{SUM+=$4}END{print SUM}' Stats2)"
+ STATS_AARCH64="$(awk '{SUM+=$5}END{print SUM}' Stats2)"
+ STATS_DOWNLOADS="$(( "$STATS_ARMV7" + "$STATS_AMD64" + "$STATS_AARCH64" ))"
+ STATS_ARMV7="$(awk -v t1="$STATS_ARMV7" -v t2="$STATS_AMD64" -v t3="$STATS_AARCH64" -v t4="$STATS_DOWNLOADS" 'BEGIN{printf "%.0f", t1/t4 * 100}')"
+ STATS_AMD64="$(awk -v t1="$STATS_ARMV7" -v t2="$STATS_AMD64" -v t3="$STATS_AARCH64" -v t4="$STATS_DOWNLOADS" 'BEGIN{printf "%.0f", t2/t4 * 100}')"
+ STATS_AARCH64="$(awk -v t1="$STATS_ARMV7" -v t2="$STATS_AMD64" -v t3="$STATS_AARCH64" -v t4="$STATS_DOWNLOADS" 'BEGIN{printf "%.0f", t3/t4 * 100}')"
+ sed -i "s|%%STATS_ARMV7%%|armv7: ${STATS_ARMV7}%|g" README2.md
+ sed -i "s|%%STATS_AMD64%%|amd64: ${STATS_AMD64}%|g" README2.md
+ sed -i "s|%%STATS_AARCH64%%|aarch64: ${STATS_AARCH64}%|g" README2.md
+ #echo $((100*$STATS_THREE/($STATS_ONE+$STATS_TWO+$STATS_THREE)))
+ echo "... done"
+
+ for var in "$STATS_ONE" "$STATS_TWO" "$STATS_THREE"; do
+ i=0
+ j=0
+ k=0
+ # shellcheck disable=SC2013
+ for i in $(sed -n "/$var/p" Stats); do
+ k="$((k+1))"
+ if [ "$k" -eq 3 ]; then break; fi
+ if [ "$i" -eq "$i" ] && [ "$i" -gt "$j" ]; then j="$i"; fi
+ done
+ sed -i "s|${var^}|${var^} (${j}x)|g" README2.md
+ echo "$STATS_ONE has $j downloads"
+ done
+ echo "... done"
+
+ # Replace template if change
+
+ echo "Replace template..."
+ mv README2.md README.md
+
+ echo "... done"
+
+ shell: bash
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ message: "GitHub bot : README updated"
+ default_author: github_actions
diff --git a/.github/workflows/daily_stale.yml b/.github/workflows/daily_stale.yml
new file mode 100644
index 0000000..118e4c0
--- /dev/null
+++ b/.github/workflows/daily_stale.yml
@@ -0,0 +1,33 @@
+# This workflow warns and then closes issues and PRs
+# that have had no activity for a specified amount of time.
+#
+# You can adjust the behavior by modifying this file.
+# For more information, see:
+# https://github.com/actions/stale
+---
+name: Mark stale issues and pull requests
+
+on:
+ schedule:
+ - cron: '0 12 * * *'
+ workflow_dispatch:
+
+jobs:
+ stale:
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ pull-requests: write
+
+ steps:
+ - uses: actions/stale@v8
+ with:
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
+ stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
+ stale-pr-message: 'Stale pull request message'
+ stale-issue-label: 'stale'
+ stale-pr-label: 'stale'
+ days-before-stale: '5'
+ days-before-close: '2'
+ exempt-issue-labels: 'prevent stale'
+ remove-stale-when-updated: true
diff --git a/.github/workflows/helper_stats_graphs.yaml b/.github/workflows/helper_stats_graphs.yaml
new file mode 100644
index 0000000..7070d4c
--- /dev/null
+++ b/.github/workflows/helper_stats_graphs.yaml
@@ -0,0 +1,242 @@
+# yamllint disable rule:line-length
+---
+name: Generate weekly graphs
+on:
+ workflow_call:
+ workflow_dispatch:
+
+jobs:
+ stats_graphs:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ - name: Install apps
+ run: |
+ git pull --rebase origin master
+ sudo apt-get update
+ sudo apt-get install gnuplot -y || true
+ - name: Create addons stats
+ run: |
+ # Prepare data
+ cp Stats Stats3
+ # Remove Totals
+ sed -i "2d" Stats3
+ # Inverse file
+ gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3
+ # Only top 10
+ head -n 11 Stats3 > tmp_file && mv tmp_file Stats3
+ # Transpose data
+ awk '
+ {
+ for (i=1; i<=NF; i++) {
+ a[NR,i] = $i
+ }
+ }
+ NF>p { p = NF }
+ END {
+ for(j=1; j<=p; j++) {
+ str=a[1,j]
+ for(i=2; i<=NR; i++){
+ str=str" "a[i,j];
+ }
+ print str
+ }
+ }' Stats3 > StatsTmp && mv StatsTmp .github/Stats3
+ cd .github || true
+ # Add download count to names
+ #build_list="$(head -n 1 Stats3)"
+ # shellcheck disable=SC2206
+ #build_list=($build_list)
+ # shellcheck disable=SC2013
+ #for var in "${build_list[@]:1}"; do
+ #i=0
+ #j=0
+ #k=0
+ # shellcheck disable=SC2013
+ # for i in $(sed -n "/${var}/p" Stats); do
+ # k="$((k+1))"
+ # if [ "$k" -eq 3 ]; then break; fi
+ # if [ "$i" -eq "$i" ] && [ "$i" -gt "$j" ]; then j="$i"; fi
+ # done
+ #sed -i "s|${var}|${var}_(${j}x)|g" Stats3
+ #done
+ echo "... done"
+ # Remove series with less than 4 points
+ sed -i "/^[0-9|-]* [0-9*|-]* [0-9*|-]* -/d" Stats3
+ # Plot graph
+ ( gnuplot -persist <<-EOFMarker
+ set title 'Top 10 addons'
+ set ylabel 'Number of installations'
+ set xdata time
+ set datafile missing "-"
+ set timefmt "%Y-%m-%d"
+ set format x "%y-%m-%d"
+ set datafile sep ' '
+ set autoscale
+ set terminal png size 500,300
+ set output 'stats_addons.png'
+ set term png tiny
+ plot for [i=2:*] 'Stats3' using 1:i w l title columnhead(i) smooth bezier
+ EOFMarker
+ ) || ( gnuplot -persist <<-EOFMarker
+ set title 'Top 10 addons'
+ set ylabel 'Number of installations'
+ set xdata time
+ set datafile missing "-"
+ set timefmt "%Y-%m-%d"
+ set format x "%y-%m-%d"
+ set datafile sep ' '
+ set autoscale
+ set terminal png size 500,300
+ set output 'stats_addons.png'
+ set term png tiny
+ plot for [i=2:*] 'Stats3' using 1:i w l title columnhead(i)
+ EOFMarker
+ )
+ #plot for [i=1:*] 'Stats3' using 0:i
+ rm Stats3
+ cd .. || true
+
+ - name: Create individual stats
+ run: |
+ # Prepare data
+ cp Stats Stats3
+ # Remove Totals
+ sed -i "2d" Stats3
+ # Inverse file
+ gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3
+ # For each addon
+ # shellcheck disable=SC2013
+ for line in $(awk '{ print $1 }' Stats3); do
+ TITLE="${line%% *}"
+ FOLDER="$(grep -irl "ghcr.io/alexbelgium/$TITLE-{arch}" --include="config.*" . | xargs -r dirname)"
+ FOLDER="${FOLDER:2}"
+ echo "$TITLE found in $FOLDER"
+ # If non null
+ if [[ "${#FOLDER}" -gt 2 ]]; then
+ sed -n "/Date /p" Stats3 > "$FOLDER"/StatsTmp
+ sed -n "/$TITLE /p" Stats3 >> "$FOLDER"/StatsTmp
+ # Go in folder
+ cd "$FOLDER" || true
+ cat StatsTmp
+ # Transpose data
+ awk '
+ {
+ for (i=1; i<=NF; i++) {
+ a[NR,i] = $i
+ }
+ }
+ NF>p { p = NF }
+ END {
+ for(j=1; j<=p; j++) {
+ str=a[1,j]
+ for(i=2; i<=NR; i++){
+ str=str" "a[i,j];
+ }
+ print str
+ }
+ }' StatsTmp > StatsTmp2 && mv StatsTmp2 StatsTmp
+ #Normalize data
+ #awk 'FNR==NR{max=($2+0>max)?$2:max;next} {print $1,$2/max}' StatsTmp StatsTmp
+ # Plot graph
+ ( gnuplot -persist <<-EOFMarker
+ set title "$TITLE"
+ set ylabel 'Number of installations'
+ set xdata time
+ set datafile missing "-"
+ set timefmt "%Y-%m-%d"
+ set format x "%y-%m-%d"
+ set datafile sep ' '
+ set autoscale
+ set terminal png size 500,150
+ set output "stats.png"
+ set term png tiny
+ plot for [i=2:*] 'StatsTmp' using 1:i w l title columnhead(i) smooth bezier
+ EOFMarker
+ ) || ( gnuplot -persist <<-EOFMarker
+ set title "$TITLE"
+ set ylabel 'Number of installations'
+ set xdata time
+ set datafile missing "-"
+ set timefmt "%Y-%m-%d"
+ set format x "%y-%m-%d"
+ set datafile sep ' '
+ set autoscale
+ set terminal png size 500,150
+ set output "stats.png"
+ set term png tiny
+ plot for [i=2:*] 'StatsTmp' using 1:i w l title columnhead(i)
+ EOFMarker
+ ) || true
+ rm StatsTmp || true
+ cd .. || true
+ fi || true
+ done
+ # Clean files
+ rm StatsTmp2
+ rm Stats3
+ - name: Create global stats
+ run: |
+ # Prepare data
+ cp Stats Stats3
+ # Inverse file
+ gawk -i inplace '{for(i=NF;i>1;i--)printf "%s ",$i;printf "%s",$1;print ""}' Stats3
+ # Only totals
+ head -n 2 Stats3 > tmp_file && mv tmp_file Stats3
+ # Transpose data
+ awk '
+ {
+ for (i=1; i<=NF; i++) {
+ a[NR,i] = $i
+ }
+ }
+ NF>p { p = NF }
+ END {
+ for(j=1; j<=p; j++) {
+ str=a[1,j]
+ for(i=2; i<=NR; i++){
+ str=str" "a[i,j];
+ }
+ print str
+ }
+ }' Stats3 > StatsTmp && mv StatsTmp .github/Stats3
+ cd .github || true
+ sed -i "1d" Stats3
+ # Plot graph
+ gnuplot -persist <<-EOFMarker
+ set title 'Total addons'
+ set ylabel 'Number of installations'
+ set xdata time
+ set datafile missing "-"
+ set timefmt "%Y-%m-%d"
+ set format x "%y-%m-%d"
+ set datafile sep ' '
+ set key top left autotitle columnheader
+ set autoscale
+ set terminal png size 500,300
+ set output 'stats.png'
+ set term png tiny
+ plot 'Stats3' using 1:2 lt rgb 'red' w l title 'Total addons' smooth bezier
+ EOFMarker
+ rm Stats3
+ cd .. || true
+ - name: Clean
+ run: |
+ echo "Starting run"
+ if [ -f stats.png ]; then rm stats.png; fi
+ if [ -f Stats3 ]; then rm Stats3; fi
+ - name: Update stars
+ run: |
+ echo "Starting run"
+ # Get stars
+ wget -S -O .github/stars.svg https://contrib.rocks/image?repo=Mesteriis/hassio-addons-avm || true
+ # Get stars2
+ wget -S -O .github/stars2.svg https://git-lister.onrender.com/api/stars/Mesteriis/hassio-addons-avm?limit=30 || true
+ # Get stars evolution
+ wget -S -O .github/starsevol.svg "https://api.star-history.com/svg?repos=Mesteriis/hassio-addons-avm&type=Date" || true
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ message: "GitHub bot : graphs updated"
+ default_author: github_actions
diff --git a/.github/workflows/labels.yaml b/.github/workflows/labels.yaml
deleted file mode 100644
index 6be7dc0..0000000
--- a/.github/workflows/labels.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-name: Sync labels
-
-# yamllint disable-line rule:truthy
-on:
- push:
- branches:
- - master
- paths:
- - .github/labels.yml
-
-jobs:
- labels:
- name: ♻️ Sync labels
- runs-on: ubuntu-latest
- steps:
- - name: ⤵️ Check out code from GitHub
- uses: actions/checkout@v2.3.4
- - name: 🚀 Run Label Syncer
- uses: micnncim/action-label-syncer@v1.3.0
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml
deleted file mode 100644
index 3db43f6..0000000
--- a/.github/workflows/lint.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-name: Lint
-
-# yamllint disable-line rule:truthy
-on:
- push:
- pull_request:
- types:
- - opened
- - reopened
- - synchronize
- workflow_dispatch:
-
-jobs:
- json:
- name: JSON Lint
- runs-on: ubuntu-latest
- steps:
- - name: ⤵️ Check out code from GitHub
- uses: actions/checkout@v2.3.4
- - name: 🚀 Run JQ
- run: |
- shopt -s globstar
- cat **/*.json | jq '.'
-
- yamllint:
- name: YAMLLint
- runs-on: ubuntu-latest
- steps:
- - name: ⤵️ Check out code from GitHub
- uses: actions/checkout@v2.3.4
- - name: 🚀 Run YAMLLint
- uses: frenck/action-yamllint@v1.1
diff --git a/.github/workflows/lock.yaml b/.github/workflows/lock.yaml
deleted file mode 100644
index ff147a2..0000000
--- a/.github/workflows/lock.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
----
-name: Lock
-
-# yamllint disable-line rule:truthy
-on:
- schedule:
- - cron: "0 9 * * *"
- workflow_dispatch:
-
-jobs:
- lock:
- name: 🔒 Lock closed issues and PRs
- runs-on: ubuntu-latest
- steps:
- - uses: dessant/lock-threads@v2.0.3
- with:
- github-token: ${{ github.token }}
- issue-lock-inactive-days: "30"
- issue-lock-reason: ""
- pr-lock-inactive-days: "1"
- pr-lock-reason: ""
diff --git a/.github/workflows/on_issues.yml b/.github/workflows/on_issues.yml
new file mode 100644
index 0000000..02cf1a9
--- /dev/null
+++ b/.github/workflows/on_issues.yml
@@ -0,0 +1,69 @@
+# yamllint disable rule:line-length
+---
+name: Readme Issues linker
+
+on:
+ issues:
+ types: [opened, edited, closed]
+ workflow_dispatch:
+
+jobs:
+ ISSUES_linked:
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ - name: Assign issues
+ run: |
+ # Init
+ echo "Starting"
+
+ # Get issues list
+ curl -s -L https://api.github.com/repos/Mesteriis/hassio-addons-avm/issues > issueslist
+ # Go through all folders, add to filters if not existing
+ for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
+ if [ -f "$f"/config.json ]; then
+
+ # Clean previously reported issues
+ sed -i "/Open Issue :/d" "$f"/README.md
+ sed -i "/Open Request :/d" "$f"/README.md
+ # If there is an issue with the addon name in title, put a message
+ COUNTER=0
+ while [[ $(jq -r --arg COUNTER "$COUNTER" ".[$COUNTER].title" issueslist) != null ]]; do
+
+ #Increment counter
+ (( COUNTER=COUNTER+1 )) || true
+
+ #Get variables
+ TITLE="$(jq -r --arg COUNTER "$COUNTER" ".[$COUNTER].title" issueslist)"
+ TITLE="${TITLE//[<>\$\'\"]/}"
+ #Check if relevant to addon
+ SLUG="$(jq -r --arg f "$f" ".slug" "$f"/config.json)"
+ NAME="$(jq -r --arg f "$f" ".name" "$f"/config.json)"
+ if [[ "${TITLE,,}" == *"${f,,}"* ]] || [[ "${TITLE,,}" == *"${SLUG,,}"* ]] || [[ "${TITLE,,}" == *"${NAME,,}"* ]]; then
+ echo "Project $TITLE, $SLUG, $NAME has an issue"
+ REQ="$(jq -r --arg COUNTER "$COUNTER" ".[$COUNTER].user.login" issueslist)"
+ URL="$(jq -r --arg COUNTER "$COUNTER" ".[$COUNTER].html_url" issueslist)"
+ LABEL="$(jq -r --arg COUNTER "$COUNTER" ".[$COUNTER].labels[].name" issueslist)"
+ DATEISSUE="$(jq -r --arg COUNTER "$COUNTER" ".[$COUNTER].created_at" issueslist)"
+ DATEISSUE="${DATEISSUE%T*}"
+ if [[ "$LABEL" == *"bug"* ]]; then
+ sed -i "1i ## ⚠ Open Issue : [$TITLE (opened ${DATEISSUE})]($URL) by [@${REQ}](https://github.com/$REQ)" "$f"/README.md
+ elif [[ "$LABEL" == *"enhancement"* ]]; then
+ sed -i "1i ## ⚠ Open Request : [$TITLE (opened ${DATEISSUE})]($URL) by [@${REQ}](https://github.com/$REQ)" "$f"/README.md
+ fi
+ fi
+ done
+ fi
+ done
+ # Remove issues list
+ rm issueslist
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ message: "Github bot : issues linked to readme"
+ default_author: github_actions
+ commit: -u
+ fetch: --force
+ push: --force
+
diff --git a/.github/workflows/onpr_automerge.yaml b/.github/workflows/onpr_automerge.yaml
new file mode 100644
index 0000000..c6982e3
--- /dev/null
+++ b/.github/workflows/onpr_automerge.yaml
@@ -0,0 +1,40 @@
+# yamllint disable rule:line-length
+# shellcheck disable=SC2043
+---
+name: automerge
+on:
+ pull_request_review:
+ types:
+ - submitted
+ issue_comment:
+ types: created
+ check_suite:
+ types:
+ - completed
+ status: {}
+jobs:
+ labeler:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Add the automerge label
+ if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, '/automerge') }}
+ uses: actions/github-script@v4
+ with:
+ github-token: ${{secrets.GITHUB_TOKEN}}
+ script: |
+ github.issues.addLabels({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ labels: ['automerge']
+ })
+ automerge:
+ runs-on: ubuntu-latest
+ needs: [labeler]
+ steps:
+ - id: automerge
+ if: ${{ github.event.issue.pull_request }}
+ name: automerge
+ uses: "pascalgn/automerge-action@v0.16.2"
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.github/workflows/onpr_check-pr.yaml b/.github/workflows/onpr_check-pr.yaml
new file mode 100644
index 0000000..74b35f6
--- /dev/null
+++ b/.github/workflows/onpr_check-pr.yaml
@@ -0,0 +1,276 @@
+# yamllint disable rule:line-length
+# shellcheck disable=SC2043
+---
+name: PR Check Build
+on:
+ pull_request:
+ branches:
+ - master
+
+jobs:
+ check-addon-changes:
+ runs-on: ubuntu-latest
+ outputs:
+ changedAddons: ${{ steps.filter.outputs.changes }}
+ changedChangelogFiles: ${{ steps.changed-files.outputs.changelogs_files }}
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+
+ - name: 📂 Detect changed addons
+ uses: dorny/paths-filter@v3
+ id: filter
+ with:
+ filters: .github/paths-filter.yml
+
+ - name: 📂 Detect chanced files
+ uses: dorny/paths-filter@v3
+ id: changed-files
+ with:
+ list-files: csv
+ filters: |
+ changelogs:
+ - '**/CHANGELOG.md'
+ check-changed-changelog:
+ name: Check if CHANGELOG.md changed
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ runs-on: ubuntu-latest
+ needs: check-addon-changes
+ strategy:
+ fail-fast: false
+ matrix:
+ addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }}
+ steps:
+ - name: 🔎 Check for updated CHANGELOG.md
+ shell: bash
+ run: |
+ # shellcheck disable=SC2076,SC2059
+ if [[ ! "${{ needs.check-addon-changes.outputs.changedChangelogFiles }}" =~ "${{ matrix.addon }}/CHANGELOG.md" ]]; then
+ echo "::error::No new entries in ${{ matrix.addon }} CHANGELOG.md file!"
+ exit 1
+ fi
+
+ check-addon-label:
+ name: Check for existance of the addon label
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ runs-on: ubuntu-latest
+ needs: check-addon-changes
+ strategy:
+ fail-fast: false
+ matrix:
+ addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }}
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+
+ - name: 🔎 Check if a label for the addon exists
+ shell: bash
+ run: |
+ labeltext=$(sed -nr "/${{ matrix.addon }}/p" '.github/paths-filter.yml')
+ if [[ -z "$labeltext" ]]; then
+ echo "::error::There is no label for this addon! Please add it to .github/paths-filter.yml"
+ exit 1
+ fi
+ addon-linter:
+ name: Addon linting
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ runs-on: ubuntu-latest
+ needs: check-addon-changes
+ strategy:
+ fail-fast: false
+ matrix:
+ addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }}
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+
+ - name: 🔎 Run Home Assistant Add-on Lint
+ uses: frenck/action-addon-linter@v2
+ with:
+ path: "./${{ matrix.addon }}"
+
+ check-build:
+ name: Test addon build
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ runs-on: ubuntu-latest
+ needs: check-addon-changes
+ strategy:
+ fail-fast: false
+ matrix:
+ addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }}
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+
+ - name: ℹ️ Gather addon info
+ id: information
+ uses: frenck/action-addon-information@v1.4
+ with:
+ path: "./${{ matrix.addon }}/"
+
+ - name: 🗄️ Cache docker layers
+ uses: actions/cache@v3
+ with:
+ path: /tmp/buildx-cache
+ key: ${{ runner.os }}-buildx-${{ matrix.addon }}-${{ hashFiles('**/Dockerfile') }}
+ restore-keys: ${{ runner.os }}-buildx-${{ matrix.addon }}-
+
+ - name: 🔖 Create addon image tags
+ id: tags
+ shell: bash
+ run: |
+ imagetemplate=${{ steps.information.outputs.image }}
+ version=${{ steps.information.outputs.version }}
+ echo "Using imagetemplate '$imagetemplate'"
+ # shellcheck disable=SC2129
+ echo "armhf=${imagetemplate/\{arch\}/armhf}:${version}" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "armv7=${imagetemplate/\{arch\}/armv7}:${version}" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "aarch64=${imagetemplate/\{arch\}/aarch64}:${version}" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "amd64=${imagetemplate/\{arch\}/amd64}:${version}" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "i386=${imagetemplate/\{arch\}/i386}:${version}" >> "$GITHUB_OUTPUT"
+ - name: 🏷️ Create addon labels
+ id: labels
+ shell: bash
+ run: |
+ exit 0
+ # shellcheck disable=SC2076,SC2059
+ labels="io.hass.version=${{ steps.information.outputs.version }}"
+ labels=$(printf '%s' "$labels\nio.hass.name=${{ steps.information.outputs.name }}")
+ labels=$(printf '%s' "$labels\nio.hass.description=${{ steps.information.outputs.description }}")
+ labels=$(printf '%s' "$labels\nio.hass.type=addon")
+ labels=$(printf '%s' "$labels\nio.hass.url=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/tree/master/${{ matrix.addon }}")
+ labels=$(printf '%s' "$labels\norg.opencontainers.image.title=${{ steps.information.outputs.name }}")
+ labels=$(printf '%s' "$labels\norg.opencontainers.image.description=${{ steps.information.outputs.description }}")
+ labels=$(printf '%s' "$labels\norg.opencontainers.image.version=${{ steps.information.outputs.version }}")
+ labels=$(printf '%s' "$labels\norg.opencontainers.image.authors=Poeschl ")
+ labels=$(printf '%s' "$labels\norg.opencontainers.image.url=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}")
+ labels=$(printf '%s' "$labels\norg.opencontainers.image.source=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/tree/master/${{ matrix.addon }}")
+ labels=$(printf '%s' "$labels\norg.opencontainers.image.created=$(date -Is)")
+ labels=$(printf '%s' "$labels\norg.opencontainers.image.revision=${GITHUB_SHA}")
+ echo "Generic labels: $labels"
+ armhf_labels=$(printf '%s' "$labels\nio.hass.arch=armhf")
+ armv7_labels=$(printf '%s' "$labels\nio.hass.arch=armv7")
+ aarch64_labels=$(printf '%s' "$labels\nio.hass.arch=aarch64")
+ amd64_labels=$(printf '%s' "$labels\nio.hass.arch=amd64")
+ i386_labels=$(printf '%s' "$labels\nio.hass.arch=i386")
+ # allow multiline outputs, see https://github.community/t/set-output-truncates-multiline-strings/16852
+ armhf_labels="${armhf_labels//$'\n'/'%0A'}"
+ armv7_labels="${armv7_labels//$'\n'/'%0A'}"
+ aarch64_labels="${aarch64_labels//$'\n'/'%0A'}"
+ amd64_labels="${amd64_labels//$'\n'/'%0A'}"
+ i386_labels="${i386_labels//$'\n'/'%0A'}"
+ # shellcheck disable=SC2129
+ echo "armhf=$armhf_labels" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "armv7=$armv7_labels" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "aarch64=$aarch64_labels" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "amd64=$amd64_labels" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "i386=$i386_labels" >> "$GITHUB_OUTPUT"
+ - name: 💽 Create addon build-args
+ id: build_args
+ shell: bash
+ run: |
+ # shellcheck disable=SC2129
+ echo "armhf=BUILD_FROM=$(jq -r .build_from.armhf // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "armv7=BUILD_FROM=$(jq -r .build_from.armv7 // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "aarch64=BUILD_FROM=$(jq -r .build_from.aarch64 // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "amd64=BUILD_FROM=$(jq -r .build_from.amd64 // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT"
+ # shellcheck disable=SC2129
+ echo "i386=BUILD_FROM=$(jq -r .build_from.i386 // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT"
+
+ - name: 🏗️ Set up QEMU
+ uses: docker/setup-qemu-action@v3
+
+ - name: 🏗️ Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+
+ - name: 💿 Build Addon - armhf
+ if: ${{ steps.information.outputs.armhf == 'true' }}
+ uses: docker/build-push-action@v5
+ with:
+ context: ${{ matrix.addon }}
+ push: false
+ load: true
+ file: ${{ matrix.addon }}/Dockerfile
+ tags: ${{ steps.tags.outputs.armhf }}
+ labels: |
+ ${{ steps.labels.outputs.armhf }}
+ build-args: ${{ steps.build_args.outputs.armhf }}
+ cache-from: type=local,src=/tmp/buildx-cache/armhf
+ cache-to: type=local,dest=/tmp/buildx-cache-new/armhf
+
+ - name: 💿 Build Addon - armv7
+ if: ${{ steps.information.outputs.armv7 == 'true' }}
+ uses: docker/build-push-action@v5
+ with:
+ context: ${{ matrix.addon }}
+ push: false
+ load: true
+ file: ${{ matrix.addon }}/Dockerfile
+ tags: ${{ steps.tags.outputs.armv7 }}
+ labels: |
+ ${{ steps.labels.outputs.armv7 }}
+ build-args: ${{ steps.build_args.outputs.armv7 }}
+ cache-from: type=local,src=/tmp/buildx-cache/armv7
+ cache-to: type=local,dest=/tmp/buildx-cache-new/armv7
+
+ - name: 💿 Build Addon - aarch64
+ if: ${{ steps.information.outputs.aarch64 == 'true' }}
+ uses: docker/build-push-action@v5
+ with:
+ context: ${{ matrix.addon }}
+ push: false
+ load: true
+ file: ${{ matrix.addon }}/Dockerfile
+ tags: ${{ steps.tags.outputs.aarch64 }}
+ labels: |
+ ${{ steps.labels.outputs.aarch64 }}
+ build-args: ${{ steps.build_args.outputs.aarch64 }}
+ cache-from: type=local,src=/tmp/buildx-cache/aarch64
+ cache-to: type=local,dest=/tmp/buildx-cache-new/aarch64
+
+ - name: 💿 Build Addon - amd64
+ if: ${{ steps.information.outputs.amd64 == 'true' }}
+ uses: docker/build-push-action@v5
+ with:
+ context: ${{ matrix.addon }}
+ push: false
+ load: true
+ file: ${{ matrix.addon }}/Dockerfile
+ tags: ${{ steps.tags.outputs.amd64 }}
+ labels: |
+ ${{ steps.labels.outputs.amd64 }}
+ build-args: ${{ steps.build_args.outputs.amd64 }}
+ cache-from: type=local,src=/tmp/buildx-cache/amd64
+ cache-to: type=local,dest=/tmp/buildx-cache-new/amd64
+
+ - name: 💿 Build Addon - i386
+ if: ${{ steps.information.outputs.i386 == 'true' }}
+ uses: docker/build-push-action@v5
+ with:
+ context: ${{ matrix.addon }}
+ push: false
+ load: true
+ file: ${{ matrix.addon }}/Dockerfile
+ tags: ${{ steps.tags.outputs.i386 }}
+ labels: |
+ ${{ steps.labels.outputs.i386 }}
+ build-args: ${{ steps.build_args.outputs.i386 }}
+ cache-from: type=local,src=/tmp/buildx-cache/i386
+ cache-to: type=local,dest=/tmp/buildx-cache-new/i386
+
+ # Fix for https://github.com/docker/build-push-action/issues/252
+ - name: 🗄️ Update cache Folder
+ run: |
+ rm -rf /tmp/buildx-cache
+ mv /tmp/buildx-cache-new /tmp/buildx-cache
diff --git a/.github/workflows/onpush_builder.yaml b/.github/workflows/onpush_builder.yaml
new file mode 100644
index 0000000..9a61509
--- /dev/null
+++ b/.github/workflows/onpush_builder.yaml
@@ -0,0 +1,232 @@
+# yamllint disable rule:line-length
+# inspired from https://github.com/Poeschl/Hassio-Addons
+---
+name: Builder
+
+env:
+ BUILD_ARGS: ""
+
+on:
+ workflow_call:
+ push:
+ branches:
+ - master
+ paths:
+ - "**/config.*"
+
+jobs:
+ correct_path_filters:
+ runs-on: ubuntu-latest
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+ - name: Update path_filters
+ run: |
+ # Init
+ echo "Starting"
+
+ # Go through all folders, add to filters if not existing
+ for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
+ if [ -f "$f"/config.json ]; then
+
+ # Add to file
+ if ! grep "$f:" ".github/paths-filter.yml"; then
+ echo "$f: $f/config.*" >> ".github/paths-filter.yml"
+ fi
+
+ # Identify addons with true images
+ if [ "$(jq '.image' "$f/config.json")" != null ]; then
+ sed -i "/$f/ s/ # Image : yes//g" ".github/paths-filter.yml"
+ sed -i "/$f/ s/$/ # Image : yes/" ".github/paths-filter.yml"
+ fi
+ fi
+ done
+
+ # Sort yaml
+ sort -t= ".github/paths-filter.yml" -o ".github/paths-filter.yml"
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ commit: -u
+ message: "GitHub bot : scripts executable"
+ default_author: github_actions
+ check-addon-changes:
+ runs-on: ubuntu-latest
+ needs: [correct_path_filters]
+ outputs:
+ changedAddons: ${{ steps.filter.outputs.changes }}
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+ - name: 📂 Detect changed files
+ uses: dorny/paths-filter@v3
+ id: filter
+ with:
+ filters: .github/paths-filter.yml
+
+ correct-CRLF:
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ needs: check-addon-changes
+ uses: ./.github/workflows/weekly_crlftolf.yaml
+
+ make-executable:
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ needs: [check-addon-changes, correct-CRLF]
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }}
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ - name: Make scripts executable
+ run: |
+ echo "Starting"
+ git pull origin master
+ git config core.filemode true
+ # shellcheck disable=SC2086,SC2046
+ #git update-index --chmod=+x $(find "$path" -type f -iname "*.sh")
+ chmod u+x $(find "$path" -type f -iname "*.sh") || true
+ #git commit -am "fixing the script permissions..."
+ env:
+ path: "./${{ matrix.addon }}"
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ commit: -u
+ message: "GitHub bot : scripts executable"
+ default_author: github_actions
+
+ lint_config:
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ needs: check-addon-changes
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }}
+ steps:
+ - name: ↩️ Checkout
+ uses: actions/checkout@v4
+ - name: 🔎 Run Home Assistant Add-on Lint
+ uses: frenck/action-addon-linter@v2
+ with:
+ path: "./${{ matrix.addon }}"
+
+ build:
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ needs: [check-addon-changes, make-executable, correct-CRLF]
+ runs-on: ubuntu-latest
+ environment: CR_PAT
+ name: Build ${{ matrix.arch }} ${{ matrix.addon }} add-on
+ strategy:
+ matrix:
+ addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }}
+ arch: ["aarch64", "amd64", "armv7"]
+
+ steps:
+ - name: Check out repository
+ uses: actions/checkout@v4
+
+ - name: Get information
+ id: info
+ uses: home-assistant/actions/helpers/info@master
+ with:
+ path: "./${{ matrix.addon }}"
+
+ - name: Check if add-on should be built
+ id: check
+ env:
+ HEAD: "${{ github.head_ref }}"
+ run: |
+ # shellcheck disable=SC2157,SC2086
+ if [[ "${{ steps.info.outputs.architectures }}" =~ ${{ matrix.arch }} ]]; then
+ # shellcheck disable=SC2129
+ echo "build_arch=true" >> $GITHUB_OUTPUT;
+ # shellcheck disable=SC2129
+ echo "image=$(echo ${{ steps.info.outputs.image }} | cut -d'/' -f3)" >> $GITHUB_OUTPUT;
+ if [[ -z "$HEAD" ]] && [[ "${{ github.event_name }}" == "push" ]]; then
+ # shellcheck disable=SC2129
+ echo "BUILD_ARGS=" >> $GITHUB_ENV;
+ fi
+ else
+ echo "${{ matrix.arch }} is not a valid arch for ${{ matrix.addon }}, skipping build";
+ # shellcheck disable=SC2129
+ echo "build_arch=false" >> $GITHUB_OUTPUT;
+ fi
+
+ - name: Use action to check for mixed line endings (CRLF and LF)
+ uses: ymwymw/check-mixed-line-endings@v2
+
+ - name: Login to GitHub Container Registry
+ if: env.BUILD_ARGS != '--test'
+ uses: docker/login-action@v3.1.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Build ${{ matrix.addon }} add-on
+ id: builderstep
+ if: steps.check.outputs.build_arch == 'true'
+ uses: home-assistant/builder@master
+ env:
+ CAS_API_KEY: ${{ secrets.CAS_API_KEY }}
+ with:
+ args: |
+ ${{ env.BUILD_ARGS }} \
+ --${{ matrix.arch }} \
+ --target /data/${{ matrix.addon }} \
+ --image "${{ steps.check.outputs.image }}" \
+ --docker-hub "ghcr.io/${{ github.repository_owner }}" \
+ --addon
+
+ make-changelog:
+ if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }}
+ needs: [check-addon-changes, build]
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }}
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ - name: Update changelog for minor versions
+ run: |
+ echo "Starting"
+ # Git pull
+ git pull || true
+ cd "$path"
+ # Get version
+ if [ -f config.yaml ]; then
+ version="$(sed -e '/version/!d' -e 's/.*version: //' config.yaml)"
+ elif [ -f config.json ]; then
+ version="$(sed -e '/version/!d' -e 's/.*[^"]*"\([^"]*\)"/\1/' config.json)"
+ version="${version//,}"
+ else
+ exit 1
+ fi
+ # Exit if test
+ if [[ "$version" == *"test"* ]]; then exit 0; fi
+ # Create changelog
+ touch CHANGELOG.md
+ # If the version does not exist
+ if ! grep -q "$version" CHANGELOG.md; then
+ first_line="$(sed -n '/./p' CHANGELOG.md | head -n 1)"
+ # If the first line does not start with -
+ if [[ "$first_line" != "-"* ]]; then
+ sed -i "1i\- Minor bugs fixed" CHANGELOG.md
+ fi
+ sed -i "1i\## $version ($(date '+%d-%m-%Y'))" CHANGELOG.md
+ #fi
+ fi
+ env:
+ path: "./${{ matrix.addon }}"
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ commit: -u
+ message: "GitHub bot : changelog"
+ default_author: github_actions
+ fetch: --force
+ push: --force
diff --git a/.github/workflows/onpush_superlinter.yml b/.github/workflows/onpush_superlinter.yml
new file mode 100644
index 0000000..42e740b
--- /dev/null
+++ b/.github/workflows/onpush_superlinter.yml
@@ -0,0 +1,32 @@
+# This workflow executes several linters on changed files based on languages used in your code base whenever
+# you push a code or open a pull request.
+#
+# You can adjust the behavior by modifying this file.
+# For more information, see:
+# https://github.com/github/super-linter
+---
+name: Lint On Change
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+jobs:
+
+ run-lint:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ # Full git history is needed to get a proper list of changed files within `super-linter`
+ fetch-depth: 0
+
+ - name: Lint Code Base
+ uses: docker://github/super-linter:slim-v4
+ env:
+ VALIDATE_ALL_CODEBASE: false
+ DEFAULT_BRANCH: master
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ VALIDATE_NATURAL_LANGUAGE: false
diff --git a/.github/workflows/repository-updater.yaml b/.github/workflows/repository-updater.yaml
deleted file mode 100644
index 69bd780..0000000
--- a/.github/workflows/repository-updater.yaml
+++ /dev/null
@@ -1,54 +0,0 @@
----
-name: Repository Updater
-
-# yamllint disable-line rule:truthy
-on:
- repository_dispatch:
- types: ["update"]
-
-jobs:
- publish:
- name: Publish add-on update
- runs-on: ubuntu-latest
- steps:
- - name: 🚀 Run Repository Updater
- uses: hassio-addons/repository-updater@v1.1
- with:
- addon: ${{ github.event.client_payload.addon }}
- repository: ${{ github.repository }}
- token: ${{ secrets.UPDATER_TOKEN }}
-
- announce:
- name: Announce add-on update
- needs: publish
- runs-on: ubuntu-latest
- steps:
- - name: 📢 Announce on Discord server
- uses: sarisia/actions-status-discord@v1.8.6
- with:
- webhook: ${{ secrets.DISCORD_WEBHOOK }}
- nodetail: true
- username: ${{ github.event.client_payload.name }}
- avatar_url: |
- https://raw.githubusercontent.com/${{ github.repository }}/master/${{ github.event.client_payload.addon }}/icon.png
- title: ":arrow_up: ${{ github.event.client_payload.name }} ${{ github.event.client_payload.version }}"
- image: |
- https://raw.githubusercontent.com/${{ github.repository }}/master/${{ github.event.client_payload.addon }}/logo.png
- description: |
- A new version of the ${{ github.event.client_payload.name }} add-on has been published.
-
- **Version**: `${{ github.event.client_payload.version }}`
- **Release notes**:
-
-
- - name: 📢 Announce on Twitter
- uses: devigned/go-twitter-action@v1.0.2
- with:
- apiKey: ${{ secrets.TWITTER_API_KEY }}
- apiKeySecret: ${{ secrets.TWITTER_API_SECRET }}
- accessToken: ${{ secrets.TWITTER_ACCESS_TOKEN }}
- accessTokenSecret: ${{ secrets.TWITTER_ACCESS_SECRET }}
- message: |
- ⬆️ ${{ github.event.client_payload.name }} ${{ github.event.client_payload.version }}
-
- https://github.com/${{ github.event.client_payload.repository }}/releases/tag/${{ github.event.client_payload.version }}
diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml
deleted file mode 100644
index d9a5240..0000000
--- a/.github/workflows/stale.yaml
+++ /dev/null
@@ -1,40 +0,0 @@
----
-name: Stale
-
-# yamllint disable-line rule:truthy
-on:
- schedule:
- - cron: "0 8 * * *"
- workflow_dispatch:
-
-jobs:
- stale:
- name: 🧹 Clean up stale issues and PRs
- runs-on: ubuntu-latest
- steps:
- - name: 🚀 Run stale
- uses: actions/stale@v3.0.19
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- days-before-stale: 30
- days-before-close: 7
- remove-stale-when-updated: true
- stale-issue-label: "stale"
- exempt-issue-labels: "no-stale,help-wanted"
- stale-issue-message: >
- There hasn't been any activity on this issue recently, so we
- clean up some of the older and inactive issues.
-
- Please make sure to update to the latest version and
- check if that solves the issue. Let us know if that works for you
- by leaving a comment 👍
-
- This issue has now been marked as stale and will be closed if no
- further activity occurs. Thanks!
- stale-pr-label: "stale"
- exempt-pr-labels: "no-stale"
- stale-pr-message: >
- There hasn't been any activity on this pull request recently. This
- pull request has been automatically marked as stale because of that
- and will be closed if no further activity occurs within 7 days.
- Thank you for your contributions.
diff --git a/.github/workflows/translations-download.yaml b/.github/workflows/translations-download.yaml
deleted file mode 100644
index 1e62b73..0000000
--- a/.github/workflows/translations-download.yaml
+++ /dev/null
@@ -1,75 +0,0 @@
----
-name: Translations Download
-
-# yamllint disable-line rule:truthy
-on:
- schedule:
- - cron: "0 8 * * *"
- workflow_dispatch:
- workflow_run:
- workflows: ["Translations Upload"]
- branches: [master]
- types:
- - completed
-
-jobs:
- json:
- name: Download Translations
- runs-on: ubuntu-latest
- steps:
- - name: ⤵️ Check out code from GitHub
- uses: actions/checkout@v2.3.4
- with:
- fetch-depth: 0
- - name: 🏗 Set up yq
- uses: frenck/action-setup-yq@v1.0.0
- - name: 🏗 Set up the Lokalise CLI
- uses: frenck/action-setup-lokalise@v1.0.0
- - name: ⤵️ Download translations
- run: |
- echo "Downloading translations to lokalise"
- lokalise2 file download \
- --token "${LOKALISE_TOKEN}" \
- --project-id "${LOKALISE_PROJECT}" \
- --format yaml \
- --original-filenames=false \
- --export-empty-as base \
- --bundle-structure ".translations/%LANG_ISO%.yaml"
- env:
- LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- LOKALISE_PROJECT: ${{ secrets.LOKALISE_PROJECT }}
- - name: 🚀 Process translations
- run: |
- addons=$(yq e '.addons | keys | .[]' .addons.yml)
- mkdir -p .translations
- for file in .translations/*.yaml;
- do
- filename=$(basename "${file}")
- language="${filename%.*}"
- if [[ "${language}" == "en" ]]; then
- continue
- fi
- echo "Processing downloaded translations in ${language}..."
- while read addon;
- do
- if [[ -f "${addon}/translations/en.yaml" ]];
- then
- echo "Processing downloaded translations in ${language} for ${addon}..."
- yq e ".${addon}" "${file}" \
- > "${addon}/translations/${filename}"
- fi
- done <<<"${addons}"
- done
- - name: 🚀 Commit changes
- continue-on-error: true
- run: |
- git config --local user.email "action@github.com"
- git config --local user.name "${GITHUB_ACTOR}"
- git add .
- git commit -m "🌍 Updating translations" -a
- - name: 🚀 Push changes
- uses: ad-m/github-push-action@v0.6.0
- continue-on-error: true
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- branch: ${{ github.ref }}
diff --git a/.github/workflows/translations-upload.yaml b/.github/workflows/translations-upload.yaml
deleted file mode 100644
index 37c2015..0000000
--- a/.github/workflows/translations-upload.yaml
+++ /dev/null
@@ -1,53 +0,0 @@
----
-name: Translations Upload
-
-# yamllint disable-line rule:truthy
-on:
- workflow_dispatch:
- workflow_run:
- workflows: ["Repository Updater"]
- branches: [master]
- types:
- - completed
-
-jobs:
- upload:
- name: Upload Translations
- runs-on: ubuntu-latest
- steps:
- - name: ⤵️ Check out code from GitHub
- uses: actions/checkout@v2.3.4
- - name: 🏗 Set up yq
- uses: frenck/action-setup-yq@v1.0.0
- - name: 🏗 Set up the Lokalise CLI
- uses: frenck/action-setup-lokalise@v1.0.0
- - name: 🚀 Combine translations
- run: |
- addons=$(yq e '.addons | keys | .[]' .addons.yml)
- mkdir -p .translations
- while read addon;
- do
- if [[ -f "${addon}/translations/en.yaml" ]];
- then
- echo "Prepping translation upload for $addon..."
- ADDON="${addon}" \
- yq e '{env(ADDON): .}' "${addon}/translations/en.yaml" \
- > ".translations/${addon}.yaml"
- fi
- done <<<"${addons}"
-
- echo "Combining translation files..."
- yq ea '. as $item ireduce ({}; . * $item)' ./.translations/*.yaml > translations.yaml
- - name: 🚀 Upload translations
- run: |
- echo "Uploading translations to lokalise"
- lokalise2 file upload \
- --apply-tm \
- --lang-iso en \
- --poll \
- --token "${LOKALISE_TOKEN}" \
- --project-id "${LOKALISE_PROJECT}" \
- --file translations.yaml
- env:
- LOKALISE_TOKEN: ${{ secrets.LOKALISE_TOKEN }}
- LOKALISE_PROJECT: ${{ secrets.LOKALISE_PROJECT }}
diff --git a/.github/workflows/weekly-supelinter.yaml b/.github/workflows/weekly-supelinter.yaml
new file mode 100644
index 0000000..350975d
--- /dev/null
+++ b/.github/workflows/weekly-supelinter.yaml
@@ -0,0 +1,76 @@
+# This workflow executes several linters on changed files based on languages used in your code base whenever
+# you push a code or open a pull request.
+#
+# You can adjust the behavior by modifying this file.
+# For more information, see:
+# https://github.com/github/super-linter
+---
+name: Lint Code Base
+
+on:
+ schedule:
+ - cron: "0 0 * * 0"
+ workflow_dispatch:
+
+jobs:
+ make-executable:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+
+ - name: Make scripts executable
+ run: |
+ echo "Starting"
+ git config core.filemode true
+ # shellcheck disable=SC2086,SC2046
+ #git update-index --chmod=+x $(find . -type f -iname "*.sh")
+ chmod u+x $(find . -type f -iname "*.sh")
+ #git commit -am "fixing the script permissions..."
+
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ commit: -u
+ message: "GitHub bot : scripts executable"
+ default_author: github_actions
+
+ run-lint:
+ runs-on: ubuntu-latest
+ needs: make-executable
+ steps:
+ ##########################
+ # Checkout the code base #
+ ##########################
+ - name: Checkout the code base
+ uses: actions/checkout@v4
+ with:
+ # Full git history is needed to get a proper list of changed files within `super-linter`
+ fetch-depth: 0
+
+ ####################
+ # Run Super Linter #
+ ####################
+ - name: Lint Code Base
+ uses: docker://github/super-linter:slim-v4
+ env:
+ VALIDATE_ALL_CODEBASE: true
+ DEFAULT_BRANCH: master
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ VALIDATE_NATURAL_LANGUAGE: false
+ ACTION_ACTIONLINT_DISABLE_ERRORS: true
+
+
+ check_crlf:
+ name: Check CRLF action
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository contents
+ uses: actions/checkout@v4
+
+ - name: Use action to check for CRLF endings
+ uses: erclu/check-crlf@v1.2.0
+
+ - name: check-mixed-line-endings
+ uses: ymwymw/check-mixed-line-endings@v2
diff --git a/.github/workflows/weekly_addons_updater b/.github/workflows/weekly_addons_updater
new file mode 100644
index 0000000..3fef2f7
--- /dev/null
+++ b/.github/workflows/weekly_addons_updater
@@ -0,0 +1,36 @@
+# yamllint disable rule:line-length
+---
+name: Weekly addons update
+on:
+ workflow_call:
+ workflow_dispatch:
+
+jobs:
+ stats_graphs:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v3
+ - name: Install bashio
+ run: |
+ # Install bashio
+ if grep -q -rnw "$files/" -e 'bashio' && [ ! -f "/usr/bin/bashio" ]; then
+ [ "$VERBOSE" = true ] && echo "install bashio"
+ BASHIO_VERSION="0.14.3"
+ mkdir -p /tmp/bashio
+ curl -f -L -s -S "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" | tar -xzf - --strip 1 -C /tmp/bashio
+ mv /tmp/bashio/lib /usr/lib/bashio
+ ln -s /usr/lib/bashio/bashio /usr/bin/bashio
+ rm -rf /tmp/bashio
+ fi
+ - name: Run script
+ run: |
+ mkdir -p /data
+ echo "{" >> /data/config.json
+ echo " repository=\"Mesteriis/hassio-addons-avm\"," >> /data/config.json
+ echo " gituser=\"Mesteriis/hassio-addons-avm\"," >> /data/config.json
+ echo " gitapi=\"Mesteriis/hassio-addons-avm\"," >> /data/config.json
+ echo " gitmail=\"Mesteriis/hassio-addons-avm\"," >> /data/config.json
+ echo " verbose=false" >> /data/config.json
+ echo "}" >> /data/config.json
+ ./addons_updater/rootfs/etc/cont-init.d/99-run.sh
diff --git a/.github/workflows/weekly_bashbeautify.yaml b/.github/workflows/weekly_bashbeautify.yaml
new file mode 100644
index 0000000..5510f47
--- /dev/null
+++ b/.github/workflows/weekly_bashbeautify.yaml
@@ -0,0 +1,43 @@
+name: Weekly bash beautify
+
+on:
+ schedule:
+ - cron: "0 0 * * 0"
+ workflow_dispatch:
+
+concurrency:
+ group: lint-bash-${{ github.head_ref || github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ lint-bash:
+ name: Lint Bash Scripts
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Git Repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python Environment
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.11"
+
+ - name: Install Beautysh
+ run: pip install beautysh
+
+ - name: Run Beautysh
+ run: |
+ find . -name '*.sh' -print0 | xargs -0 beautysh --indent-size 4
+ shopt -s globstar nullglob
+ if compgen -G "**/*.sh" > /dev/null; then
+ beautysh -- **/*.sh --indent-size 4 --check
+ fi
+ shopt -u globstar nullglob
+
+ - name: Create New Pull Request If Needed
+ uses: peter-evans/create-pull-request@v5
+ with:
+ title: "Github bot : script beautyshied"
+ branch-suffix: timestamp
+ commit-message: "Github bot : script beautyshied"
diff --git a/.github/workflows/weekly_crlftolf.yaml b/.github/workflows/weekly_crlftolf.yaml
new file mode 100644
index 0000000..11d737a
--- /dev/null
+++ b/.github/workflows/weekly_crlftolf.yaml
@@ -0,0 +1,54 @@
+# yamllint disable rule:line-length
+---
+# This workflow finds and fixes CRLF endings in a repository
+name: Fix CRLF Endings
+on:
+ workflow_call:
+ workflow_dispatch:
+
+jobs:
+ crlf-to-lf:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository contents
+ uses: actions/checkout@v4
+
+ - name: Use action to check for CRLF endings
+ uses: erclu/check-crlf@v1
+
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ message: "Github bot : CRLF corrected"
+ default_author: github_actions
+
+ fix-crlf:
+ name: Fix CRLF Endings
+ runs-on: ubuntu-latest # Use a Linux runner
+ steps:
+ - name: Checkout repository contents
+ uses: actions/checkout@v4 # Use the checkout action
+ - name: Find files with CRLF endings
+ uses: erclu/check-crlf@v1.2.0 # Use the check-crlf action
+ id: check-crlf # Assign an id to this step
+ with:
+ # Specify the paths to check
+ path: |
+ ./*
+ !.git
+ !*.png
+ !*.jpg
+ !*.bin
+ - name: Apply dos2unix to files with CRLF endings
+ run: |
+ # Loop through each file and apply dos2unix
+ # shellcheck disable=SC2043
+ for f in ${{ steps.check-crlf.outputs.files }}; do
+ # Apply dos2unix and keep the original timestamp
+ dos2unix -k "$f"
+ done
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ message: "Github bot : CRLF corrected"
+ default_author: github_actions
diff --git a/.github/workflows/weekly_reduceimagesize.yml b/.github/workflows/weekly_reduceimagesize.yml
new file mode 100644
index 0000000..5234def
--- /dev/null
+++ b/.github/workflows/weekly_reduceimagesize.yml
@@ -0,0 +1,37 @@
+# Compress images on demand (workflow_dispatch), and at 11pm every Sunday (schedule).
+# Open a Pull Request if any images can be compressed.
+---
+name: Compress Images
+on:
+ workflow_dispatch:
+ schedule:
+ - cron: '00 23 * * 0'
+
+jobs:
+ calibre:
+ name: calibreapp/image-actions
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+
+ - name: Compress Images
+ id: calibre
+ uses: calibreapp/image-actions@main
+ with:
+ # The `GITHUB_TOKEN` is automatically generated by GitHub and scoped only to the repository that is currently running the action. By default, the action can’t update Pull Requests initiated from forked repositories.
+ # See https://docs.github.com/en/actions/reference/authentication-in-a-workflow and https://help.github.com/en/articles/virtual-environments-for-github-actions#token-permissions
+ githubToken: ${{ secrets.GITHUB_TOKEN }}
+ compressOnly: true
+ jpegQuality: '60'
+ jpegProgressive: false
+ pngQuality: '60'
+ webpQuality: '60'
+
+ - name: Commit if needed
+ if: steps.calibre.outputs.markdown != ''
+ uses: EndBug/add-and-commit@v9
+ with:
+ message: "Github bot : image compressed"
+ default_author: github_actions
+ body: ${{ steps.calibre.outputs.markdown }}
diff --git a/.github/workflows/weekly_sortjson.yaml b/.github/workflows/weekly_sortjson.yaml
new file mode 100644
index 0000000..f64a845
--- /dev/null
+++ b/.github/workflows/weekly_sortjson.yaml
@@ -0,0 +1,31 @@
+# yamllint disable rule:line-length
+---
+name: Weekly sort json
+
+on:
+ schedule:
+ - cron: "0 0 * * 0"
+ workflow_dispatch:
+
+jobs:
+ sort_json:
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ - name: Run script file
+ id: sort
+ run: |
+ for files in */*.json; do
+ echo "Sorting $files"
+ jq --sort-keys . "$files" > config2.json && cat config2.json > "$files" && rm config2.json
+ echo "changed=1" >> "$GITHUB_OUTPUT"
+ done
+ shell: bash
+ - name: Create New Pull Request If Needed
+ if: steps.sort.outputs.changed != ''
+ uses: peter-evans/create-pull-request@v5
+ with:
+ title: "Github bot : json sorted"
+ branch-suffix: timestamp
+ commit-message: "Github bot : json sorted"
diff --git a/.github/workflows/weekly_stats.yaml b/.github/workflows/weekly_stats.yaml
new file mode 100644
index 0000000..036f698
--- /dev/null
+++ b/.github/workflows/weekly_stats.yaml
@@ -0,0 +1,106 @@
+# yamllint disable rule:line-length
+---
+name: Generate weekly stats
+on:
+ schedule:
+ - cron: "0 12 * * 5"
+ workflow_dispatch:
+
+jobs:
+ stats_updater:
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Checkout Repo
+ uses: actions/checkout@v4
+ - name: Create stats
+ run: |
+ echo "Starting"
+ COUNT=0
+ COUNT1=0
+ COUNT2=0
+ COUNT3=0
+ # Make sure file exists
+ file=Stats
+ touch "$file"
+ rm "$file"2
+ if ! grep -q "Date" "$file"; then
+ sed -i "1i Date" "$file"
+ fi
+ # Add new column
+ sed -i 's/^/- /' "$file"
+ # Add date
+ sed -i "/Date/s|^-|$(date '+%Y-%m-%d')|" "$file"
+
+ # Go through all folders, add to filters if not existing
+ # shellcheck disable=SC2086
+ for f in $( find -- * -maxdepth 0 -type d | sort -r ); do
+ DOWNLOADS=0
+ if [ -f "$f"/config.json ] && jq -e '.image' "$f/config.json"; then
+ SLUG="$(jq -r '.image' "$f/config.json" | awk -F 'alexbelgium/|-{arch' '{print $2}')"
+ if [[ "$(jq '.arch[]' "$f/config.json")" == *"armv7"* ]]; then
+ ARCH=armv7 && COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/Mesteriis/hassio-addons-avm/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')"
+ until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/Mesteriis/hassio-addons-avm/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then count=0; fi; done
+ COUNT="${COUNT//,/}"
+ COUNT1="$COUNT"
+ echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))"
+ else COUNT1="-"; fi
+ if [[ "$(jq '.arch[]' "$f/config.json")" == *"amd64"* ]]; then
+ ARCH=amd64 && COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/Mesteriis/hassio-addons-avm/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')"
+ until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/Mesteriis/hassio-addons-avm/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then count=0; fi; done
+ COUNT="${COUNT//,/}"
+ COUNT2="$COUNT"
+ echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))"
+ else COUNT2="-"; fi
+ if [[ "$(jq '.arch[]' "$f/config.json")" == *"aarch64"* ]]; then
+ ARCH=aarch64 && COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/Mesteriis/hassio-addons-avm/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')"
+ until [ -n "$COUNT" ]; do COUNT="$(curl --connect-timeout 5 -f -s -L https://github.com/Mesteriis/hassio-addons-avm/pkgs/container/$SLUG-$ARCH/latest | awk '/Total downloads/{getline; print}' | awk -F '<|>' '{print $3}')" && sleep 5; ((c++)) && echo "repeat $c" && if [[ "$c" == 10 ]]; then count=0; fi; done
+ COUNT="${COUNT//,/}"
+ COUNT3="$COUNT"
+ echo "$COUNT $ARCH users with $SLUG" && DOWNLOADS="$(( DOWNLOADS + COUNT))"
+ else COUNT3="-";fi
+ echo "$SLUG $DOWNLOADS $COUNT1 $COUNT2 $COUNT3" >> "$file"2
+ # Create line if not existing
+ if ! grep -q "${SLUG}$" "$file"; then
+ sed -i "\$a$SLUG" "$file"
+ # shellcheck disable=SC2046
+ for i in $(seq $(head -n 1 $file | tr -cd ' \t' | wc -c )); do
+ echo "$i"
+ sed -i "/$SLUG/s|^|- |" "$file"
+ done
+ fi
+ # Add data
+ sed -i "/${SLUG}$/s|^-|$DOWNLOADS|" "$file"
+ fi
+ done
+
+ # Add total
+ SLUG=TOTAL
+ if ! grep -q "$SLUG$" "$file"; then
+ sed -i "1a$SLUG" "$file"
+ # shellcheck disable=SC2046
+ for i in $(seq $(head -n 1 $file | tr -cd ' \t' | wc -c )); do
+ echo "$i"
+ sed -i "/$SLUG$/s|^|- |" "$file"
+ done
+ fi
+ DOWNLOADS="$(awk 'FNR > 2 {SUM+=$1}END{print SUM}' Stats)"
+ sed -i "/$SLUG$/s|^-|$DOWNLOADS|" "$file"
+
+ # Sort file
+ (head -n 2 "$file" && tail -n +3 "$file" | sort -k1 -r -n) > tmp && mv tmp "$file"
+
+ sed -i "1i Name Total armv7 amd64 aarch64" "$file"2
+ sed -i "1a ------------------------------" "$file"2
+ #TOTAL="$(awk '{SUM+=$2}END{print SUM}' Stats)"
+ #TOTAL1="$(awk '{SUM+=$2}END{print SUM}' Stats)"
+ #TOTAL2="$(awk '{SUM+=$2}END{print SUM}' Stats)"
+ #TOTAL3="$(awk '{SUM+=$2}END{print SUM}' Stats)"
+
+ - name: Commit if needed
+ uses: EndBug/add-and-commit@v9
+ with:
+ default_author: github_actions
+ message : "Github bot : stats updated"
+ Generate_graphs:
+ needs: stats_updater
+ uses: ./.github/workflows/helper_stats_graphs.yaml
diff --git a/.mdlrc b/.mdlrc
deleted file mode 100644
index 2b0128d..0000000
--- a/.mdlrc
+++ /dev/null
@@ -1 +0,0 @@
-rules "~MD024"
\ No newline at end of file
diff --git a/.templates/.README.md b/.templates/.README.md
new file mode 100644
index 0000000..eb6dff3
--- /dev/null
+++ b/.templates/.README.md
@@ -0,0 +1,103 @@
+# Home assistant add-on: alexbelgium
+
+
+
+[![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium)
+[![Donate][paypal-badge]](https://www.paypal.com/donate/?hosted_button_id=DZFULJZTP3UQA)
+
+
+[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee%20(no%20paypal)-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white
+[paypal-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee%20with%20Paypal-0070BA?logo=paypal&style=flat&logoColor=white
+
+[](https://www.codacy.com/gh/Mesteriis/hassio-addons-avm/dashboard?utm_source=github.com&utm_medium=referral&utm_content=Mesteriis/hassio-addons-avm&utm_campaign=Badge_Grade)
+[](https://github.com/Mesteriis/hassio-addons-avm/actions/workflows/weekly-supelinter.yaml)
+[](https://github.com/Mesteriis/hassio-addons-avm/actions/workflows/onpush_builder.yaml)
+[](https://github.com/Mesteriis/hassio-addons-avm/actions/workflows/weekly_stats.yaml)
+
+[support-badge]: https://camo.githubusercontent.com/f4dbb995049f512fdc97fcc9e022ac243fa38c408510df9d46c7467d0970d959/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f537570706f72742d7468726561642d677265656e2e737667
+
+_Thanks to everyone having starred my repo! To star it click on the image below, then it will be on top right. Thanks!_
+
+[](https://github.com/Mesteriis/hassio-addons-avm/stargazers)
+
+_Thanks to all contributors !_
+
+[](https://github.com/Mesteriis/hassio-addons-avm/graphs/contributors)
+
+## About
+
+Home Assistant allows anyone to create add-on repositories to share their
+add-ons for Home Assistant easily. This repository is one of those repositories,
+providing extra Home Assistant add-ons for your installation.
+
+The primary goal of this project is to provide you (as a Home Assistant user)
+with additional, high quality, add-ons that allow you to take your automated
+home to the next level.
+
+## Installation
+
+[![Add repository on my Home Assistant][repository-badge]][repository-url]
+
+If you want to do add the repository manually, please follow the procedure highlighted in the [Home Assistant website](https://home-assistant.io/hassio/installing_third_party_addons). Use the following URL to add this repository: https://github.com/Mesteriis/hassio-addons-avm
+
+## Statistics
+
+### Number of addons
+
+- In the repository : %%STATS_ADDONS%%
+- Installed : %%STATS_DOWNLOADS%%
+
+### Top 3
+
+1. %%STATS_ONE%%
+2. %%STATS_TWO%%
+3. %%STATS_THREE%%
+
+### Architectures used
+
+- %%STATS_AMD64%%
+- %%STATS_AARCH64%%
+- %%STATS_ARMV7%%
+
+### Total downloads evolution
+
+
+
+### Specific downloads evolution
+
+
+
+### Stars evolution
+
+
+
+
+
+## Add-ons provided by this repository
+
+%%ADDONS_LIST%%
+
+## Support
+
+Got questions?
+
+You have several options to get them answered:
+
+- The Home Assistant [Community Forum][forum].
+- This repository issues list
+
+[aarch64-badge]: https://img.shields.io/badge/aarch64--green.svg?logo=arm
+[amd64-badge]: https://img.shields.io/badge/amd64--green.svg?logo=amd
+[armv7-badge]: https://img.shields.io/badge/armv7--green.svg?logo=arm
+[aarch64no-badge]: https://img.shields.io/badge/aarch64--orange.svg?logo=arm
+[amd64no-badge]: https://img.shields.io/badge/amd64--orange.svg?logo=amd
+[armv7no-badge]: https://img.shields.io/badge/armv7--orange.svg?logo=arm
+[ingress-badge]: https://img.shields.io/badge/-ingress-blueviolet.svg?logo=Ingress
+[mariadb-badge]: https://img.shields.io/badge/Service-MariaDB-green.svg?logo=mariadb&logoColor=white
+[mqtt-badge]: https://img.shields.io/badge/Service-MQTT-green.svg?logo=chromecast&logoColor=white
+[localdisks-badge]: https://img.shields.io/badge/Mounts-localdisks-blue.svg
+[smb-badge]: https://img.shields.io/badge/Mounts-networkdisks-blue.svg
+[full_access-badge]: https://img.shields.io/badge/Requires-full_access-orange.svg
+[forum]: https://community.home-assistant.io/t/alexbelgium-repo-60-addons
+[repository-badge]: https://img.shields.io/badge/Add%20repository%20to%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
+[repository-url]: https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons
diff --git a/.templates/00-aaa_dockerfile_backup.sh b/.templates/00-aaa_dockerfile_backup.sh
new file mode 100755
index 0000000..470c194
--- /dev/null
+++ b/.templates/00-aaa_dockerfile_backup.sh
@@ -0,0 +1,51 @@
+#!/bin/bash
+set -e
+
+# If dockerfile failed install manually
+
+##############################
+# Automatic modules download #
+##############################
+if [ -e "/MODULESFILE" ]; then
+ MODULES=$(/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi &&
+ if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi &&
+ apt-get update && apt-get install -yqq --no-install-recommends ca-certificates || apk add --no-cache ca-certificates >/dev/null || true &&
+ mkdir -p /etc/cont-init.d &&
+ for scripts in $MODULES; do echo "$scripts" && curl -f -L -s -S "https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/$scripts" -o /etc/cont-init.d/"$scripts" && [ "$(sed -n '/\/bin/p;q' /etc/cont-init.d/"$scripts")" != "" ] || (echo "script failed to install $scripts" && exit 1); done &&
+ chmod -R 755 /etc/cont-init.d
+fi
+
+#######################
+# Automatic installer #
+#######################
+if [ -e "/ENVFILE" ]; then
+ PACKAGES=$(/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null; fi &&
+ if ! command -v curl >/dev/null 2>/dev/null; then (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null; fi &&
+ curl -f -L -s -S "https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/ha_automatic_packages.sh" --output /ha_automatic_packages.sh &&
+ chmod 777 /ha_automatic_packages.sh &&
+ eval /./ha_automatic_packages.sh "${PACKAGES:-}" &&
+ rm /ha_automatic_packages.sh
+fi
+
+if [ -e "/MODULESFILE" ] && [ ! -f /ha_entrypoint.sh ]; then
+ for scripts in $MODULES; do
+ echo "$scripts : executing"
+ chown "$(id -u)":"$(id -g)" /etc/cont-init.d/"$scripts"
+ chmod a+x /etc/cont-init.d/"$scripts"
+ /./etc/cont-init.d/"$scripts" || echo "/etc/cont-init.d/$scripts: exiting $?"
+ rm /etc/cont-init.d/"$scripts"
+ done | tac
+fi
+
+#######################
+# Correct permissions #
+#######################
+[ -d /etc/services.d ] && chmod -R 777 /etc/services.d
+[ -d /etc/cont-init.d ] && chmod -R 777 /etc/cont-init.d
diff --git a/.templates/00-banner.sh b/.templates/00-banner.sh
new file mode 100755
index 0000000..5895f91
--- /dev/null
+++ b/.templates/00-banner.sh
@@ -0,0 +1,61 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+# ==============================================================================
+# Displays a simple add-on banner on startup
+# ==============================================================================
+if bashio::supervisor.ping; then
+ bashio::log.blue \
+ '-----------------------------------------------------------'
+ bashio::log.blue " Add-on: $(bashio::addon.name)"
+ bashio::log.blue " $(bashio::addon.description)"
+ bashio::log.blue \
+ '-----------------------------------------------------------'
+
+ bashio::log.blue " Add-on version: $(bashio::addon.version)"
+ if bashio::var.true "$(bashio::addon.update_available)"; then
+ bashio::log.magenta ' There is an update available for this add-on!'
+ bashio::log.magenta \
+ " Latest add-on version: $(bashio::addon.version_latest)"
+ bashio::log.magenta ' Please consider upgrading as soon as possible.'
+ else
+ bashio::log.green ' You are running the latest version of this add-on.'
+ fi
+
+ bashio::log.blue " System: $(bashio::info.operating_system)" \
+ " ($(bashio::info.arch) / $(bashio::info.machine))"
+ bashio::log.blue " Home Assistant Core: $(bashio::info.homeassistant)"
+ bashio::log.blue " Home Assistant Supervisor: $(bashio::info.supervisor)"
+
+ bashio::log.blue \
+ '-----------------------------------------------------------'
+ bashio::log.blue \
+ ' Please, share the above information when looking for help'
+ bashio::log.blue \
+ ' or support in, e.g., GitHub, forums'
+ bashio::log.blue \
+ '-----------------------------------------------------------'
+ bashio::log.green \
+ ' Provided by: https://github.com/Mesteriis/hassio-addons-avm '
+ bashio::log.blue \
+ '-----------------------------------------------------------'
+fi
+
+# ==============================================================================
+# Global actions for all addons
+# ==============================================================================
+if bashio::config.has_value "PUID" && bashio::config.has_value "PGID"; then
+ bashio::log.green \
+ ' Defining permissions for main user : '
+ PUID="$(bashio::config "PUID")"
+ PGID="$(bashio::config "PGID")"
+ bashio::log.blue "User UID: $PUID"
+ bashio::log.blue "User GID : $PGID"
+ id -u abc &>/dev/null || usermod -o -u "$PUID" abc &>/dev/null || true
+ id -g abc &>/dev/null || groupmod -o -g "$PGID" abc &>/dev/null || true
+ bashio::log.blue \
+ '-----------------------------------------------------------'
+fi
+
+# Clean bashrc file
+if [ -f ~/.bashrc ]; then rm ~/.bashrc; fi
diff --git a/.templates/00-bettercomments.sh b/.templates/00-bettercomments.sh
new file mode 100755
index 0000000..32acdb4
--- /dev/null
+++ b/.templates/00-bettercomments.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Color comments
+#! Red
+#? Question
+#// Done
+#todo To do
+#* Green
diff --git a/.templates/00-deprecated.sh b/.templates/00-deprecated.sh
new file mode 100755
index 0000000..2ac070f
--- /dev/null
+++ b/.templates/00-deprecated.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+
+# ==============================================================================
+# Displays a simple add-on banner on startup
+# ==============================================================================
+
+echo ""
+bashio::log.yellow "####################"
+bashio::log.yellow "# ADDON deprecated #"
+bashio::log.yellow "####################"
+echo ""
+bashio::log.yellow "This addon is now supported in the official HA community repository. You should migrate your data as soon as possible! This addon will not be supported and updates might stop in the future."
+bashio::log.yellow "You'll likely get better support as the official community is supported by the HA devs ! If some features from the official add-on are missing you should raise a request on the ha community add-ons repo"
+bashio::log.yellow "Thanks for all users over the years !"
+echo ""
+
+sleep 5
diff --git a/.templates/00-global_var.sh b/.templates/00-global_var.sh
new file mode 100755
index 0000000..0ed168d
--- /dev/null
+++ b/.templates/00-global_var.sh
@@ -0,0 +1,101 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+
+###################################
+# Export all addon options as env #
+###################################
+
+# For all keys in options.json
+JSONSOURCE="/data/options.json"
+
+# Define secrets location
+if [ -f /homeassistant/secrets.yaml ]; then
+ SECRETSOURCE="/homeassistant/secrets.yaml"
+elif [ -f /config/secrets.yaml ]; then
+ SECRETSOURCE="/config/secrets.yaml"
+else
+ SECRETSOURCE="false"
+fi
+
+# Export keys as env variables
+# echo "All addon options were exported as variables"
+mapfile -t arr < <(jq -r 'keys[]' "${JSONSOURCE}")
+
+for KEYS in "${arr[@]}"; do
+ # export key
+ VALUE=$(jq ."$KEYS" "${JSONSOURCE}")
+ # Check if the value is an array
+ if [[ "$VALUE" == \[* ]]; then
+ bashio::log.warning "$VALUE is an array, skipping"
+ else
+ # Continue for single values
+ VALUE="${VALUE//[\"\']/}"
+ line="${KEYS}='${VALUE}'"
+ # Check if secret
+ if [[ "${line}" == *"!secret "* ]]; then
+ echo "secret detected"
+ # Get argument
+ secret=${line#*secret }
+ # Remove trailing ' or "
+ secret="${secret%[\"\']}"
+ # Stop if secret file not mounted
+ if [[ "$SECRETSOURCE" == "false" ]]; then
+ bashio::log.warning "Homeassistant config not mounted, secrets are not supported"
+ continue
+ fi
+ # Check if single match
+ secretnum=$(sed -n "/$secret:/=" "$SECRETSOURCE" )
+ [[ "$secretnum" == *' '* ]] && bashio::exit.nok "There are multiple matches for your password name. Please check your secrets.yaml file"
+ # Get text
+ secret=$(sed -n "/$secret:/p" "$SECRETSOURCE" )
+ secret=${secret#*: }
+ line="${line%%=*}='$secret'"
+ VALUE="$secret"
+ fi
+ # text
+ if bashio::config.false "verbose" || [[ "${KEYS}" == *"PASS"* ]]; then
+ bashio::log.blue "${KEYS}=******"
+ else
+ bashio::log.blue "$line"
+ fi
+
+ ######################################
+ # Export the variable to run scripts #
+ ######################################
+ # shellcheck disable=SC2163
+ export "$line"
+ # export to python
+ if command -v "python3" &>/dev/null ; then
+ [ ! -f /env.py ] && echo "import os" > /env.py
+ # Escape \
+ VALUEPY="${VALUE//\\/\\\\}"
+ # Avoid " and '
+ VALUEPY="${VALUEPY//[\"\']/}"
+ echo "os.environ['${KEYS}'] = '$VALUEPY'" >> /env.py
+ python3 /env.py
+ fi
+ # set .env
+ echo "$line" >> /.env || true
+ # set /etc/environment
+ mkdir -p /etc
+ echo "$line" >> /etc/environment
+ # For non s6
+ if cat /etc/services.d/*/*run* &>/dev/null; then sed -i "1a export $line" /etc/services.d/*/*run* 2>/dev/null; fi
+ if cat /etc/cont-init.d/*run* &>/dev/null; then sed -i "1a export $line" /etc/cont-init.d/*run* 2>/dev/null; fi
+ # For s6
+ if [ -d /var/run/s6/container_environment ]; then printf "%s" "${VALUE}" > /var/run/s6/container_environment/"${KEYS}"; fi
+ echo "export ${KEYS}='${VALUE}'" >> ~/.bashrc
+ fi
+done
+
+################
+# Set timezone #
+################
+set +e
+if [ -n "$TZ" ] && [ -f /etc/localtime ]; then
+ if [ -f /usr/share/zoneinfo/"$TZ" ]; then
+ echo "Timezone set from $(cat /etc/timezone) to $TZ"
+ ln -snf /usr/share/zoneinfo/"$TZ" /etc/localtime && echo "$TZ" >/etc/timezone
+ fi
+fi
diff --git a/.templates/00-local_mounts.sh b/.templates/00-local_mounts.sh
new file mode 100755
index 0000000..e65d206
--- /dev/null
+++ b/.templates/00-local_mounts.sh
@@ -0,0 +1,103 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+
+######################
+# MOUNT LOCAL SHARES #
+######################
+
+# Mount local Share if configured
+if bashio::config.has_value 'localdisks'; then
+
+ # Available devices
+ blkid | awk '{print substr($1, 0, length($1) - 1)}' | awk -F'/' '{print $NF}' > availabledisks
+ echo "NAME" >> availabledisks
+
+ ## List available Disk with Labels and Id
+ bashio::log.blue "---------------------------------------------------"
+ bashio::log.info "Available Disks for mounting :"
+ lsblk -o name,label,size,fstype,ro | awk '$4 != "" { print $0 }' | grep -f availabledisks
+ bashio::log.blue "---------------------------------------------------"
+ rm availabledisks
+
+ # Show support fs https://github.com/dianlight/hassio-addons/blob/2e903184254617ac2484fe7c03a6e33e6987151c/sambanas/rootfs/etc/s6-overlay/s6-rc.d/init-automount/run#L106
+ fstypessupport=$(grep -v nodev ERRORCODE || MOUNTED=false
+
+ # Test if succesful
+ if [[ "$MOUNTED" == "true" ]]; then
+ # shellcheck disable=SC2015
+ test_mount
+ fi
+
+}
+
+####################
+# MOUNT SMB SHARES #
+####################
+
+if bashio::config.has_value 'networkdisks'; then
+
+ # Alert message that it is a new code
+ if [[ "$(date +"%Y%m%d")" -lt "20240201" ]]; then
+ bashio::log.warning "------------------------"
+ bashio::log.warning "This is a new code, please report any issues on https://github.com/Mesteriis/hassio-addons-avm"
+ bashio::log.warning "------------------------"
+ fi
+
+ echo 'Mounting smb share(s)...'
+
+ ####################
+ # Define variables #
+ ####################
+
+ # Set variables
+ MOREDISKS=$(bashio::config 'networkdisks')
+ USERNAME=$(bashio::config 'cifsusername')
+ PASSWORD=$(bashio::config 'cifspassword')
+ SMBVERS=""
+ SECVERS=""
+ CHARSET=",iocharset=utf8"
+
+ # Clean data
+ MOREDISKS=${MOREDISKS// \/\//,\/\/}
+ MOREDISKS=${MOREDISKS//, /,}
+ MOREDISKS=${MOREDISKS// /"\040"}
+
+ # Is domain set
+ DOMAIN=""
+ DOMAINCLIENT=""
+ if bashio::config.has_value 'cifsdomain'; then
+ echo "... using domain $(bashio::config 'cifsdomain')"
+ DOMAIN=",domain=$(bashio::config 'cifsdomain')"
+ DOMAINCLIENT="--workgroup=$(bashio::config 'cifsdomain')"
+ fi
+
+ # Is UID/GID set
+ PUID=",uid=$(id -u)"
+ PGID=",gid=$(id -g)"
+ if bashio::config.has_value 'PUID' && bashio::config.has_value 'PGID'; then
+ echo "... using PUID $(bashio::config 'PUID') and PGID $(bashio::config 'PGID')"
+ PUID=",uid=$(bashio::config 'PUID')"
+ PGID=",gid=$(bashio::config 'PGID')"
+ fi
+
+ ##################
+ # Mounting disks #
+ ##################
+
+ # shellcheck disable=SC2086
+ for disk in ${MOREDISKS//,/ }; do # Separate comma separated values
+
+ # Clean name of network share
+ # shellcheck disable=SC2116,SC2001
+ disk=$(echo $disk | sed "s,/$,,") # Remove / at end of name
+ disk="${disk//"\040"/ }" #replace \040 with
+ diskname="${disk//\\//}" #replace \ with /
+ diskname="${diskname##*/}" # Get only last part of the name
+ MOUNTED=false
+
+ # Start
+ echo "... mounting $disk"
+
+ # Data validation
+ if [[ ! "$disk" =~ ^.*+[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+[/]+.*+$ ]]; then
+ bashio::log.fatal "...... the structure of your \"networkdisks\" option : \"$disk\" doesn't seem correct, please use a structure like //123.12.12.12/sharedfolder,//123.12.12.12/sharedfolder2. If you don't use it, you can simply remove the text, this will avoid this error message in the future."
+ touch ERRORCODE
+ continue
+ fi
+
+ # Prepare mount point
+ mkdir -p /mnt/"$diskname"
+ chown root:root /mnt/"$diskname"
+
+ # Quickly try to mount with defaults
+ mount_drive "rw,file_mode=0775,dir_mode=0775,username=${USERNAME},password=${PASSWORD},nobrl${SMBVERS}${SECVERS}${PUID}${PGID}${CHARSET}${DOMAIN}"
+
+ # Deeper analysis if failed
+ if [ "$MOUNTED" = false ]; then
+
+ # Extract ip part of server for further manipulation
+ server="$(echo "$disk" | grep -E -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")"
+
+ # Does server exists
+ output="$(nmap -F $server -T5 -oG -)"
+ if ! echo "$output" | grep 445/open &>/dev/null; then
+ if echo "$output" | grep /open &>/dev/null; then
+ bashio::log.fatal "...... $server is reachable but SMB port not opened, stopping script"
+ touch ERRORCODE
+ continue
+ else
+ bashio::log.fatal "...... fatal : $server not reachable, is it correct"
+ touch ERRORCODE
+ continue
+ fi
+ else
+ echo "...... $server is confirmed reachable"
+ fi
+
+ # Are credentials correct
+ OUTPUT="$(smbclient -t 2 -L "$disk" -U "$USERNAME"%"$PASSWORD" -c "exit" $DOMAINCLIENT 2>&1 || true)"
+ if echo "$OUTPUT" | grep -q "LOGON_FAILURE"; then
+ bashio::log.fatal "...... incorrect Username, Password, or Domain! Script will stop."
+ touch ERRORCODE
+ # Should there be a workgroup
+ if ! smbclient -t 2 -L $disk -N $DOMAINCLIENT -c "exit" &>/dev/null; then
+ bashio::log.fatal "...... perhaps a workgroup must be specified"
+ touch ERRORCODE
+ fi
+ continue
+ elif echo "$OUTPUT" | grep -q "tree connect failed" || echo "$OUTPUT" | grep -q "NT_STATUS_CONNECTION_DISCONNECTED"; then
+ echo "... testing path"
+ bashio::log.fatal "...... invalid or inaccessible SMB path. Script will stop."
+ touch ERRORCODE
+ continue
+ elif ! echo "$OUTPUT" | grep -q "Disk"; then
+ echo "... testing path"
+ bashio::log.fatal "...... no shares found. Invalid or inaccessible SMB path?"
+ else
+ echo "...... credentials are valid"
+ fi
+
+ # Extracting SMB versions and normalize output
+ # shellcheck disable=SC2210,SC2094
+ SMBVERS="$(nmap --script smb-protocols "$server" -p 445 2>1 | awk '/ [0-9]/' | awk '{print $NF}' | cut -c -3 | sort -V | tail -n 1 || true)"
+ # Avoid :
+ SMBVERS="${SMBVERS/:/.}"
+ # Manage output
+ if [ -n "$SMBVERS" ]; then
+ case $SMBVERS in
+ "202"|"200"|"20")
+ SMBVERS="2.0"
+ ;;
+ 21)
+ SMBVERS="2.1"
+ ;;
+ 302)
+ SMBVERS="3.02"
+ ;;
+ 311)
+ SMBVERS="3.1.1"
+ ;;
+ "3.1")
+ echo "SMB 3.1 detected, converting to 3.0"
+ SMBVERS="3.0"
+ ;;
+ esac
+ echo "...... SMB version detected : $SMBVERS"
+ SMBVERS=",vers=$SMBVERS"
+ elif smbclient -t 2 -L "$server" -m NT1 -N $DOMAINCLIENT &>/dev/null; then
+ echo "...... SMB version : only SMBv1 is supported, this can lead to issues"
+ SECVERS=",sec=ntlm"
+ SMBVERS=",vers=1.0"
+ else
+ echo "...... SMB version : couldn't detect, default used"
+ SMBVERS=""
+ fi
+
+ # Test with different security versions
+ #######################################
+ for SECVERS in "$SECVERS" ",sec=ntlmv2" ",sec=ntlmssp" ",sec=ntlmsspi" ",sec=krb5i" ",sec=krb5" ",sec=ntlm" ",sec=ntlmv2i"; do
+ if [ "$MOUNTED" = false ]; then
+ mount_drive "rw,file_mode=0775,dir_mode=0775,username=${USERNAME},password=${PASSWORD},nobrl${SMBVERS}${SECVERS}${PUID}${PGID}${CHARSET}${DOMAIN}"
+ fi
+ done
+
+ fi
+
+ # Messages
+ if [ "$MOUNTED" = true ]; then
+
+ bashio::log.info "...... $disk successfully mounted to /mnt/$diskname with options ${MOUNTOPTIONS/$PASSWORD/XXXXXXXXXX}"
+ # Remove errorcode
+ if [ -f ERRORCODE ]; then
+ rm ERRORCODE
+ fi
+
+ # Alert if smbv1
+ if [[ "$MOUNTOPTIONS" == *"1.0"* ]]; then
+ bashio::log.warning ""
+ bashio::log.warning "Your smb system requires smbv1. This is an obsolete protocol. Please correct this to prevent issues."
+ bashio::log.warning ""
+ fi
+
+ else
+ # Mounting failed messages
+ bashio::log.fatal "Error, unable to mount $disk to /mnt/$diskname with username $USERNAME, $PASSWORD. Please check your remote share path, username, password, domain, try putting 0 in UID and GID"
+ bashio::log.fatal "Here is some debugging info :"
+
+ # Provide debugging info
+ smbclient -t 2 -L $disk -U "$USERNAME%$PASSWORD" -c "exit"
+
+ # Error code
+ SMBVERS=""
+ SECVERS=""
+ PUID=""
+ PGID=""
+ CHARSET=""
+ mount_drive "rw,file_mode=0775,dir_mode=0775,username=${USERNAME},password=${PASSWORD},nobrl${SMBVERS}${SECVERS}${PUID}${PGID}${CHARSET}${DOMAIN}"
+ bashio::log.fatal "Error read : $(/dev/null || true
+ rmdir "/mnt/$diskname" || true
+
+ # Stop addon
+ bashio::addon.stop
+
+ fi
+
+ done
+
+fi
diff --git a/.templates/01-config_yaml.sh b/.templates/01-config_yaml.sh
new file mode 100755
index 0000000..4e9b749
--- /dev/null
+++ b/.templates/01-config_yaml.sh
@@ -0,0 +1,200 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+# shellcheck disable=SC2155,SC1087,SC2163,SC2116,SC2086
+set -e
+
+##################
+# INITIALIZATION #
+##################
+
+# Exit if /config is not mounted
+if [ ! -d /config ]; then
+ exit 0
+fi
+
+# Define slug
+slug="${HOSTNAME}"
+
+# Check type of config folder
+if [ ! -f /config/configuration.yaml ] && [ ! -f /config/configuration.json ]; then
+ # New config location
+ CONFIGLOCATION="/config"
+ CONFIGFILEBROWSER="/addon_configs/$slug/config.yaml"
+else
+ # Legacy config location
+ slug="${HOSTNAME#*-}"
+ CONFIGLOCATION="/config/addons_config/${slug}"
+ CONFIGFILEBROWSER="/homeassistant/addons_config/$slug/config.yaml"
+fi
+
+# Default location
+mkdir -p "$CONFIGLOCATION" || true
+CONFIGSOURCE="$CONFIGLOCATION"/config.yaml
+
+# Is there a custom path
+if bashio::config.has_value 'CONFIG_LOCATION'; then
+
+ CONFIGSOURCE=$(bashio::config "CONFIG_LOCATION")
+ # If does not end by config.yaml, remove trailing slash and add config.yaml
+ if [[ "$CONFIGSOURCE" != *".yaml" ]]; then
+ CONFIGSOURCE="${CONFIGSOURCE%/}"/config.yaml
+ fi
+ # Check if config is located in an acceptable location
+ LOCATIONOK=""
+ for location in "/share" "/config" "/data"; do
+ if [[ "$CONFIGSOURCE" == "$location"* ]]; then
+ LOCATIONOK=true
+ fi
+ done
+ if [ -z "$LOCATIONOK" ]; then
+ bashio::log.red "Watch-out : your CONFIG_LOCATION values can only be set in /share, /config or /data (internal to addon). It will be reset to the default location : $CONFIGLOCATION/config.yaml"
+ CONFIGSOURCE="$CONFIGLOCATION"/config.yaml
+ fi
+fi
+
+# Migrate if needed
+if [[ "$CONFIGLOCATION" == "/config" ]]; then
+ # Migrate file
+ if [ -f "/homeassistant/addons_config/${slug}/config.yaml" ]; then
+ echo "Migrating config.yaml to new config location"
+ mv /homeassistant/addons_config/"${slug}"/config.yaml /config/config.yaml
+ fi
+ # Migrate option
+ if [[ "$(bashio::config "CONFIG_LOCATION")" == "/config/addons_config"* ]] && [ -f /config/config.yaml ]; then
+ bashio::addon.option "CONFIG_LOCATION" "/config/config.yaml"
+ CONFIGSOURCE="/config/config.yaml"
+ fi
+fi
+
+if [[ "$CONFIGSOURCE" != *".yaml" ]]; then
+ bashio::log.error "Something is going wrong in the config location, quitting"
+fi
+
+# Permissions
+if [[ "$CONFIGSOURCE" == *".yaml" ]]; then
+ echo "Setting permissions for the config.yaml directory"
+ mkdir -p "$(dirname "${CONFIGSOURCE}")"
+ chmod -R 755 "$(dirname "${CONFIGSOURCE}")" 2>/dev/null
+fi
+
+####################
+# LOAD CONFIG.YAML #
+####################
+
+echo ""
+bashio::log.green "Load environment variables from $CONFIGSOURCE if existing"
+if [[ "$CONFIGSOURCE" == "/config"* ]]; then
+ bashio::log.green "If accessing the file with filebrowser it should be mapped to $CONFIGFILEBROWSER"
+else
+ bashio::log.green "If accessing the file with filebrowser it should be mapped to $CONFIGSOURCE"
+fi
+bashio::log.green "---------------------------------------------------------"
+bashio::log.green "Wiki here on how to use : github.com/Mesteriis/hassio-addons-avm/wiki/Add‐ons-feature-:-add-env-variables"
+echo ""
+
+# Check if config file is there, or create one from template
+if [ ! -f "$CONFIGSOURCE" ]; then
+ echo "... no config file, creating one from template. Please customize the file in $CONFIGSOURCE before restarting."
+ # Create folder
+ mkdir -p "$(dirname "${CONFIGSOURCE}")"
+ # Placing template in config
+ if [ -f /templates/config.yaml ]; then
+ # Use available template
+ cp /templates/config.yaml "$(dirname "${CONFIGSOURCE}")"
+ else
+ # Download template
+ TEMPLATESOURCE="https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/config.template"
+ curl -f -L -s -S "$TEMPLATESOURCE" --output "$CONFIGSOURCE"
+ fi
+fi
+
+# Check if there are lines to read
+cp "$CONFIGSOURCE" /tempenv
+sed -i '/^#/d' /tempenv
+sed -i '/^ /d' /tempenv
+sed -i '/^$/d' /tempenv
+# Exit if empty
+if [ ! -s /tempenv ]; then
+ bashio::log.green "... no env variables found, exiting"
+ exit 0
+fi
+rm /tempenv
+
+# Check if yaml is valid
+EXIT_CODE=0
+yamllint -d relaxed "$CONFIGSOURCE" &>ERROR || EXIT_CODE=$?
+if [ "$EXIT_CODE" != 0 ]; then
+ cat ERROR
+ bashio::log.yellow "... config file has an invalid yaml format. Please check the file in $CONFIGSOURCE. Errors list above."
+fi
+
+# Export all yaml entries as env variables
+# Helper function
+function parse_yaml {
+ local prefix=$2 || local prefix=""
+ local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @ | tr @ '\034')
+ sed -ne "s|^\($s\):|\1|" \
+ -e "s| #.*$||g" \
+ -e "s|#.*$||g" \
+ -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
+ -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
+ awk -F$fs '{
+ indent = length($1)/2;
+ vname[indent] = $2;
+ for (i in vname) {if (i > indent) {delete vname[i]}}
+ if (length($3) > 0) {
+ vn=""; for (i=0; i/tmpfile
+# Escape dollars
+sed -i 's|$.|\$|g' /tmpfile
+
+while IFS= read -r line; do
+ # Clean output
+ line="${line//[\"\']/}"
+ # Check if secret
+ if [[ "${line}" == *'!secret '* ]]; then
+ echo "secret detected"
+ secret=${line#*secret }
+ # Check if single match
+ secretnum=$(sed -n "/$secret:/=" /config/secrets.yaml)
+ [[ $(echo $secretnum) == *' '* ]] && bashio::exit.nok "There are multiple matches for your password name. Please check your secrets.yaml file"
+ # Get text
+ secret=$(sed -n "/$secret:/p" /config/secrets.yaml)
+ secret=${secret#*: }
+ line="${line%%=*}='$secret'"
+ fi
+ # Data validation
+ if [[ "$line" =~ ^.+[=].+$ ]]; then
+ # extract keys and values
+ KEYS="${line%%=*}"
+ VALUE="${line#*=}"
+ line="${KEYS}='${VALUE}'"
+ export "$line"
+ # export to python
+ if command -v "python3" &>/dev/null; then
+ [ ! -f /env.py ] && echo "import os" > /env.py
+ echo "os.environ['${KEYS}'] = '${VALUE//[\"\']/}'" >> /env.py
+ python3 /env.py
+ fi
+ # set .env
+ if [ -f /.env ]; then echo "$line" >> /.env; fi
+ mkdir -p /etc
+ echo "$line" >> /etc/environment
+ # Export to scripts
+ if cat /etc/services.d/*/*run* &>/dev/null; then sed -i "1a export $line" /etc/services.d/*/*run* 2>/dev/null; fi
+ if cat /etc/cont-init.d/*run* &>/dev/null; then sed -i "1a export $line" /etc/cont-init.d/*run* 2>/dev/null; fi
+ # For s6
+ if [ -d /var/run/s6/container_environment ]; then printf "%s" "${VALUE}" > /var/run/s6/container_environment/"${KEYS}"; fi
+ echo "export $line" >> ~/.bashrc
+ # Show in log
+ if ! bashio::config.false "verbose"; then bashio::log.blue "$line"; fi
+ else
+ bashio::log.red "$line does not follow the correct structure. Please check your yaml file."
+ fi
+done <"/tmpfile"
diff --git a/.templates/01-custom_script.sh b/.templates/01-custom_script.sh
new file mode 100755
index 0000000..e57485f
--- /dev/null
+++ b/.templates/01-custom_script.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+
+##################
+# INITIALIZATION #
+##################
+
+# Exit if /config is not mounted
+if [ ! -d /config ]; then
+ exit 0
+fi
+
+# Define slug
+slug="${HOSTNAME}"
+
+# Check type of config folder
+if [ ! -f /config/configuration.yaml ] && [ ! -f /config/configuration.json ]; then
+ # New config location
+ CONFIGLOCATION="/config"
+ CONFIGFILEBROWSER="/addon_configs/$slug/${HOSTNAME#*-}.sh"
+else
+ # Legacy config location
+ slug="${HOSTNAME#*-}"
+ CONFIGLOCATION="/config/addons_autoscripts"
+ CONFIGFILEBROWSER="/homeassistant/addons_config/${slug}/${slug}.sh"
+fi
+
+# Default location
+mkdir -p "$CONFIGLOCATION" || true
+CONFIGSOURCE="$CONFIGLOCATION/${HOSTNAME#*-}.sh"
+
+bashio::log.green "Execute $CONFIGFILEBROWSER if existing"
+bashio::log.green "Wiki here : github.com/Mesteriis/hassio-addons-avm/wiki/Add-ons-feature-:-customisation"
+
+# Download template if no script found and exit
+if [ ! -f "$CONFIGSOURCE" ]; then
+ TEMPLATESOURCE="https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/script.template"
+ curl -f -L -s -S "$TEMPLATESOURCE" --output "$CONFIGSOURCE" || true
+ exit 0
+fi
+
+# Convert scripts to linux
+dos2unix "$CONFIGSOURCE" &>/dev/null || true
+chmod +x "$CONFIGSOURCE"
+
+# Get current shebang, if not available use another
+currentshebang="$(sed -n '1{s/^#![[:blank:]]*//p;q}' "$CONFIGSOURCE")"
+if [ ! -f "${currentshebang%% *}" ]; then
+ for shebang in "/command/with-contenv bashio" "/usr/bin/env bashio" "/usr/bin/bashio" "/bin/bash" "/bin/sh"; do if [ -f "${shebang%% *}" ]; then break; fi; done
+ sed -i "s|$currentshebang|$shebang|g" "$CONFIGSOURCE"
+fi
+
+# Check if there is actual commands
+while IFS= read -r line
+do
+ # Remove leading and trailing whitespaces
+ line="$(echo "$line" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
+
+ # Check if line is not empty and does not start with #
+ if [[ -n "$line" ]] && [[ ! "$line" =~ ^# ]]; then
+ bashio::log.green "... script found, executing"
+ /."$CONFIGSOURCE"
+ exit 0
+ fi
+done < "$CONFIGSOURCE"
diff --git a/.templates/19-json_repair.sh b/.templates/19-json_repair.sh
new file mode 100755
index 0000000..c2db5d9
--- /dev/null
+++ b/.templates/19-json_repair.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+# shellchek disable=SC2015
+
+JSONTOCHECK='/config/transmission/settings.json'
+JSONSOURCE='/defaults/settings.json'
+
+# If json already exists
+if [ -f "${JSONTOCHECK}" ]; then
+ # Variables
+ echo "Checking settings.json format"
+
+ # Check if json file valid or not
+ jq . -S "${JSONTOCHECK}" &>/dev/null && ERROR=false || ERROR=true
+ if [ "$ERROR" = true ]; then
+ bashio::log.fatal "Settings.json structure is abnormal, restoring options from scratch. Your old file is renamed as settings.json_old"
+ mv "${JSONSOURCE}" "${JSONSOURCE}"_old
+ cp "${JSONSOURCE}" "${JSONTOCHECK}"
+ exit 0
+ fi
+
+ # Get the default keys from the original file
+ mapfile -t arr < <(jq -r 'keys[]' "${JSONSOURCE}")
+
+ # Check if all keys are still there, or add them
+ # spellcheck disable=SC2068
+ for KEYS in "${arr[@]}"; do
+ # Check if key exists
+ KEYSTHERE=$(jq "has(\"${KEYS}\")" "${JSONTOCHECK}")
+ if [ "$KEYSTHERE" != "true" ]; then
+ #Fetch initial value
+ JSONSOURCEVALUE=$(jq -r ".\"$KEYS\"" "${JSONSOURCE}")
+ #Add key
+ sed -i "3 i\"${KEYS}\": \"${JSONSOURCEVALUE}\"," "${JSONTOCHECK}"
+ # Message
+ bashio::log.warning "${KEYS} was missing from your settings.json, it was added with the default value ${JSONSOURCEVALUE}"
+ fi
+ done
+
+ # Show structure in a nice way
+ jq . -S "${JSONTOCHECK}" | cat >temp.json && mv temp.json "${JSONTOCHECK}"
+
+ # Message
+ bashio::log.info "Your settings.json was checked and seems perfectly normal!"
+fi
diff --git a/.templates/90-disable_ingress.sh b/.templates/90-disable_ingress.sh
new file mode 100755
index 0000000..a0be50b
--- /dev/null
+++ b/.templates/90-disable_ingress.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+
+# Disables ingress and sets a default index
+
+# Disable Ingress
+if bashio::config.true "ingress_disabled"; then
+ bashio::log.warning "Ingress is disabled. You'll need to connect using ip:port"
+
+ # Adapt ingress.conf
+ sed -i "/root/d" /etc/nginx/servers/ingress.conf
+ sed -i "/proxy_pass/i root /etc;" /etc/nginx/servers/ingress.conf
+ sed -i "/proxy_pass/i try_files '' /ingress.html =404;" /etc/nginx/servers/ingress.conf
+ sed -i "/proxy_pass/d" /etc/nginx/servers/ingress.conf
+
+ # Create index.html
+ touch /etc/ingress.html
+ cat > /etc/ingress.html << EOF
+
+
+
+ Ingress is disabled!
+
+
+
+
+ Ingress was disabled by the user. Please connect using ip:port or
+ re-enable in the addons options.
+
+
+
+
+EOF
+fi
diff --git a/.templates/90-dns_set.sh b/.templates/90-dns_set.sh
new file mode 100755
index 0000000..157dd46
--- /dev/null
+++ b/.templates/90-dns_set.sh
@@ -0,0 +1,44 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+
+###############
+# DNS SETTING #
+###############
+
+# Avoid usage of local dns such as adguard home or pihole\n"
+
+if bashio::config.has_value 'DNS_server'; then
+ # Define variables
+ DNSSERVER=$(bashio::config 'DNS_server')
+ DNS=""
+ DNSLIST=""
+
+ # Get DNS servers
+ # shellcheck disable=SC2086
+ for server in ${DNSSERVER//,/ }; do # Separate comma separated values
+ # Only add DNS if successful
+ if ping -c 1 "$server" &> /dev/null
+ then
+ DNS="${DNS}nameserver $server\n"
+ DNSLIST="$server $DNSLIST"
+ else
+ bashio::log.warning "DNS $server was requested but can't be pinged. It won't be used"
+ fi
+ done
+
+ # Only add DNS if there are DNS set
+ # shellcheck disable=SC2236
+ if [[ ! -z "$DNS" ]]; then
+ # Write resolv.conf
+ # shellcheck disable=SC2059
+ printf "${DNS}" >/etc/resolv.conf
+ chmod 644 /etc/resolv.conf
+ bashio::log.info "DNS SERVERS set to $DNSLIST"
+ else
+ bashio::log.warning "No valid DNS were found. Using default router (or HA) dns servers."
+ fi
+
+else
+ bashio::log.info "DNS Servers option empty. Using default router (or HA) dns servers."
+fi
diff --git a/.templates/91-silent.sh b/.templates/91-silent.sh
new file mode 100755
index 0000000..ce36537
--- /dev/null
+++ b/.templates/91-silent.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+
+###############
+# SILENT MODE #
+###############
+
+if bashio::config.true 'silent'; then
+ APPEND=' > /dev/null'
+ sed -i '$s|$|'"$APPEND"'|' /etc/services.d/*/run &>/dev/null || true
+ sed -i '$s|$|'"$APPEND"'|' /etc/cont-init.d/*/*run* &>/dev/null || true
+ bashio::log.info 'Silent mode activated, all logs from emby server are hidden. Disable this option if you need to troubleshoot the addon.'
+fi
diff --git a/.templates/91-universal_graphic_drivers.sh b/.templates/91-universal_graphic_drivers.sh
new file mode 100755
index 0000000..bb54f05
--- /dev/null
+++ b/.templates/91-universal_graphic_drivers.sh
@@ -0,0 +1,172 @@
+#!/usr/bin/env bashio
+set -e
+
+if bashio::config.has_value "graphic_driver"; then
+
+ # Origin : https://github.com/wumingjieno1/photoprism-test/blob/main/scripts/dist/install-gpu.sh
+ # abort if not executed as root
+ if [[ $(id -u) != "0" ]]; then
+ # shellcheck disable=SC2128
+ bashio::log.fatal "Error: Run $(basename "${BASH_SOURCE}") as root" 1>&2
+ exit 1
+ fi
+
+ # Get installer type
+ if [ -f /usr/bin/apt ]; then
+ bashio::log.info "... Distribution detected : Debian/Ubuntu"
+ apt-get install -yqq software-properties-common >/dev/null
+ add-apt-repository ppa:kisak/kisak-mesa >/dev/null
+ apt-get update >/dev/null
+ apt-get install -yqq mesa
+ elif [ -f /usr/bin/apk ]; then
+ bashio::log.info "... Distribution detected : Alpine"
+ fi
+
+ # Detect GPU
+ # shellcheck disable=SC2207
+ GPU_DETECTED=($(lshw -c display -json 2>/dev/null | jq -r '.[].configuration.driver'))
+ bashio::log.info "... GPU detected: ${GPU_DETECTED[*]}"
+ graphic_driver=""
+
+ # Get arch type
+ BUILD_ARCH="$(uname -m)"
+ case "$BUILD_ARCH" in
+ amd64 | AMD64 | x86_64 | x86-64)
+ BUILD_ARCH=amd64
+ ;;
+
+ arm64 | ARM64 | aarch64)
+ BUILD_ARCH=arm64
+ graphic_driver=aarch64_rpi
+ ;;
+
+ arm | ARM | aarch | armv7l | armhf)
+ bashio::log.fatal "Unsupported Machine Architecture: $BUILD_ARCH" 1>&2
+ exit 1
+ ;;
+
+ *)
+ bashio::log.fatal "Unsupported Machine Architecture: $BUILD_ARCH" 1>&2
+ exit 1
+ ;;
+ esac
+ bashio::log.info "... architecture detected: ${BUILD_ARCH}"
+
+ #graphic_driver="$(bashio::config "graphic_driver")"
+ case "$graphic_driver" in
+ x64_AMD)
+ if [[ "$BUILD_ARCH" != amd64 ]]; then bashio::log.fatal "Wrong architecture, $graphic_driver doesn't support $BUILD_ARCH"; fi
+ [ -f /usr/bin/apt ] && DOCKER_MODS=linuxserver/mods:jellyfin-amd && run_mods >/dev/null && bashio::log.green "... done"
+ [ -f /usr/bin/apk ] && apk add --no-cache mesa-dri-classic mesa-vdpau-gallium linux-firmware-radeon >/dev/null && bashio::log.green "... done"
+ ;;
+
+ x64_NVIDIA)
+ if [[ "$BUILD_ARCH" != amd64 ]]; then bashio::log.fatal "Wrong architecture, $graphic_driver doesn't support $BUILD_ARCH"; fi
+ [ -f /usr/bin/apk ] && apk add --no-cache linux-firmware-radeon >/dev/null && bashio::log.green "... done"
+ [ -f /usr/bin/apt ] && apt-get -yqq install libcuda1 libnvcuvid1 libnvidia-encode1 nvidia-opencl-icd nvidia-vdpau-driver nvidia-driver-libs nvidia-kernel-dkms libva2 vainfo libva-wayland2 >/dev/null && bashio::log.green "... done"
+ ;;
+
+ x64_Intel)
+ if [[ "$BUILD_ARCH" != amd64 ]]; then bashio::log.fatal "Wrong architecture, $graphic_driver doesn't support $BUILD_ARCH"; fi
+ [ -f /usr/bin/apk ] && apk add --no-cache opencl mesa-dri-gallium mesa-vulkan-intel mesa-dri-intel intel-media-driver >/dev/null && bashio::log.green "... done"
+ [ -f /usr/bin/apt ] && DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel && run_mods && apt-get -yqq install intel-opencl-icd intel-media-va-driver-non-free i965-va-driver-shaders mesa-va-drivers libmfx1 libva2 vainfo libva-wayland2 >/dev/null && bashio::log.green "... done"
+ ;;
+
+ aarch64_rpi)
+ if [[ "$BUILD_ARCH" != arm64 ]]; then bashio::log.fatal "Wrong architecture, $graphic_driver doesn't support $BUILD_ARCH"; fi
+ bashio::log.info "Installing Rpi graphic drivers"
+ [ -f /usr/bin/apk ] && apk add --no-cache mesa-dri-vc4 mesa-dri-swrast mesa-gbm xf86-video-fbdev >/dev/null && bashio::log.green "... done"
+ [ -f /usr/bin/apt ] && apt-get -yqq install libgles2-mesa libgles2-mesa-dev xorg-dev >/dev/null && bashio::log.green "... done"
+ ;;
+
+ esac
+
+ # Main run logic
+ run_mods() {
+ echo "[mod-init] Attempting to run Docker Modification Logic"
+ for DOCKER_MOD in $(echo "${DOCKER_MODS}" | tr '|' '\n'); do
+ # Support alternative endpoints
+ if [[ ${DOCKER_MOD} == ghcr.io/* ]] || [[ ${DOCKER_MOD} == linuxserver/* ]]; then
+ DOCKER_MOD="${DOCKER_MOD#ghcr.io/*}"
+ ENDPOINT="${DOCKER_MOD%%:*}"
+ USERNAME="${DOCKER_MOD%%/*}"
+ REPO="${ENDPOINT#*/}"
+ TAG="${DOCKER_MOD#*:}"
+ if [[ ${TAG} == "${DOCKER_MOD}" ]]; then
+ TAG="latest"
+ fi
+ FILENAME="${USERNAME}.${REPO}.${TAG}"
+ AUTH_URL="https://ghcr.io/token?scope=repository%3A${USERNAME}%2F${REPO}%3Apull"
+ MANIFEST_URL="https://ghcr.io/v2/${ENDPOINT}/manifests/${TAG}"
+ BLOB_URL="https://ghcr.io/v2/${ENDPOINT}/blobs/"
+ MODE="ghcr"
+ else
+ ENDPOINT="${DOCKER_MOD%%:*}"
+ USERNAME="${DOCKER_MOD%%/*}"
+ REPO="${ENDPOINT#*/}"
+ TAG="${DOCKER_MOD#*:}"
+ if [[ ${TAG} == "${DOCKER_MOD}" ]]; then
+ TAG="latest"
+ fi
+ FILENAME="${USERNAME}.${REPO}.${TAG}"
+ AUTH_URL="https://auth.docker.io/token?service=registry.docker.io&scope=repository:${ENDPOINT}:pull"
+ MANIFEST_URL="https://registry-1.docker.io/v2/${ENDPOINT}/manifests/${TAG}"
+ BLOB_URL="https://registry-1.docker.io/v2/${ENDPOINT}/blobs/"
+ MODE="dockerhub"
+ fi
+ # Kill off modification logic if any of the usernames are banned
+ for BANNED in $(curl -s https://raw.githubusercontent.com/linuxserver/docker-mods/master/blacklist.txt); do
+ if [[ "${BANNED,,}" == "${USERNAME,,}" ]]; then
+ if [[ -z ${RUN_BANNED_MODS+x} ]]; then
+ echo "[mod-init] ${DOCKER_MOD} is banned from use due to reported abuse aborting mod logic"
+ return
+ else
+ echo "[mod-init] You have chosen to run banned mods ${DOCKER_MOD} will be applied"
+ fi
+ fi
+ done
+ echo "[mod-init] Applying ${DOCKER_MOD} files to container"
+ # Get Dockerhub token for api operations
+ TOKEN="$(
+ curl -f --retry 10 --retry-max-time 60 --retry-connrefused \
+ --silent \
+ --header 'GET' \
+ "${AUTH_URL}" |
+ jq -r '.token'
+ )"
+ # Determine first and only layer of image
+ SHALAYER=$(get_blob_sha "${MODE}" "${TOKEN}" "${MANIFEST_URL}")
+ # Check if we have allready applied this layer
+ if [[ -f "/${FILENAME}" ]] && [[ "${SHALAYER}" == "$(cat /"${FILENAME}")" ]]; then
+ echo "[mod-init] ${DOCKER_MOD} at ${SHALAYER} has been previously applied skipping"
+ else
+ # Download and extract layer to /
+ curl -f --retry 10 --retry-max-time 60 --retry-connrefused \
+ --silent \
+ --location \
+ --request GET \
+ --header "Authorization: Bearer ${TOKEN}" \
+ "${BLOB_URL}${SHALAYER}" -o \
+ /modtarball.tar.xz
+ mkdir -p /tmp/mod
+ tar xzf /modtarball.tar.xz -C /tmp/mod
+ if [[ -d /tmp/mod/etc/s6-overlay ]]; then
+ if [[ -d /tmp/mod/etc/cont-init.d ]]; then
+ rm -rf /tmp/mod/etc/cont-init.d
+ fi
+ if [[ -d /tmp/mod/etc/services.d ]]; then
+ rm -rf /tmp/mod/etc/services.d
+ fi
+ fi
+ shopt -s dotglob
+ cp -R /tmp/mod/* /
+ shopt -u dotglob
+ rm -rf /tmp/mod
+ rm -rf /modtarball.tar.xz
+ echo "${SHALAYER}" >"/${FILENAME}"
+ echo "[mod-init] ${DOCKER_MOD} applied to container"
+ fi
+ done
+ }
+
+fi
diff --git a/.templates/99-custom_script.sh b/.templates/99-custom_script.sh
new file mode 100755
index 0000000..c3c8bce
--- /dev/null
+++ b/.templates/99-custom_script.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+set -e
+
+CONFIGSOURCE=$(bashio::config "CONFIG_LOCATION")
+CONFIGSOURCE="$(dirname "${CONFIGSOURCE}")"
+
+if [ -f "$CONFIGSOURCE"/script.sh ]; then
+ "$CONFIGSOURCE"./script.sh
+fi
diff --git a/.templates/config.template b/.templates/config.template
new file mode 100644
index 0000000..c765bfa
--- /dev/null
+++ b/.templates/config.template
@@ -0,0 +1,10 @@
+# All env variables set in this file will be enabled in the app
+# This allows enabling more options that normally available in the addon options
+# This file must be filled according to the yaml format.
+# If the format is invalid, the addon will note an error.
+# To validate your yaml, you can use the free online tool http://www.yamllint.com/
+# You can use env both for the addon, and for bashio. For bashio, use BASHIO_LOG_LEVEL instead of LOG_LEVEL
+
+# EXAMPLE of the format (you need to remove the # for it to become active)
+# TZ: Europe/Paris
+
diff --git a/.templates/ha_autoapps.sh b/.templates/ha_autoapps.sh
new file mode 100755
index 0000000..b72a2d5
--- /dev/null
+++ b/.templates/ha_autoapps.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+# shellcheck disable=SC2015
+set -e
+
+##############################
+# Automatic apps download #
+##############################
+
+PACKAGES="$1"
+echo "To install : $PACKAGES"
+
+# Install bash if needed
+if ! command -v bash >/dev/null 2>/dev/null; then
+ (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null
+fi
+
+# Install curl if needed
+if ! command -v curl >/dev/null 2>/dev/null; then
+ (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null
+fi
+
+# Call apps installer script if needed
+curl -f -L -s -S "https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/ha_automatic_packages.sh" --output /ha_automatic_packages.sh
+chmod 777 /ha_automatic_packages.sh
+eval /./ha_automatic_packages.sh "${PACKAGES:-}"
+
+# Clean
+rm /ha_automatic_packages.sh
diff --git a/.templates/ha_automatic_packages.sh b/.templates/ha_automatic_packages.sh
new file mode 100755
index 0000000..367a137
--- /dev/null
+++ b/.templates/ha_automatic_packages.sh
@@ -0,0 +1,275 @@
+#!/bin/bash
+set -e
+
+########
+# INIT #
+########
+
+#Verbose or not
+VERBOSE=false
+#Avoid fails on non declared variables
+set +u 2>/dev/null || true
+#If no packages, empty
+PACKAGES="${*:-}"
+#Avoids messages if non interactive
+(echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections) &>/dev/null || true
+
+[ "$VERBOSE" = true ] && echo "ENV : $PACKAGES"
+
+############################
+# CHECK WHICH BASE IS USED #
+############################
+
+if command -v "apk" &>/dev/null; then
+ # If apk based
+ [ "$VERBOSE" = true ] && echo "apk based"
+ PACKMANAGER="apk"
+elif command -v "apt" &>/dev/null; then
+ # If apt-get based
+ [ "$VERBOSE" = true ] && echo "apt based"
+ PACKMANAGER="apt"
+elif command -v "pacman" &>/dev/null; then
+ # If apt-get based
+ [ "$VERBOSE" = true ] && echo "pacman based"
+ PACKMANAGER="pacman"
+fi
+
+###################
+# DEFINE PACKAGES #
+###################
+
+# ADD GENERAL ELEMENTS
+######################
+
+PACKAGES="$PACKAGES jq curl vim ca-certificates"
+
+# FOR EACH SCRIPT, SELECT PACKAGES
+##################################
+
+# Scripts
+for files in "/etc/cont-init.d" "/etc/services.d"; do
+ # Next directory if does not exists
+ if ! ls $files 1>/dev/null 2>&1; then continue; fi
+
+ # Test each possible command
+ COMMAND="nginx"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES nginx"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES nginx"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES nginx"
+ if ls /etc/nginx 1>/dev/null 2>&1; then mv /etc/nginx /etc/nginx2; fi
+ fi
+
+ COMMAND="mount"
+ if grep -q -rnw "$files/" -e "$COMMAND"; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES exfatprogs ntfs-3g squashfs-tools fuse lsblk"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES exfat* ntfs* squashfs-tools util-linux"
+ #[ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES ntfs-3g"
+ fi
+
+ COMMAND="ping"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES iputils"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES iputils-ping"
+ #[ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES iputils"
+ fi
+
+ COMMAND="nmap"
+ if grep -q -rnw "$files/" -e "$COMMAND"; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES nmap nmap-scripts"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES nmap"
+ #[ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES iputils"
+ fi
+
+ COMMAND="cifs"
+ if grep -q -rnw "$files/" -e "$COMMAND"; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES cifs-utils keyutils"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES cifs-utils keyutils"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES cifs-utils keyutils"
+ fi
+
+ COMMAND="smbclient"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES samba samba-client ntfs-3g"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES samba smbclient ntfs-3g"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES samba smbclient"
+ fi
+
+ COMMAND="dos2unix"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES dos2unix"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES dos2unix"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES dos2unix"
+ fi
+
+ COMMAND="openvpn"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES coreutils openvpn"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES coreutils openvpn"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES coreutils openvpn"
+ fi
+
+ COMMAND="jq"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES jq"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES jq"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES jq"
+ fi
+
+ COMMAND="yamllint"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES yamllint"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES yamllint"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES yamllint"
+ fi
+
+ COMMAND="git"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES git"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES git"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES git"
+ fi
+
+ COMMAND="sponge"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES moreutils"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES moreutils"
+ [ "$PACKMANAGER" = "pacman " ] && PACKAGES="$PACKAGES moreutils"
+ fi
+
+ COMMAND="sqlite3"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES sqlite"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES sqlite3"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES sqlite3"
+ fi
+
+ COMMAND="pip"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES py3-pip"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES pip"
+ [ "$PACKMANAGER" = "pacman" ] && PACKAGES="$PACKAGES pip"
+ fi
+
+ COMMAND="wget"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && PACKAGES="$PACKAGES wget"
+ [ "$PACKMANAGER" = "apt" ] && PACKAGES="$PACKAGES wget"
+ [ "$PACKMANAGER" = "wget" ] && PACKAGES="$PACKAGES wget"
+ fi
+
+done
+
+####################
+# INSTALL ELEMENTS #
+####################
+
+# Install apps
+[ "$VERBOSE" = true ] && echo "installing packages $PACKAGES"
+if [ "$PACKMANAGER" = "apt" ]; then apt-get update >/dev/null; fi
+if [ "$PACKMANAGER" = "pacman" ]; then pacman -Sy >/dev/null; fi
+
+# Install apps one by one to allow failures
+# shellcheck disable=SC2086
+for packagestoinstall in $PACKAGES; do
+ [ "$VERBOSE" = true ] && echo "... $packagestoinstall"
+ if [ "$PACKMANAGER" = "apk" ]; then
+ apk add --no-cache "$packagestoinstall" &>/dev/null || (echo "Error : $packagestoinstall not found" && touch /ERROR)
+ elif [ "$PACKMANAGER" = "apt" ]; then
+ apt-get install -yqq --no-install-recommends "$packagestoinstall" &>/dev/null || (echo "Error : $packagestoinstall not found" && touch /ERROR)
+ elif [ "$PACKMANAGER" = "pacman" ]; then
+ pacman --noconfirm -S "$packagestoinstall" &>/dev/null || (echo "Error : $packagestoinstall not found" && touch /ERROR)
+ fi
+ [ "$VERBOSE" = true ] && echo "... $packagestoinstall done"
+done
+
+# Clean after install
+[ "$VERBOSE" = true ] && echo "Cleaning apt cache"
+if [ "$PACKMANAGER" = "apt" ]; then apt-get clean >/dev/null; fi
+
+# Replace nginx if installed
+if ls /etc/nginx2 1>/dev/null 2>&1; then
+ [ "$VERBOSE" = true ] && echo "replace nginx2"
+ rm -r /etc/nginx
+ mv /etc/nginx2 /etc/nginx
+ mkdir -p /var/log/nginx
+ touch /var/log/nginx/error.log
+fi
+
+#######################
+# INSTALL MANUAL APPS #
+#######################
+
+# Install micro texteditor
+curl https://getmic.ro | bash
+mv micro /usr/bin
+micro -plugin install bounce
+micro -plugin install filemanager
+
+for files in "/etc/services.d" "/etc/cont-init.d"; do
+
+ # Next directory if does not exists
+ if ! ls $files 1>/dev/null 2>&1; then continue; fi
+
+ # Bashio
+ if grep -q -rnw "$files/" -e 'bashio' && [ ! -f "/usr/bin/bashio" ]; then
+ [ "$VERBOSE" = true ] && echo "install bashio"
+ BASHIO_VERSION="0.14.3"
+ mkdir -p /tmp/bashio
+ curl -f -L -s -S "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" | tar -xzf - --strip 1 -C /tmp/bashio
+ mv /tmp/bashio/lib /usr/lib/bashio
+ ln -s /usr/lib/bashio/bashio /usr/bin/bashio
+ rm -rf /tmp/bashio
+ fi
+
+ # Lastversion
+ COMMAND="lastversion"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "install $COMMAND"
+ pip install $COMMAND
+ fi
+
+ # Tempio
+ if grep -q -rnw "$files/" -e 'tempio' && [ ! -f "/usr/bin/tempio" ]; then
+ [ "$VERBOSE" = true ] && echo "install tempio"
+ TEMPIO_VERSION="2021.09.0"
+ BUILD_ARCH="$(bashio::info.arch)"
+ curl -f -L -f -s -o /usr/bin/tempio "https://github.com/home-assistant/tempio/releases/download/${TEMPIO_VERSION}/tempio_${BUILD_ARCH}"
+ chmod a+x /usr/bin/tempio
+ fi
+
+ # Mustache
+ COMMAND="mustache"
+ if grep -q -rnw "$files/" -e "$COMMAND" && ! command -v $COMMAND &>/dev/null; then
+ [ "$VERBOSE" = true ] && echo "$COMMAND required"
+ [ "$PACKMANAGER" = "apk" ] && apk add --no-cache go npm &&
+ apk upgrade --no-cache &&
+ apk add --no-cache --virtual .build-deps build-base git go &&
+ go get -u github.com/quantumew/mustache-cli &&
+ cp "$GOPATH"/bin/* /usr/bin/ &&
+ rm -rf "$GOPATH" /var/cache/apk/* /tmp/src &&
+ apk del .build-deps xz build-base
+ [ "$PACKMANAGER" = "apt" ] && apt-get update &&
+ apt-get install -yqq go npm node-mustache
+ fi
+
+done
+
+if [ -f /ERROR ]; then
+ exit 1
+fi
diff --git a/.templates/ha_automodules.sh b/.templates/ha_automodules.sh
new file mode 100755
index 0000000..b1e96e7
--- /dev/null
+++ b/.templates/ha_automodules.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# shellcheck disable=SC2015
+set -e
+
+##############################
+# Automatic modules download #
+##############################
+
+MODULES="$1"
+MODULES="$MODULES 00-banner.sh 01-custom_script.sh 01-config_yaml.sh 00-global_var.sh"
+echo "To download : $MODULES"
+
+# Install bash if not available
+if ! command -v bash >/dev/null 2>/dev/null; then
+ (apt-get update && apt-get install -yqq --no-install-recommends bash || apk add --no-cache bash) >/dev/null
+fi
+
+# Install curl if not available
+if ! command -v curl >/dev/null 2>/dev/null; then
+ (apt-get update && apt-get install -yqq --no-install-recommends curl || apk add --no-cache curl) >/dev/null
+fi
+
+# Install ca-certificates if not available
+apt-get update && apt-get install -yqq --no-install-recommends ca-certificates || apk add --no-cache ca-certificates >/dev/null || true
+
+# Create folder for scripts
+mkdir -p /etc/cont-init.d
+
+# Download scripts
+for scripts in $MODULES; do
+ echo "$scripts" && curl -f -L -s -S "https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/$scripts" -o /etc/cont-init.d/"$scripts" &&
+ [ "$(sed -n '/\/bin/p;q' /etc/cont-init.d/"$scripts")" != "" ] ||
+ (echo "script failed to install $scripts" && exit 1)
+done
+
+chmod -R 755 /etc/cont-init.d
diff --git a/.templates/ha_entrypoint.sh b/.templates/ha_entrypoint.sh
new file mode 100755
index 0000000..01a520b
--- /dev/null
+++ b/.templates/ha_entrypoint.sh
@@ -0,0 +1,59 @@
+#!/command/with-contenv bashio
+# shellcheck shell=bash
+echo "Starting..."
+
+####################
+# Starting scripts #
+####################
+
+for SCRIPTS in /etc/cont-init.d/*; do
+ [ -e "$SCRIPTS" ] || continue
+ echo "$SCRIPTS: executing"
+
+ # Check if run as root
+ if test "$(id -u)" == 0 && test "$(id -u)" == 0; then
+ chown "$(id -u)":"$(id -g)" "$SCRIPTS"
+ chmod a+x "$SCRIPTS"
+ else
+ bashio::log.warning "Script executed with user $(id -u):$(id -g), things can break and chown won't work"
+ # Disable chown and chmod in scripts
+ sed -i "s/^chown /true # chown /g" "$SCRIPTS"
+ sed -i "s/ chown / true # chown /g" "$SCRIPTS"
+ sed -i "s/^chmod /true # chmod /g" "$SCRIPTS"
+ sed -i "s/ chmod / true # chmod /g" "$SCRIPTS"
+ fi
+
+ # Get current shebang, if not available use another
+ currentshebang="$(sed -n '1{s/^#![[:blank:]]*//p;q}' "$SCRIPTS")"
+ if [ ! -f "${currentshebang%% *}" ]; then
+ for shebang in "/command/with-contenv bashio" "/usr/bin/env bashio" "/usr/bin/bashio" "/bin/bash" "/bin/sh"; do if [ -f "${shebang%% *}" ]; then break; fi; done
+ sed -i "s|$currentshebang|$shebang|g" "$SCRIPTS"
+ fi
+
+ # Use source to share env variables when requested
+ if [ "${ha_entry_source:-null}" = true ] && command -v "source" &>/dev/null; then
+ # Exit cannot be used with source
+ sed -i "s/(.*\s|^)exit ([0-9]+)/\1 return \2 || exit \2/g" "$SCRIPTS"
+ sed -i "s/bashio::exit.nok/return 1/g" "$SCRIPTS"
+ sed -i "s/bashio::exit.ok/return 0/g" "$SCRIPTS"
+ # shellcheck source=/dev/null
+ source "$SCRIPTS" || echo -e "\033[0;31mError\033[0m : $SCRIPTS exiting $?"
+ else
+ # Support for posix only shell
+ /."$SCRIPTS" || echo -e "\033[0;31mError\033[0m : $SCRIPTS exiting $?"
+ fi
+
+ # Cleanup
+ rm "$SCRIPTS"
+done
+
+######################
+# Starting container #
+######################
+
+echo " "
+echo -e "\033[0;32mStarting the upstream container\033[0m"
+echo " "
+
+# Launch lsio mods
+if [ -f /docker-mods ]; then exec /docker-mods; fi
diff --git a/.templates/ha_entrypoint_modif.sh b/.templates/ha_entrypoint_modif.sh
new file mode 100755
index 0000000..026efff
--- /dev/null
+++ b/.templates/ha_entrypoint_modif.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+set -e
+
+##########################################
+# Global modifications before entrypoint #
+##########################################
+
+# Corrects permissions for s6 v3
+################################
+
+PUID="${PUID:-0}"
+PGID="${PGID:-0}"
+
+if [ -f /ha_entrypoint.sh ]; then
+ chown -R "$PUID:$PGID" /ha_entrypoint.sh
+ chmod -R 755 /ha_entrypoint.sh
+fi
+
+if [ -d /etc/cont-init.d ]; then
+ chown -R "$PUID:$PGID" /etc/cont-init.d
+ chmod -R 755 /etc/cont-init.d
+fi
+
+if [ -d /etc/services.d ]; then
+ chown -R "$PUID:$PGID" /etc/services.d
+ chmod -R 755 /etc/services.d
+fi
+
+if [ -d /etc/s6-rc.d ]; then
+ chown -R "$PUID:$PGID" /etc/s6-rc.d
+ chmod -R 755 /etc/s6-rc.d
+fi
+
+# Correct shebang in entrypoint
+###############################
+
+# Make s6 contenv if needed
+mkdir -p /run/s6/container_environment
+
+# Check if shebang exists
+for shebang in "/command/with-contenv bashio" "/usr/bin/with-contenv bashio" "/usr/bin/env bashio" "/usr/bin/bashio" "/usr/bin/bash" "/usr/bin/sh" "/bin/bash" "/bin/sh"; do
+ if [ -f "${shebang%% *}" ]; then
+ break
+ fi
+done
+
+# Define shebang
+sed -i "s|/command/with-contenv bashio|$shebang|g" /ha_entrypoint.sh
+
+# Correct for scripts
+for string in "/command/with-contenv bashio" "/usr/bin/with-contenv bashio"; do
+ for files in $(grep -sril "$string" /etc/cont-init.d /etc/services.d /etc/s6-overlay/s6-rc.d); do
+ sed -i "s|$string|$shebang|g" "$files"
+ done
+done
+
+# Avoid interference with LOG_LEVEL used in the app
+if [ -f /usr/lib/bashio/bashio.sh ]; then
+ sed -i 's|{LOG_LEVEL:|{BASHIO_LOG_LEVEL:|g' /usr/lib/bashio/bashio.sh
+fi
diff --git a/.templates/ha_lsio.sh b/.templates/ha_lsio.sh
new file mode 100755
index 0000000..fa21dc9
--- /dev/null
+++ b/.templates/ha_lsio.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+# shellcheck disable=SC2013,SC2016,SC2236
+set -e
+
+#############################
+# Modify global lsio images #
+#############################
+
+# Set variable
+CONFIGLOCATION="${1:-/config}"
+echo "Setting config to $CONFIGLOCATION"
+
+# Avoid custom-init.d duplications
+for file in $(grep -sril 'Potential tampering with custom' /etc/cont-init.d /etc/services.d /etc/s6-overlay/s6-rc.d); do
+ rm -f "$file"
+done
+
+# If custom config
+if [ "$CONFIGLOCATION" != "/config" ]; then
+
+ # Create new config folder if needed
+ for file in $(grep -srl "PUID" /etc/cont-init.d /etc/s6-overlay/s6-rc.d); do
+ sed -i "1a mkdir -p $CONFIGLOCATION" "$file"
+ done
+
+ # Correct config location
+ for file in $(grep -Esril "/config[ '\"/]|/config\$" /etc /defaults); do
+ sed -Ei "s=(/config)+(/| |$|\"|\')=$CONFIGLOCATION\2=g" "$file"
+ done
+
+fi
+
+# Allow UID and GID setting
+for file in $(grep -srl "PUID" /etc/cont-init.d /etc/s6-overlay/s6-rc.d); do
+ sed -i 's/bash/bashio/g' "$file" && sed -i '1a PUID="$(if bashio::config.has_value "PUID"; then bashio::config "PUID"; else echo "0"; fi)"' "$file"
+ sed -i '1a PGID="$(if bashio::config.has_value "PGID"; then bashio::config "PGID"; else echo "0"; fi)"' "$file"
+done
+
+# Avoid chmod /config if ha config mounted
+if [ -f /config/configuration.yaml ] || [ -f /config/configuration.json ]; then
+ for file in /etc/services.d/*/* /etc/cont-init.d/* /etc/s6-overlay/s6-rc.d/*/*; do
+ if [ -f "$file" ] && [ ! -z "$(awk '/chown.*abc:abc.*\\/,/.*\/config( |$)/{print FILENAME}' "$file")" ]; then
+ sed -i "s|/config$|/data|g" "$file"
+ fi
+ done
+fi
+
+# Send crond logs to addon logs
+if [ -f /etc/s6-overlay/s6-rc.d/svc-cron/run ]; then
+ sed -i "/exec busybox crond/c exec busybox crond -f -S -L /proc/1/fd/1" /etc/s6-overlay/s6-rc.d/svc-cron/run
+ sed -i "/exec \/usr\/sbin\/cron/c exec /usr/sbin/cron -f &>/proc/1/fd/1" /etc/s6-overlay/s6-rc.d/svc-cron/run
+fi
+
+# Replace lsiown if not found
+if [ ! -f /usr/bin/lsiown ]; then
+ for file in $(grep -sril "lsiown" /etc); do
+ sed -i "s|lsiown|chown|g" "$file"
+ done
+fi
diff --git a/.templates/script.template b/.templates/script.template
new file mode 100644
index 0000000..90afec5
--- /dev/null
+++ b/.templates/script.template
@@ -0,0 +1,9 @@
+#!/usr/bin/with-contenv bashio
+# shellcheck shell=bash
+
+#################
+# CODE INJECTOR #
+#################
+
+# Any commands written in this bash script will be executed at addon start
+# See guide here : https://github.com/Mesteriis/hassio-addons-avm/wiki/Add%E2%80%90ons-feature-:-customisation
diff --git a/.templates/show_text_color b/.templates/show_text_color
new file mode 100644
index 0000000..03e54ad
--- /dev/null
+++ b/.templates/show_text_color
@@ -0,0 +1,9 @@
+#Define colors
+red=1
+green=2
+yellow=3
+blue=4
+violet=5
+teal=6
+echo "$(tput setaf $red)ENV exported : $word$(tput sgr0)"
+echo -e "\033[0;31mError\033[0m : Text"
diff --git a/.yamllint b/.yamllint
deleted file mode 100644
index fe42475..0000000
--- a/.yamllint
+++ /dev/null
@@ -1,66 +0,0 @@
----
-ignore: |
- */translations/*.yaml
-rules:
- braces:
- level: error
- min-spaces-inside: 0
- max-spaces-inside: 1
- min-spaces-inside-empty: -1
- max-spaces-inside-empty: -1
- brackets:
- level: error
- min-spaces-inside: 0
- max-spaces-inside: 0
- min-spaces-inside-empty: -1
- max-spaces-inside-empty: -1
- colons:
- level: error
- max-spaces-before: 0
- max-spaces-after: 1
- commas:
- level: error
- max-spaces-before: 0
- min-spaces-after: 1
- max-spaces-after: 1
- comments:
- level: error
- require-starting-space: true
- min-spaces-from-content: 2
- comments-indentation:
- level: error
- document-end:
- level: error
- present: false
- document-start:
- level: error
- present: true
- empty-lines:
- level: error
- max: 1
- max-start: 0
- max-end: 1
- hyphens:
- level: error
- max-spaces-after: 1
- indentation:
- level: error
- spaces: 2
- indent-sequences: true
- check-multi-line-strings: false
- key-duplicates:
- level: error
- line-length:
- level: warning
- max: 120
- allow-non-breakable-words: true
- allow-non-breakable-inline-mappings: true
- new-line-at-end-of-file:
- level: error
- new-lines:
- level: error
- type: unix
- trailing-spaces:
- level: error
- truthy:
- level: error
diff --git a/LICENSE.md b/LICENSE.md
index 55eceb7..8206755 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,6 +1,6 @@
# MIT License
-Copyright (c) 2017-2021 Franck Nijhof
+Copyright (c) 2017-2021 Alexander Mescheryakov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/aircast/CHANGELOG.md b/aircast/CHANGELOG.md
deleted file mode 100644
index 5e478fe..0000000
--- a/aircast/CHANGELOG.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#74)
-- ⬆️ Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#75)
-- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#76)
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#77)
-- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#78)
-- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#79)
-- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#80)
-- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#81)
-- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2 @dependabot (#82)
-- ⬆️ Upgrades add-on base image to v4.2.1 @frenck (#84)
-- ⬆️ Upgrades AirConnect to 0.2.50.5 @frenck (#85)
diff --git a/aircast/DOCS.md b/aircast/DOCS.md
deleted file mode 100644
index f022475..0000000
--- a/aircast/DOCS.md
+++ /dev/null
@@ -1,231 +0,0 @@
-# Home Assistant Community Add-on: AirCast
-
-Apple devices use AirPlay to send audio to other devices, but this is not
-compatible with Google's Chromecast. This add-on tries to solve this
-compatibility gap.
-
-It detects Chromecast players in your network and creates virtual AirPlay
-devices for each of them. It acts as a bridge between the AirPlay client
-and the real Chromecast player.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the “AirCast” add-on in the Supervisor add-on store
- and install it.
-1. Install the "AirCast" add-on.
-1. Start the "AirCast" add-on
-1. Check the logs of the "AirCast" add-on to see if everything went well.
-
-After ~30 seconds you should see some log messages appear in the add-on log.
-Using your iOS/Mac/iTunes/Airfoil/other clients, you should now see new AirPlay
-devices and can try to play audio to them.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-address: 192.168.1.234
-latency_rtp: 5000
-latency_http: 0
-drift: true
-```
-
-**Note**: _This is just an example, don't copy and past it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-These log level also affects the log levels of AirCast server.
-
-### Option: `address`
-
-This option allows you to specify the IP address the AirCast server needs to
-bind to. It will automatically detect the interface to use when this option is
-left empty. Nevertheless, it might get detected wrong (e.g., in case you have
-multiple network interfaces).
-
-### Option: `latency_rtp`
-
-Allows you to tweak the buffering, which is needed when the audio is stuttering
-(e.g., low-quality network). This option specifies the number of ms the addon
-has to buffer the RTP audio (AirPlay). Setting this value below 500ms is not
-recommended! Setting the value to `0` causes the addon the get the value from
-AirPlay.
-
-### Option: `latency_http`
-
-Allows you to tweak the buffering, which is needed when the audio is stuttering
-(e.g., low-quality network). This option specifies the number of ms the addon
-has to buffer the HTTP audio.
-
-**Note**: This option usually is not needed and can be left to `0` in most
-cases.
-
-### Option: `drift`
-
-Set to `true` to let timing reference drift (no click).
-
-## Latency options explained
-
-These bridges receive real-time "synchronous" audio from the AirPlay controller
-in the format of RTP frames and forward it to the Chromecast player in an HTTP
-"asynchronous" continuous audio binary format. In other words,
-the AirPlay clients "push" the audio using RTP and the Chromecast players
-"pull" the audio using an HTTP GET request.
-
-A player using HTTP to get its audio expects to receive an initial large
-portion of audio as the response to its GET and this creates a large enough
-buffer to handle most further network congestion/delays. The rest of the audio
-transmission is regulated by the player using TCP flow control. However, when
-the source is an AirPlay RTP device, there is no such significant portion of
-audio available in advance to be sent to the Player, as the audio comes to the
-bridge in real time. Every 8ms, an RTP frame is received and is immediately
-forwarded as the continuation of the HTTP body. If the Chromecast players
-start to play immediately the first received audio sample, expecting an initial
-burst to follow, then any network congestion delaying RTP audio will starve
-the player and create shuttering.
-
-The `latency_http` option allows a certain amount of silence frames to be sent
-to the Chromecast player, in a burst at the beginning. Then, while this
-"artificial" silence is being played, it is possible for the bridge to build
-a buffer of RTP frames that will then hide network delays that might happen
-in further RTP frames transmission. This delays the start of the playback
-by `latency_http` ms.
-
-However, RTP frames are transmitted using UDP, which means there is no guarantee
-of delivery, so frames might be lost from time to time
-(often happens on WiFi networks). To allow detection of lost frames, they are
-numbered sequentially (1,2 ... n) so every time two received frames are not
-consecutive, the missing ones can be asked again by the AirPlay receiver.
-
-Typically, the bridge forwards immediately every RTP frame using HTTP and again,
-in HTTP, the notion of frame numbers does not exist, it is just the continuous
-binary audio. So it is not possible to send audio non-sequentially when using
-HTTP.
-
-For example, if received RTP frames are numbered 1,2,3,6, this bridge will
-forward (once decoded and transformed into raw audio) 1,2,3 immediately using
-HTTP but when it receives 6, it will re-ask for 4 and 5 to be resent and
-hold 6 while waiting (if 6 was transmitted immediately, the Chromecast
-will play 1,2,3,6 ... not nice).
-
-The `latency_rtp` option sets for how long frame 6 shall be held before adding
-two silence frames for 4 and 5 and send sending 4,5,6. Obviously, if this delay
-is larger than the buffer in the Chromecast player, playback will stop by
-lack of audio. Note that `latency_rtp` does not delay playback start.
-
-> **Note**: `latency_rtp` and `latency_http` could have been merged into a
-> single `latency` parameter which would have set the max RTP frames holding time
-> as well as the duration of the initial additional silence (delay),
-> however, all Chromecast devices do properly their own buffering of HTTP audio
-> (i.e., they wait until they have received a certain amount of audio before
-> starting to play), then adding silence would have introduced an extra
-> unnecessary delay in playback.
-
-## Tweaking Aircast
-
-Aircast creates a configuration file called `aircast.xml` in your Home
-Assistant configuration directory. This file allows you to tweak each device
-separately. Every time it finds a new device, it will be added to that file.
-
-> **NOTE**: It is HIGHLY recommended to stop the addon before making changes
-> to the configuration file manually.
-
-## Known issues and limitations
-
-- This add-on does support ARM-based devices, nevertheless, they must
- at least be an ARMv7 device. (Raspberry Pi 1 and Zero is not supported).
-- The configuration file of AirConnect (used by this add-on) is not
- exposed to the user. We plan on adding that feature in a future release.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2017-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-aircast/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[docs]: https://github.com/hassio-addons/addon-aircast/blob/main/aircast/DOCS.md
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-aircast/36742?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-aircast/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-aircast/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/aircast/README.md b/aircast/README.md
deleted file mode 100644
index 09af32c..0000000
--- a/aircast/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Home Assistant Community Add-on: AirCast
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-AirPlay capabilities for your Chromecast players.
-
-## About
-
-Apple devices use AirPlay to send audio to other devices, but this is not
-compatible with Google's Chromecast. This add-on tries to solve this
-compatibility gap.
-
-It detects Chromecast players in your network and creates virtual AirPlay
-devices for each of them. It acts as a bridge between the AirPlay client
-and the real Chromecast player.
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-aircast/36742?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
-[release-shield]: https://img.shields.io/badge/version-v3.1.1-blue.svg
-[release]: https://github.com/hassio-addons/addon-aircast/tree/v3.1.1
\ No newline at end of file
diff --git a/aircast/config.json b/aircast/config.json
deleted file mode 100644
index ce03f9a..0000000
--- a/aircast/config.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "AirCast",
- "version": "3.1.1",
- "slug": "aircast",
- "description": "AirPlay capabilities for your Chromecast devices.",
- "url": "https://github.com/hassio-addons/addon-aircast",
- "startup": "services",
- "init": false,
- "arch": [
- "aarch64",
- "amd64",
- "armv7",
- "i386"
- ],
- "hassio_api": true,
- "host_network": true,
- "map": [
- "config:rw"
- ],
- "options": {
- "latency_rtp": 0,
- "latency_http": 0,
- "drift": false
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "address": "str?",
- "latency_rtp": "int",
- "latency_http": "int",
- "drift": "bool"
- },
- "image": "ghcr.io/hassio-addons/aircast/{arch}"
-}
\ No newline at end of file
diff --git a/aircast/icon.png b/aircast/icon.png
deleted file mode 100644
index 6934a2c..0000000
Binary files a/aircast/icon.png and /dev/null differ
diff --git a/aircast/logo.png b/aircast/logo.png
deleted file mode 100644
index 4733d11..0000000
Binary files a/aircast/logo.png and /dev/null differ
diff --git a/aircast/translations/en.yaml b/aircast/translations/en.yaml
deleted file mode 100644
index 840f072..0000000
--- a/aircast/translations/en.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
----
-configuration:
- log_level:
- name: Log level
- description: >-
- Controls the level of log details the add-on provides.
- address:
- name: Address
- description: >-
- Allows you to specify the IP address the AirCast server needs to
- bind to.
- latency_rtp:
- name: RTP Latency
- description: >-
- Allows you to tweak the buffering, which is needed when the audio is
- stuttering (e.g., low-quality network). This option specifies the number
- of ms the add-on has to buffer the RTP audio (AirPlay). Setting this value
- below 500ms is not recommended! Setting the value to 0 makes the add-on
- to get the value from AirPlay.
- latency_http:
- name: HTTP Latency
- description: >-
- Allows you to tweak the buffering, which is needed when the audio is
- stuttering (e.g., low-quality network). This option specifies the number
- of ms the add-on has to buffer the HTTP audio.
- drift:
- name: Drift
- description: >-
- Allow to let timing reference drift (no click).
diff --git a/airsonos/CHANGELOG.md b/airsonos/CHANGELOG.md
deleted file mode 100644
index 664a828..0000000
--- a/airsonos/CHANGELOG.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#58)
-- ⬆️ Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#59)
-- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#60)
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#61)
-- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#62)
-- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#63)
-- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#65)
-- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#64)
-- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2 @dependabot (#66)
-- ⬆️ Upgrades add-on base image to v4.2.1 @frenck (#70)
-- ⬆️ Upgrades AirConnect to 0.2.50.5 @frenck (#71)
diff --git a/airsonos/DOCS.md b/airsonos/DOCS.md
deleted file mode 100644
index 6462cc0..0000000
--- a/airsonos/DOCS.md
+++ /dev/null
@@ -1,245 +0,0 @@
-# Home Assistant Community Add-on: AirSonos
-
-Apple devices use AirPlay to send audio to other devices, but this is not
-compatible with Sonos players. This add-on tries to solve this
-compatibility gap.
-
-It detects Sonos players in your network and creates virtual AirPlay
-devices for each of them. It acts as a bridge between the AirPlay client
-and the real Sonos device.
-
-Since Sonos uses UPnP, the add-on might also work for other UPnP players
-(e.g., newer Samsung televisions).
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the “AirSonos” add-on in the Supervisor add-on store
- and install it.
-1. Start the "AirSonos" add-on
-1. Check the logs of the "AirSonos" add-on to see if everything went well.
-
-After ~30 seconds you should see some log messages appear in the add-on log.
-Using your iOS/Mac/iTunes/Airfoil/other clients, you should now see new AirPlay
-devices and can try to play audio to them.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-address: 192.168.1.234
-port: 49152
-latency_rtp: 1000
-latency_http: 2000
-drift: true
-```
-
-**Note**: _This is just an example, don't copy and past it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-These log level also affects the log levels of AirSonos server.
-
-### Option: `address`
-
-This option allows you to specify the IP address the AirSonos server needs to
-bind to. It will automatically detect the interface to use when this option is
-left empty. Nevertheless, it might get detected wrong (e.g., in case you have
-multiple network interfaces).
-
-### Option: `port`
-
-The port the AirSonos server will expose itself on. The default `49152` should
-be fine in most cases. Only change this if you really have to.
-
-### Option: `latency_rtp`
-
-Allows you to tweak the buffering, which is needed when the audio is stuttering
-(e.g., low-quality network). This option specifies the number of ms the addon
-has to buffer the RTP audio (AirPlay). Setting this value below 500ms is not
-recommended!
-
-### Option: `latency_http`
-
-Allows you to tweak the buffering, which is needed when the audio is stuttering
-(e.g., low-quality network). This option specifies the number of ms the addon
-has to buffer the HTTP audio.
-
-### Option: `drift`
-
-Set to `true` to let timing reference drift (no click).
-
-## Sonos hints and limitations
-
-When a Sonos group is created, only the master of that group will appear as
-an AirPlay player and others will be removed if they were already detected.
-If the group is later split, then individual players will re-appear.
-Each detection cycle takes ~30 seconds.
-
-Volume is set for the whole group, but the same level applies to all members.
-If you need to change individual volumes, you need to use a Sonos native
-controller. **Note**: these will be overridden if the group volume is later
-changed again from an AirPlay device.
-
-## Latency options explained
-
-These bridges receive real-time "synchronous" audio from the AirPlay controller
-in the format of RTP frames and forward it to the Sonos player in an HTTP
-"asynchronous" continuous audio binary format. In other words,
-the AirPlay clients "push" the audio using RTP and the Sonos players
-"pull" the audio using an HTTP GET request.
-
-A player using HTTP to get its audio expects to receive an initial large
-portion of audio as the response to its GET and this creates a large enough
-buffer to handle most further network congestion/delays. The rest of the audio
-transmission is regulated by the player using TCP flow control. However, when
-the source is an AirPlay RTP device, there is no such significant portion of
-audio available in advance to be sent to the Player, as the audio comes to the
-bridge in real time. Every 8ms, an RTP frame is received and is immediately
-forwarded as the continuation of the HTTP body. If the Sonos player
-starts to play immediately the first received audio sample, expecting an initial
-burst to follow, then any network congestion delaying RTP audio will starve
-the player and create shuttering.
-
-The `latency_http` option allows a certain amount of silence frames to be sent
-to the Sonos player, in a burst at the beginning. Then, while this
-"artificial" silence is being played, it is possible for the bridge to build
-a buffer of RTP frames that will then hide network delays that might happen
-in further RTP frames transmission. This delays the start of the playback
-by `latency_http` ms.
-
-However, RTP frames are transmitted using UDP, which means there is no guarantee
-of delivery, so frames might be lost from time to time
-(often happens on WiFi networks). To allow detection of lost frames, they are
-numbered sequentially (1,2 ... n) so every time two received frames are not
-consecutive, the missing ones can be asked again by the AirPlay receiver.
-
-Typically, the bridge forwards immediately every RTP frame using HTTP and again,
-in HTTP, the notion of frame numbers does not exist, it is just the continuous
-binary audio. So it is not possible to send audio non-sequentially when using
-HTTP.
-
-For example, if received RTP frames are numbered 1,2,3,6, this bridge will
-forward (once decoded and transformed into raw audio) 1,2,3 immediately using
-HTTP but when it receives 6, it will re-ask for 4 and 5 to be resent and
-hold 6 while waiting (if 6 was transmitted immediately, the Sonos
-will play 1,2,3,6 ... not nice).
-
-The `latency_rtp` option sets for how long frame 6 shall be held before adding
-two silence frames for 4 and 5 and send sending 4,5,6. Obviously, if this delay
-is larger than the buffer in the Sonos player, playback will stop by
-lack of audio. Note that `latency_rtp` does not delay playback start.
-
-> **Note**: `latency_rtp` and `latency_http` could have been merged into a
-> single `latency` parameter which would have set the max RTP frames holding time
-> as well as the duration of the initial additional silence (delay),
-> however, all Sonos devices do properly their own buffering of HTTP audio
-> (i.e., they wait until they have received a certain amount of audio before
-> starting to play), then adding silence would have introduced an extra
-> unnecessary delay in playback.
-
-## Tweaking AirSonos
-
-AirSonos creates a configuration file called `airsonos.xml` in your Home
-Assistant configuration directory. This file allows you to tweak each device
-separately. Every time it finds a new device, it will be added to that file.
-
-> **NOTE**: It is HIGHLY recommended to stop the addon before making changes
-> to the configuration file manually.
-
-## Known issues and limitations
-
-- This add-on does support ARM-based devices, nevertheless, they must
- at least be an ARMv7 device. (Raspberry Pi 1 and Zero is not supported).
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2017-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[commits]: https://github.com/hassio-addons/addon-airsonos/commits/main
-[contributors]: https://github.com/hassio-addons/addon-airsonos/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-airsonos/36796?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-airsonos/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-airsonos/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/airsonos/README.md b/airsonos/README.md
deleted file mode 100644
index 318c498..0000000
--- a/airsonos/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# Home Assistant Community Add-on: AirSonos
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-AirPlay capabilities for your Sonos (and UPnP) players.
-
-## About
-
-Apple devices use AirPlay to send audio to other devices, but this is not
-compatible with Sonos players. This add-on tries to solve this
-compatibility gap.
-
-It detects Sonos players in your network and creates virtual AirPlay
-devices for each of them. It acts as a bridge between the AirPlay client
-and the real Sonos device.
-
-Since Sonos uses UPnP, the add-on might also work for other UPnP players
-(e.g., newer Samsung televisions).
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-airsonos/36796?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
-[release-shield]: https://img.shields.io/badge/version-v3.1.1-blue.svg
-[release]: https://github.com/hassio-addons/addon-airsonos/tree/v3.1.1
\ No newline at end of file
diff --git a/airsonos/config.json b/airsonos/config.json
deleted file mode 100644
index a9310fb..0000000
--- a/airsonos/config.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "AirSonos",
- "version": "3.1.1",
- "slug": "airsonos",
- "description": "AirPlay capabilities for your Sonos (and UPnP) devices.",
- "url": "https://github.com/hassio-addons/addon-airsonos",
- "startup": "services",
- "init": false,
- "arch": [
- "aarch64",
- "amd64",
- "armv7",
- "i386"
- ],
- "hassio_api": true,
- "host_network": true,
- "map": [
- "config:rw"
- ],
- "options": {
- "port": 49152,
- "latency_rtp": 1000,
- "latency_http": 2000,
- "drift": false
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "address": "str?",
- "port": "port",
- "latency_rtp": "int",
- "latency_http": "int",
- "drift": "bool"
- },
- "image": "ghcr.io/hassio-addons/airsonos/{arch}"
-}
\ No newline at end of file
diff --git a/airsonos/icon.png b/airsonos/icon.png
deleted file mode 100644
index 17241be..0000000
Binary files a/airsonos/icon.png and /dev/null differ
diff --git a/airsonos/logo.png b/airsonos/logo.png
deleted file mode 100644
index 78b48d4..0000000
Binary files a/airsonos/logo.png and /dev/null differ
diff --git a/airsonos/translations/en.yaml b/airsonos/translations/en.yaml
deleted file mode 100644
index 6eae097..0000000
--- a/airsonos/translations/en.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
----
-configuration:
- log_level:
- name: Log level
- description: >-
- Controls the level of log details the add-on provides.
- port:
- name: Port
- description: >-
- The port to run on, the default of 49152 should be good for most cases.
- address:
- name: Address
- description: >-
- Allows you to specify the IP address the AirCast server needs to
- bind to.
- latency_rtp:
- name: RTP Latency
- description: >-
- Allows you to tweak the buffering, which is needed when the audio is
- stuttering (e.g., low-quality network). This option specifies the number
- of ms the add-on has to buffer the RTP audio (AirPlay). Setting this value
- below 500ms is not recommended! Setting the value to 0 makes the add-on
- to get the value from AirPlay.
- latency_http:
- name: HTTP Latency
- description: >-
- Allows you to tweak the buffering, which is needed when the audio is
- stuttering (e.g., low-quality network). This option specifies the number
- of ms the add-on has to buffer the HTTP audio.
- drift:
- name: Drift
- description: >-
- Allow to let timing reference drift (no click).
diff --git a/apache2-minimal/CHANGELOG.md b/apache2-minimal/CHANGELOG.md
deleted file mode 100644
index 6e3743a..0000000
--- a/apache2-minimal/CHANGELOG.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Changelog
-
-## 2.1.1
-- bump hassio-addon-base to V10.0.1
-
-## 2.1.0
-- bump hassio-addon-base to V10.0.0
-
-## 2.0.3
-- Enable Apache Foreground Logging
-
-## 2.0.2
-- ability to set a username and password to access the webfiles
-
-## 2.0.0
-- Initial release of the minimal Version
diff --git a/apache2-minimal/Dockerfile b/apache2-minimal/Dockerfile
deleted file mode 100644
index 27a18fd..0000000
--- a/apache2-minimal/Dockerfile
+++ /dev/null
@@ -1,20 +0,0 @@
-ARG BUILD_FROM=ghcr.io/hassio-addons/base/amd64:10.0.1
-# hadolint ignore=DL3006
-FROM ${BUILD_FROM}
-ENV LANG C.UTF-8
-
-# Create directory for apache2 to store PID file
-RUN mkdir /run/apache2
-
-RUN apk --no-cache add apache2 libxml2-dev apache2-utils apache2-mod-wsgi apache2-ssl
-
-#Configure Logging
-RUN sed -i -r 's@Errorlog .*@Errorlog /dev/stderr@i' /etc/apache2/httpd.conf
-RUN echo "Transferlog /dev/stdout" >> /etc/apache2/httpd.conf
-
-# Copy data for add-on
-COPY run.sh /
-COPY index.html /
-RUN chmod a+x /run.sh
-RUN chmod a+x /index.html
-CMD [ "/run.sh" ]
diff --git a/apache2-minimal/README.md b/apache2-minimal/README.md
deleted file mode 100644
index 5cf35b9..0000000
--- a/apache2-minimal/README.md
+++ /dev/null
@@ -1,2 +0,0 @@
-Have a look at the README for Apache2 full Addon for more informations.
-[README](https://github.com/FaserF/hassio-addons/blob/master/apache2/README.md)
\ No newline at end of file
diff --git a/apache2-minimal/build.json b/apache2-minimal/build.json
deleted file mode 100644
index 407e3ee..0000000
--- a/apache2-minimal/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "aarch64": "ghcr.io/hassio-addons/base/aarch64:10.0.1",
- "amd64": "ghcr.io/hassio-addons/base/amd64:10.0.1",
- "armhf": "ghcr.io/hassio-addons/base/armhf:10.0.1",
- "armv7": "ghcr.io/hassio-addons/base/armv7:10.0.1",
- "i386": "ghcr.io/hassio-addons/base/i386:10.0.1"
- }
-}
diff --git a/apache2-minimal/config.json b/apache2-minimal/config.json
deleted file mode 100644
index f7af4bf..0000000
--- a/apache2-minimal/config.json
+++ /dev/null
@@ -1,42 +0,0 @@
- {
- "name": "Apache2 Minimal",
- "version": "2.1.1",
- "slug": "apache2-minimal",
- "description": "Webserver without PHP and minimal extra modules",
- "url": "https://github.com/FaserF/hassio-addons/tree/master/apache2-minimal",
- "arch": ["armhf", "armv7", "aarch64", "amd64", "i386"],
- "startup": "application",
- "boot": "auto",
- "webui": "[PROTO:ssl]://[HOST]:[PORT:80]",
- "map": ["share:rw", "media:rw", "ssl"],
- "ingress": true,
- "panel_icon": "mdi:web-box",
- "options": {
- "document_root": "/share/htdocs",
- "default_conf": "default",
- "default_ssl_conf": "default",
- "website_name":null,
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem"
- },
- "schema": {
- "document_root":"str",
- "default_conf":"str",
- "default_ssl_conf":"str",
- "website_name":"str",
- "username":"str?",
- "password":"str?",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str"
- },
- "ports": {
- "80/tcp": 80,
- "443": 443
- },
- "ports_description": {
- "80/tcp": "Web interface http",
- "443/tcp": "SSL Web interface"
- }
- }
diff --git a/apache2-minimal/icon.png b/apache2-minimal/icon.png
deleted file mode 100644
index 9aeb82a..0000000
Binary files a/apache2-minimal/icon.png and /dev/null differ
diff --git a/apache2-minimal/index.html b/apache2-minimal/index.html
deleted file mode 100644
index 1bd17b6..0000000
--- a/apache2-minimal/index.html
+++ /dev/null
@@ -1,284 +0,0 @@
-
-
-
-
-
- Apache2 FaserF Homeassistant Addon Default Page: It works
-
-
-
-
- This is the default welcome page used to test the correct
- operation of the Apache2 server after the installation of the Homeassistant Addon.
- If you can read this page, it means that the Apache HTTP server installed at
- this site is working properly. You should replace this file (located at
- /share/htdocs/index.html) before continuing to operate your HTTP server.
-
-
-
-
- If you are a normal user of this web site and don't know what this page is
- about, this probably means that the site is currently unavailable due to
- maintenance.
- If the problem persists, please contact the site's administrator.
-
-
-
-
-
- Configuration Overview
-
-
-
- The configuration system is fully documented in
- the github repository. Refer to this for the full
- documentation. Documentation can be
- found by accessing the manual.
-
-
-
-
-
-
- Reporting Problems
-
-
-
- Please use the github issues tracker tool to report bugs in the
- Apache2 Addon with Homeassistant. However, check existing
- bug reports before reporting a new bug.
-
-
- Please report bugs specific to modules (such as PHP and others)
- to respective packages, not to the web server itself.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/apache2-minimal/run.sh b/apache2-minimal/run.sh
deleted file mode 100644
index 3d48ace..0000000
--- a/apache2-minimal/run.sh
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/usr/bin/env bashio
-ssl=$(bashio::config 'ssl')
-website_name=$(bashio::config 'website_name')
-certfile=$(bashio::config 'certfile')
-keyfile=$(bashio::config 'keyfile')
-DocumentRoot=$(bashio::config 'document_root')
-phpini=$(bashio::config 'php_ini')
-username=$(bashio::config 'username')
-password=$(bashio::config 'password')
-default_conf=$(bashio::config 'default_conf')
-default_ssl_conf=$(bashio::config 'default_ssl_conf')
-webrootdocker=/var/www/localhost/htdocs/
-
-if [ $phpini = "get_file" ]; then
- cp /etc/php7/php.ini /share/apache2addon_php.ini
- echo "You have requestet a copy of the php.ini file. You will now find your copy at /share/apache2addon_php.ini"
- echo "Addon will now be stopped. Please remove the config option and change it to the name of your new config file (for example /share/php.ini)"
- exit 1
-fi
-
-rm -r $webrootdocker
-
-if [ ! -d $DocumentRoot ]; then
- echo "You haven't put your website to $DocumentRoot"
- echo "A default website will now be used"
- mkdir $webrootdocker
- cp /index.html $webrootdocker
-else
- #Create Shortcut to shared html folder
- ln -s $DocumentRoot /var/www/localhost/htdocs
-fi
-
-#Set rights to web folders and create user
-find $DocumentRoot -type d -exec chmod 771 {} \;
-if [ ! -z "$username" ] && [ ! -z "$password" ] && [ ! $username = "null" ] && [ ! $password = "null" ]; then
- adduser -S $username -G www-data
- echo "$username:$password" | chpasswd $username
- find $webrootdocker -type d -exec chown $username:www-data -R {} \;
- find $webrootdocker -type f -exec chown $username:www-data -R {} \;
-else
- echo "No username and/or password was provided. Skipping account set up."
-fi
-
-if [ $phpini != "default" ]; then
- if [ -f $phpini ]; then
- echo "Your custom php.ini at $phpini will be used."
- rm /etc/php7/php.ini
- cp $phpini /etc/php7/php.ini
- else
- echo "You have changed the php_ini variable, but the new file could not be found! Default php.ini file will be used instead."
- fi
-fi
-
-if [ $ssl = "true" ] && [ $default_conf = "default" ]; then
- echo "You have activated SSL. SSL Settings will be applied"
- if [ ! -f /ssl/$certfile ]; then
- echo "Cannot find certificate file $certfile"
- exit 1
- fi
- if [ ! -f /ssl/$keyfile ]; then
- echo "Cannot find certificate key file $keyfile"
- exit 1
- fi
- mkdir /etc/apache2/sites-enabled
- sed -i '/LoadModule rewrite_module/s/^#//g' /etc/apache2/httpd.conf
- echo "Listen 8099" >> /etc/apache2/httpd.conf
- echo "" > /etc/apache2/sites-enabled/000-default.conf
- echo "ServerName $website_name" >> /etc/apache2/sites-enabled/000-default.conf
- echo "ServerAdmin webmaster@localhost" >> /etc/apache2/sites-enabled/000-default.conf
- echo "DocumentRoot $webrootdocker" >> /etc/apache2/sites-enabled/000-default.conf
-
- echo "#Redirect http to https" >> /etc/apache2/sites-enabled/000-default.conf
- echo " RewriteEngine On" >> /etc/apache2/sites-enabled/000-default.conf
- echo " RewriteCond %{HTTPS} off" >> /etc/apache2/sites-enabled/000-default.conf
- echo " RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}" >> /etc/apache2/sites-enabled/000-default.conf
- echo "#End Redirect http to https" >> /etc/apache2/sites-enabled/000-default.conf
-
- echo " ErrorLog /var/log/error.log" >> /etc/apache2/sites-enabled/000-default.conf
- echo " #CustomLog /var/log/access.log combined" >> /etc/apache2/sites-enabled/000-default.conf
- echo "" >> /etc/apache2/sites-enabled/000-default.conf
-
- echo "" > /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "ServerName $website_name" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "ServerAdmin webmaster@localhost" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "DocumentRoot $webrootdocker" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
-
- echo " ErrorLog /var/log/error.log" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo " #CustomLog /var/log/access.log combined" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "SSLCertificateFile /ssl/$certfile" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "SSLCertificateKeyFile /ssl/$keyfile" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
-else
- echo "SSL is deactivated and/or you are using a custom config."
-fi
-if [ "$ssl" = "true" ] || [ "$default_conf" != "default" ]; then
- echo "Include /etc/apache2/sites-enabled/*.conf" >> /etc/apache2/httpd.conf
-fi
-
-sed -i -e '/AllowOverride/s/None/All/' /etc/apache2/httpd.conf
-
-if [ "$default_conf" = "get_config" ]; then
- if [ -f /etc/apache2/sites-enabled/000-default.conf ]; then
- if [ ! -d /etc/apache2/sites-enabled ]; then
- mkdir /etc/apache2/sites-enabled
- fi
- cp /etc/apache2/sites-enabled/000-default.conf /share/000-default.conf
- echo "You have requested a copy of the apache2 config. You can now find it at /share/000-default.conf ."
- fi
- if [ -f /etc/apache2/httpd.conf ]; then
- cp /etc/apache2/httpd.conf /share/httpd.conf
- echo "You have requested a copy of the apache2 config. You can now find it at /share/httpd.conf ."
- fi
- if [ "$default_ssl_conf" != "get_config" ]; then
- echo "Exiting now..."
- exit 0
- fi
-fi
-
-if [[ ! $default_conf =~ ^(default|get_config)$ ]]; then
- if [ -f $default_conf ]; then
- if [ ! -d /etc/apache2/sites-enabled ]; then
- mkdir /etc/apache2/sites-enabled
- fi
- if [ -f /etc/apache2/sites-enabled/000-default.conf ]; then
- rm /etc/apache2/sites-enabled/000-default.conf
- fi
- cp -rf $default_conf /etc/apache2/sites-enabled/000-default.conf
- echo "Your custom apache config at $default_conf will be used."
- else
- echo "Cant find your custom 000-default.conf file $default_conf - be sure you have choosen the full path. Exiting now..."
- exit 1
- fi
-fi
-
-if [ "$default_ssl_conf" = "get_config" ]; then
- if [ -f /etc/apache2/httpd.conf ]; then
- cp /etc/apache2/sites-enabled/000-default-le-ssl.conf /share/000-default-le-ssl.conf
- echo "You have requested a copy of the apache2 ssl config. You can now find it at /share/000-default-le-ssl.conf ."
- fi
- echo "Exiting now..."
- exit 0
-fi
-
-if [ "$default_ssl_conf" != "default" ]; then
- if [ -f $default_ssl_conf ]; then
- if [ ! -d /etc/apache2/sites-enabled ]; then
- mkdir /etc/apache2/sites-enabled
- fi
- if [ -f /etc/apache2/sites-enabled/000-default-le-ssl.conf ]; then
- rm /etc/apache2/sites-enabled/000-default-le-ssl.conf
- fi
- cp -rf $default_ssl_conf /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "Your custom apache config at $default_ssl_conf will be used."
- else
- echo "Cant find your custom 000-default-le-ssl.conf file $default_ssl_conf - be sure you have choosen the full path. Exiting now..."
- exit 1
- fi
-fi
-
-echo "Here is your web file architecture."
-ls -l $webrootdocker
-
-echo "Starting Apache2..."
-exec /usr/sbin/httpd -D FOREGROUND
\ No newline at end of file
diff --git a/apache2/CHANGELOG.md b/apache2/CHANGELOG.md
deleted file mode 100644
index 34b70b3..0000000
--- a/apache2/CHANGELOG.md
+++ /dev/null
@@ -1,84 +0,0 @@
-# Changelog
-
-## 2.1.1
-- bump hassio-addon-base to V10.0.1
-
-## 2.1.0
-- bump hassio-addon-base to V10.0.0
-- fixed an issue in the php7-locales which resulted in an issue while installing the addon
-
-## 2.0.4
-- add php7-ctype support
-
-## 2.0.3
-- Enable Apache Foreground Logging
-
-## 2.0.2
-- ability to set a username and password to access the webfiles
-
-## 2.0.1
-- add php7-locales support
-- add Mosquitto-PHP support
-
-## 2.0.0
-- add php7-xml support
-- this addon is now available in three variants:
-Minimal
-Minimal with MariaDB
-this "normal" version with common used PHP Modules
-
-## 1.7.2
-- fixed error: can't find custom config
-
-## 1.7.1
-- fixed error: can't find custom web root folder
-
-## 1.7.0
-- add php7-session php7-intl php7-soap php7-session php7-fileinfo support
-
-## 1.6.0
-- add php7-iconv and php7-dom support
-
-## 1.5.1
-- add option to recieve a apache2 config copy
-- fix PHP7-PDO syntax error in Dockerfile
-
-## 1.5.0
-- add PHP7-PDO package
-
-## 1.4.0
-- allow the usage of custom apache2 config files
-
-## 1.3.0
-- allow the usage of a custom php.ini file
-
-## 1.2.3
-- add /media folder as a root folder option
-
-## 1.2.2
-- hotfix update for ssl path not working
-
-## 1.2.1
-- enabled use of .htaccess files
-
-## 1.2.0
-- new option document_root -> Allowing the user to decide the document root folder
-- added default index.html if the user has no webfiles in the correct folder
-
-## 1.1.2
-- added php-mcrypt, php-zip
-- Ingress is now supported
-
-## 1.1.1
-- added mariadb-client to docker image
-
-## 1.1.0
-- New Icon
-- Prepared Ingress Support
-
-## 1.0.1
-- Fixed SSL
-- Removed MariaDB Options
-
-## 1.0.0
-- Initial release
diff --git a/apache2/Dockerfile b/apache2/Dockerfile
deleted file mode 100644
index 0d9e0e5..0000000
--- a/apache2/Dockerfile
+++ /dev/null
@@ -1,41 +0,0 @@
-ARG BUILD_FROM=ghcr.io/hassio-addons/base/amd64:10.0.1
-# hadolint ignore=DL3006
-FROM ${BUILD_FROM}
-ENV LANG C.UTF-8
-
-# Create directory for apache2 to store PID file
-RUN mkdir /run/apache2
-
-RUN apk --no-cache add apache2 php7-apache2 libxml2-dev apache2-utils apache2-mod-wsgi apache2-ssl
-RUN apk --no-cache add php7 php7-dev php7-fpm php7-mysqli php7-opcache php7-gd php7-zlib php7-curl php7-phar php7-json php7-mbstring php7-mcrypt php7-zip php7-pdo php7-pdo_mysql php7-iconv php7-dom php7-session php7-intl php7-soap php7-fileinfo php7-xml php7-ctype
-RUN apk --no-cache add mosquitto mosquitto-dev
-RUN apk --no-cache add mariadb-client
-
-#musl-locales/php7-locales
-RUN apk add --no-cache cmake make musl-dev gcc gettext-dev libintl
-RUN wget https://gitlab.com/rilian-la-te/musl-locales/-/archive/master/musl-locales-master.zip \
- && unzip musl-locales-master.zip \
- && cd musl-locales-master \
- && cmake -DLOCALE_PROFILE=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr . && make && make install \
- && cd .. && rm -r musl-locales-master
-
-#Mosquitto-PHP
-RUN wget https://github.com/mgdm/Mosquitto-PHP/archive/refs/heads/master.zip \
- && unzip master.zip \
- && cd Mosquitto-PHP-master \
- && phpize \
- && ./configure \
- && make \
- && make install \
- && cd .. && rm -r Mosquitto-PHP-master
-
-#Configure Logging
-RUN sed -i -r 's@Errorlog .*@Errorlog /dev/stderr@i' /etc/apache2/httpd.conf
-RUN echo "Transferlog /dev/stdout" >> /etc/apache2/httpd.conf
-
-# Copy data for add-on
-COPY run.sh /
-COPY index.html /
-RUN chmod a+x /run.sh
-RUN chmod a+x /index.html
-CMD [ "/run.sh" ]
diff --git a/apache2/README.md b/apache2/README.md
deleted file mode 100644
index be814a6..0000000
--- a/apache2/README.md
+++ /dev/null
@@ -1,175 +0,0 @@
-# Home Assistant Community Add-on: Apache2
-![Supports aarch64 Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield] ![Supports i386 Architecture][i386-shield]
-![Project Maintenance][maintenance-shield]
-
-Apache2 Webserver for Homeassistant OS
-
-
-
-## About
-
-The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating systems including UNIX and Windows. The goal of this project is to provide a secure, efficient and extensible server that provides HTTP services in sync with the current HTTP standards.
-The Apache HTTP Server ("httpd") was launched in 1995 and it has been the most popular web server on the Internet since April 1996. It has celebrated its 25th birthday as a project in February 2020.
-The Apache HTTP Server is a project of The Apache Software Foundation.
-
-
-## Different Versions
-
-### Full Version
-The [full Apache2 Version](https://github.com/FaserF/hassio-addons/tree/master/apache2) with MariaDB and common used PHP modules.
-This docker image comes with: apache2 php7-apache2 libxml2-dev apache2-utils apache2-mod-wsgi apache2-ssl mariadb-client
-The following php7 extensions will be installed: php7 php7-dev php7-fpm php7-mysqli php7-opcache php7-gd php7-zlib php7-curl php7-phar php7-json php7-mbstring php7-mcrypt php7-zip php7-pdo php7-pdo_mysql php7-iconv php7-dom php7-session php7-intl php7-soap php7-fileinfo php7-xml
-And it comes with php7 locales and [Mosquitto-PHP](https://github.com/mgdm/Mosquitto-PHP).
-
-### Minimal Version
-The [Minimal Version](https://github.com/FaserF/hassio-addons/tree/master/apache2-minimal) of the Apache2 Addon without MariaDB and with no PHP modules.
-This docker image comes with: apache2 libxml2-dev apache2-utils apache2-mod-wsgi apache2-ssl
-
-### Minimal Version with MariaDB
-The [Minimal Version with MariaDB and some PHP modules](https://github.com/FaserF/hassio-addons/tree/master/apache2-minimal-mariadb) of the Apache2 Addon.
-This docker image comes with: apache2 php7-apache2 libxml2-dev apache2-utils apache2-mod-wsgi apache2-ssl mariadb-client
-The following php7 extensions will be installed: php7 php7-mysqli php7-opcache php7-curl php7-json php7-mbstring php7-mcrypt php7-zip
-
-## Installation
-
-[](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2FFaserF%2Fhassio-addons)
-
-The installation of this add-on is pretty straightforward and not different in comparison to installing any other custom Home Assistant add-on.
-Just click the link above or add my repo to the hassio addons repositorys: https://github.com/FaserF/hassio-addons
-
-Put your website files to /share/htdocs
-Example File where your index.html should be: /share/htdocs/index.html
-
-If you want to integrate your website with a mariadb database. Please ensure that the MariaDB Addon is installed!
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-document_root: /media/apache2
-php_ini: /share/apache2/php.ini
-default_conf: /share/apache2/000-default.conf
-default_ssl_conf: get_file
-website_name: itdoesntmatter_as_ssl_is_set_to_false
-username: apache
-password: mySecretPassword
-ssl: false
-certfile: itdoesntmatter_as_ssl_is_set_to_false
-keyfile: itdoesntmatter_as_ssl_is_set_to_false
-```
-
-Recommended Example add-on configuration:
-
-```yaml
-document_root: /share/htdocs
-php_ini: default
-default_conf: default
-default_ssl_conf: default
-website_name: mywebsite.ddns.net
-ssl: true
-certfile: fullchain.pem
-keyfile: privkey.pem
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `document_root`
-
-This option is needed. Change it depending where your root webfolder is on your homeassistant installation.
-
-Note: it has to be somewhere in the /share or /media folder! Other folders are not visible to this addon.
-
-### Option: `php_ini`
-
-You can choose between the following options:
-
-default -> the default php7 php.ini file will be used
-
-get_file -> copies the default php7 php.ini file from the addon to /share/apache2addon_php.ini
-
-path/to/your/new/php.ini -> Please change the location depending where your custom php.ini file is, f.e.: /share/apache2/php.ini
-
-### Option: `default_conf` & `default_ssl_conf`
-
-You can choose between the following options:
-
-default -> the default apache2 addon file will be used
-
-get_config -> Get a copy of the default apache2 addon config file to your /share folder.
-
-path/to/your/new/apache2.conf -> Please change the location depending where your custom 000-default.conf / 000-default-le-ssl.conf file is, f.e.: /share/apache2/000-default.conf
-More Information: https://cwiki.apache.org/confluence/display/HTTPD/ExampleVhosts
-Please note, that I wont give any support if you are using custom apache2 config files and are recieving any apache2 errors!
-
-### Option: `website_name`
-
-This option is needed, if you enable ssl to true. If you are not using SSL put anything in here, as it doesnt matter.
-
-### Option: `username`
-
-This option is optional. Set a username to access the webfiles.
-
-### Option: `password`
-
-This option is optional. Set a password to access the webfiles.
-
-### Option: `ssl`
-
-Enables/Disables SSL (HTTPS) on the web interface. Set it `true` to enable it, `false` otherwise.
-
-If you need a self-signed certificate, have a look at my openssl addon: https://github.com/FaserF/hassio-addons/tree/master/openssl
-
-**Note**: _The files MUST be stored in `/ssl/`, which is the default_
-
-## Ingress
-
-This addon supports Homeassistant Ingress. Until now it seems only to work if you enable SSL!
-And also I am sorry, but I cant support all your websites. Basic HTML Websites will work great with ingress, the more advanced the page is, the harder it is to support ingress.
-
-## Support
-
-Got questions or problems?
-
-You can [open an issue here][issue] GitHub.
-Please keep in mind, that this software is only tested on armv7 running on a Raspberry Pi 4.
-
-## Authors & contributors
-
-The original program is from the Apache Project. For more informatios please visit this page: https://httpd.apache.org/
-The hassio addon is brought to you by [FaserF].
-
-## License
-
-MIT License
-
-Copyright (c) 2019-2021 FaserF & The Apache Project
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
-[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
-[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
-[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
-[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg
-[FaserF]: https://github.com/FaserF/
-[issue]: https://github.com/FaserF/hassio-addons/issues
\ No newline at end of file
diff --git a/apache2/build.json b/apache2/build.json
deleted file mode 100644
index 407e3ee..0000000
--- a/apache2/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "aarch64": "ghcr.io/hassio-addons/base/aarch64:10.0.1",
- "amd64": "ghcr.io/hassio-addons/base/amd64:10.0.1",
- "armhf": "ghcr.io/hassio-addons/base/armhf:10.0.1",
- "armv7": "ghcr.io/hassio-addons/base/armv7:10.0.1",
- "i386": "ghcr.io/hassio-addons/base/i386:10.0.1"
- }
-}
diff --git a/apache2/config.json b/apache2/config.json
deleted file mode 100644
index 25abb88..0000000
--- a/apache2/config.json
+++ /dev/null
@@ -1,44 +0,0 @@
- {
- "name": "Apache2",
- "version": "2.1.1",
- "slug": "apache2",
- "description": "OpenSource Webserver",
- "url": "https://github.com/FaserF/hassio-addons/tree/master/apache2",
- "arch": ["armhf", "armv7", "aarch64", "amd64", "i386"],
- "startup": "application",
- "boot": "auto",
- "webui": "[PROTO:ssl]://[HOST]:[PORT:80]",
- "map": ["share:rw", "media:rw", "ssl"],
- "ingress": true,
- "panel_icon": "mdi:web-box",
- "options": {
- "document_root": "/share/htdocs",
- "php_ini": "default",
- "default_conf": "default",
- "default_ssl_conf": "default",
- "website_name":null,
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem"
- },
- "schema": {
- "document_root":"str",
- "php_ini":"str",
- "default_conf":"str",
- "default_ssl_conf":"str",
- "website_name":"str",
- "username":"str?",
- "password":"str?",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str"
- },
- "ports": {
- "80/tcp": 80,
- "443": 443
- },
- "ports_description": {
- "80/tcp": "Web interface http",
- "443/tcp": "SSL Web interface"
- }
- }
diff --git a/apache2/icon.png b/apache2/icon.png
deleted file mode 100644
index 9aeb82a..0000000
Binary files a/apache2/icon.png and /dev/null differ
diff --git a/apache2/images/ingress.png b/apache2/images/ingress.png
deleted file mode 100644
index 5485687..0000000
Binary files a/apache2/images/ingress.png and /dev/null differ
diff --git a/apache2/index.html b/apache2/index.html
deleted file mode 100644
index 1bd17b6..0000000
--- a/apache2/index.html
+++ /dev/null
@@ -1,284 +0,0 @@
-
-
-
-
-
- Apache2 FaserF Homeassistant Addon Default Page: It works
-
-
-
-
- This is the default welcome page used to test the correct
- operation of the Apache2 server after the installation of the Homeassistant Addon.
- If you can read this page, it means that the Apache HTTP server installed at
- this site is working properly. You should replace this file (located at
- /share/htdocs/index.html) before continuing to operate your HTTP server.
-
-
-
-
- If you are a normal user of this web site and don't know what this page is
- about, this probably means that the site is currently unavailable due to
- maintenance.
- If the problem persists, please contact the site's administrator.
-
-
-
-
-
- Configuration Overview
-
-
-
- The configuration system is fully documented in
- the github repository. Refer to this for the full
- documentation. Documentation can be
- found by accessing the manual.
-
-
-
-
-
-
- Reporting Problems
-
-
-
- Please use the github issues tracker tool to report bugs in the
- Apache2 Addon with Homeassistant. However, check existing
- bug reports before reporting a new bug.
-
-
- Please report bugs specific to modules (such as PHP and others)
- to respective packages, not to the web server itself.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/apache2/run.sh b/apache2/run.sh
deleted file mode 100644
index 2df0f89..0000000
--- a/apache2/run.sh
+++ /dev/null
@@ -1,168 +0,0 @@
-#!/usr/bin/env bashio
-ssl=$(bashio::config 'ssl')
-website_name=$(bashio::config 'website_name')
-certfile=$(bashio::config 'certfile')
-keyfile=$(bashio::config 'keyfile')
-DocumentRoot=$(bashio::config 'document_root')
-phpini=$(bashio::config 'php_ini')
-username=$(bashio::config 'username')
-password=$(bashio::config 'password')
-default_conf=$(bashio::config 'default_conf')
-default_ssl_conf=$(bashio::config 'default_ssl_conf')
-webrootdocker=/var/www/localhost/htdocs/
-
-if [ $phpini = "get_file" ]; then
- cp /etc/php7/php.ini /share/apache2addon_php.ini
- echo "You have requestet a copy of the php.ini file. You will now find your copy at /share/apache2addon_php.ini"
- echo "Addon will now be stopped. Please remove the config option and change it to the name of your new config file (for example /share/php.ini)"
- exit 1
-fi
-
-rm -r $webrootdocker
-
-if [ ! -d $DocumentRoot ]; then
- echo "You haven't put your website to $DocumentRoot"
- echo "A default website will now be used"
- mkdir $webrootdocker
- cp /index.html $webrootdocker
-else
- #Create Shortcut to shared html folder
- ln -s $DocumentRoot /var/www/localhost/htdocs
-fi
-
-#Set rights to web folders and create user
-find $DocumentRoot -type d -exec chmod 771 {} \;
-if [ ! -z "$username" ] && [ ! -z "$password" ] && [ ! $username = "null" ] && [ ! $password = "null" ]; then
- adduser -S $username -G www-data
- echo "$username:$password" | chpasswd $username
- find $webrootdocker -type d -exec chown $username:www-data -R {} \;
- find $webrootdocker -type f -exec chown $username:www-data -R {} \;
-else
- echo "No username and/or password was provided. Skipping account set up."
-fi
-
-if [ $phpini != "default" ]; then
- if [ -f $phpini ]; then
- echo "Your custom php.ini at $phpini will be used."
- rm /etc/php7/php.ini
- cp $phpini /etc/php7/php.ini
- else
- echo "You have changed the php_ini variable, but the new file could not be found! Default php.ini file will be used instead."
- fi
-else
- echo "extension=mosquitto.so" >> /etc/php7/php.ini
-fi
-
-if [ $ssl = "true" ] && [ $default_conf = "default" ]; then
- echo "You have activated SSL. SSL Settings will be applied"
- if [ ! -f /ssl/$certfile ]; then
- echo "Cannot find certificate file $certfile"
- exit 1
- fi
- if [ ! -f /ssl/$keyfile ]; then
- echo "Cannot find certificate key file $keyfile"
- exit 1
- fi
- mkdir /etc/apache2/sites-enabled
- sed -i '/LoadModule rewrite_module/s/^#//g' /etc/apache2/httpd.conf
- echo "Listen 8099" >> /etc/apache2/httpd.conf
- echo "" > /etc/apache2/sites-enabled/000-default.conf
- echo "ServerName $website_name" >> /etc/apache2/sites-enabled/000-default.conf
- echo "ServerAdmin webmaster@localhost" >> /etc/apache2/sites-enabled/000-default.conf
- echo "DocumentRoot $webrootdocker" >> /etc/apache2/sites-enabled/000-default.conf
-
- echo "#Redirect http to https" >> /etc/apache2/sites-enabled/000-default.conf
- echo " RewriteEngine On" >> /etc/apache2/sites-enabled/000-default.conf
- echo " RewriteCond %{HTTPS} off" >> /etc/apache2/sites-enabled/000-default.conf
- echo " RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}" >> /etc/apache2/sites-enabled/000-default.conf
- echo "#End Redirect http to https" >> /etc/apache2/sites-enabled/000-default.conf
-
- echo " ErrorLog /var/log/error.log" >> /etc/apache2/sites-enabled/000-default.conf
- echo " #CustomLog /var/log/access.log combined" >> /etc/apache2/sites-enabled/000-default.conf
- echo "" >> /etc/apache2/sites-enabled/000-default.conf
-
- echo "" > /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "ServerName $website_name" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "ServerAdmin webmaster@localhost" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "DocumentRoot $webrootdocker" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
-
- echo " ErrorLog /var/log/error.log" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo " #CustomLog /var/log/access.log combined" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "SSLCertificateFile /ssl/$certfile" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "SSLCertificateKeyFile /ssl/$keyfile" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "" >> /etc/apache2/sites-enabled/000-default-le-ssl.conf
-else
- echo "SSL is deactivated and/or you are using a custom config."
-fi
-if [ "$ssl" = "true" ] || [ "$default_conf" != "default" ]; then
- echo "Include /etc/apache2/sites-enabled/*.conf" >> /etc/apache2/httpd.conf
-fi
-
-sed -i -e '/AllowOverride/s/None/All/' /etc/apache2/httpd.conf
-
-if [ "$default_conf" = "get_config" ]; then
- if [ -f /etc/apache2/sites-enabled/000-default.conf ]; then
- if [ ! -d /etc/apache2/sites-enabled ]; then
- mkdir /etc/apache2/sites-enabled
- fi
- cp /etc/apache2/sites-enabled/000-default.conf /share/000-default.conf
- echo "You have requested a copy of the apache2 config. You can now find it at /share/000-default.conf ."
- fi
- if [ -f /etc/apache2/httpd.conf ]; then
- cp /etc/apache2/httpd.conf /share/httpd.conf
- echo "You have requested a copy of the apache2 config. You can now find it at /share/httpd.conf ."
- fi
- if [ "$default_ssl_conf" != "get_config" ]; then
- echo "Exiting now..."
- exit 0
- fi
-fi
-
-if [[ ! $default_conf =~ ^(default|get_config)$ ]]; then
- if [ -f $default_conf ]; then
- if [ ! -d /etc/apache2/sites-enabled ]; then
- mkdir /etc/apache2/sites-enabled
- fi
- if [ -f /etc/apache2/sites-enabled/000-default.conf ]; then
- rm /etc/apache2/sites-enabled/000-default.conf
- fi
- cp -rf $default_conf /etc/apache2/sites-enabled/000-default.conf
- echo "Your custom apache config at $default_conf will be used."
- else
- echo "Cant find your custom 000-default.conf file $default_conf - be sure you have choosen the full path. Exiting now..."
- exit 1
- fi
-fi
-
-if [ "$default_ssl_conf" = "get_config" ]; then
- if [ -f /etc/apache2/httpd.conf ]; then
- cp /etc/apache2/sites-enabled/000-default-le-ssl.conf /share/000-default-le-ssl.conf
- echo "You have requested a copy of the apache2 ssl config. You can now find it at /share/000-default-le-ssl.conf ."
- fi
- echo "Exiting now..."
- exit 0
-fi
-
-if [ "$default_ssl_conf" != "default" ]; then
- if [ -f $default_ssl_conf ]; then
- if [ ! -d /etc/apache2/sites-enabled ]; then
- mkdir /etc/apache2/sites-enabled
- fi
- if [ -f /etc/apache2/sites-enabled/000-default-le-ssl.conf ]; then
- rm /etc/apache2/sites-enabled/000-default-le-ssl.conf
- fi
- cp -rf $default_ssl_conf /etc/apache2/sites-enabled/000-default-le-ssl.conf
- echo "Your custom apache config at $default_ssl_conf will be used."
- else
- echo "Cant find your custom 000-default-le-ssl.conf file $default_ssl_conf - be sure you have choosen the full path. Exiting now..."
- exit 1
- fi
-fi
-
-echo "Here is your web file architecture."
-ls -l $webrootdocker
-
-echo "Starting Apache2..."
-exec /usr/sbin/httpd -D FOREGROUND
\ No newline at end of file
diff --git a/appdaemon/CHANGELOG.md b/appdaemon/CHANGELOG.md
deleted file mode 100644
index 33b00a2..0000000
--- a/appdaemon/CHANGELOG.md
+++ /dev/null
@@ -1,11 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#122)
-- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#123)
-- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#125)
-- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#126)
-- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#124)
-- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2.2 @dependabot (#128)
-- ⬆️ Upgrades add-on base image to v9.2.2 @frenck (#130)
diff --git a/appdaemon/DOCS.md b/appdaemon/DOCS.md
deleted file mode 100644
index 818a14a..0000000
--- a/appdaemon/DOCS.md
+++ /dev/null
@@ -1,221 +0,0 @@
-# Home Assistant Community Add-on: AppDaemon 4
-
-AppDaemon is a loosely coupled, multithreaded, sandboxed python execution
-environment for writing automation apps for Home Assistant home automation
-software. It also provides a configurable dashboard (HADashboard) suitable
-for wall mounted tablets.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "AppDaemon 4" add-on in the Supervisor add-on store and
- install it.
-1. Start the "AppDaemon 4" add-on
-1. Check the logs of the "AppDaemon 4" add-on to see if everything went well.
-
-:information_source: Please note, the add-on is pre-configured to connect with
-Home Assistant. There is no need to create access tokens or to set your
-Home Assistant URL in the AppDaemon configuration.
-
-This automatic handling of the URL and token conflicts with the AppDaemon
-official documentation. The official documentation will state `ha_url` and
-`token` options are required. For the add-on, however, this isn't needed.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-system_packages:
- - ffmpeg
-python_packages:
- - PyMySQL
- - Pillow
-```
-
-**Note**: _This is just an example, don't copy and past it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-These log level also affects the log levels of the AppDaemon.
-
-### Option: `system_packages`
-
-Allows you to specify additional [Alpine packages][alpine-packages] to be
-installed to your AppDaemon setup (e.g., `g++`. `make`, `ffmpeg`).
-
-**Note**: _Adding many packages will result in a longer start-up time
-for the add-on._
-
-### Option: `python_packages`
-
-Allows you to specify additional [Python packages][python-packages] to be
-installed to your AppDaemon setup (e.g., `PyMySQL`. `Requests`, `Pillow`).
-
-**Note**: _Adding many packages will result in a longer start-up time
-for the add-on._
-
-#### Option: `init_commands`
-
-Customize your environment even more with the `init_commands` option.
-Add one or more shell commands to the list, and they will be executed every
-single time this add-on starts.
-
-## AppDaemon and HADashboard configuration
-
-This add-on does not configure the AppDaemon or HADashboard for you.
-It does, however, create some sample files to get you started on the first run.
-
-The configuration of the AppDaemon can be found in the `/config/appdaemon`
-directory.
-
-For more information about configuring AppDaemon, please refer to the
-extensive documentation they offer:
-
-
-
-## Home Assistant access tokens and ha_url settings
-
-By default, this add-on ships without a `token` and without the `ha_url`
-in the `appdaemon.yaml` config file. **This is not an error!**
-
-The add-on takes care of these settings for you and you do not need to provide
-or set these in the AppDaemon configuration.
-
-This automatic handling of the URL and token conflicts with the AppDaemon
-official documentation. The official documentation will state `ha_url` and
-`token` options are required. For the add-on, these aren't needed.
-
-However, you are free to set them if you want to override, however, in
-general usage, that should not be needed and is not recommended for this add-on.
-
-## Upgrading from AppDaemon 3.x
-
-If you have previously ran AppDaemon 3.x (e.g., via an add-on), these steps
-will help you getting upgraded to AppDaemon 4.x.
-
-- After installing this add-on, stop the current running AppDaemon 3.x add-on.
-- Open your `/config/appdaemon/appdaemon.yaml` file in an editor.
- - Remove the `log`.
- - Remove`threads`, `api_port`, `app_dir`, `ha_url` and `token`.
- - Add the following to the `appdaemon` section: `latitude`, `longitude`,
- `elevation` and `time_zone`.
- - Add a `http` section with `url: http://127.0.0.1:5050` in it.
- - At the end of the file add `admin:` and `api:`.
- - Remove everthing under `hadashboard:`, leaving just that.
-
-The result should look something like this:
-
-```yaml
----
-secrets: /config/secrets.yaml
-appdaemon:
- latitude: 52.379189
- longitude: 4.899431
- elevation: 2
- time_zone: Europe/Amsterdam
- plugins:
- HASS:
- type: hass
-http:
- url: http://127.0.0.1:5050
-hadashboard:
-admin:
-api:
-```
-
-Be sure to check the "Upgrading from 3.x" on the AppDaemon website:
-
-
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[alpine-packages]: https://pkgs.alpinelinux.org/packages
-[contributors]: https://github.com/hassio-addons/addon-appdaemon/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-appdaemon-4/163259?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-appdaemon/issues
-[python-packages]: https://pypi.org/
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-appdaemon/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/appdaemon/README.md b/appdaemon/README.md
deleted file mode 100644
index 7d642fe..0000000
--- a/appdaemon/README.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Home Assistant Community Add-on: AppDaemon 4
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Python Apps and HADashboard for Home Assistant
-
-## About
-
-AppDaemon is a loosely coupled, multithreaded, sandboxed python execution
-environment for writing automation apps for Home Assistant home automation
-software. It also provides a configurable dashboard (HADashboard) suitable
-for wall mounted tablets.
-
-![HADashboard screenshot][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-appdaemon-4/163259?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.6.2-blue.svg
-[release]: https://github.com/hassio-addons/addon-appdaemon/tree/v0.6.2
-[screenshot]: https://github.com/hassio-addons/addon-appdaemon/raw/main/images/screenshot.png
\ No newline at end of file
diff --git a/appdaemon/config.json b/appdaemon/config.json
deleted file mode 100644
index 80f4532..0000000
--- a/appdaemon/config.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "AppDaemon 4",
- "version": "0.6.2",
- "slug": "appdaemon",
- "description": "Python Apps and Dashboard using AppDaemon 4.x for Home Assistant",
- "url": "https://github.com/hassio-addons/addon-appdaemon",
- "webui": "http://[HOST]:[PORT:5050]",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "init": false,
- "homeassistant_api": true,
- "uart": true,
- "ports": {
- "5050/tcp": 5050
- },
- "ports_description": {
- "5050/tcp": "AppDaemon"
- },
- "map": [
- "config:rw",
- "share:rw",
- "ssl"
- ],
- "options": {
- "system_packages": [],
- "python_packages": [],
- "init_commands": []
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "system_packages": [
- "str"
- ],
- "python_packages": [
- "str"
- ],
- "init_commands": [
- "str"
- ]
- },
- "image": "ghcr.io/hassio-addons/appdaemon/{arch}"
-}
\ No newline at end of file
diff --git a/appdaemon/icon.png b/appdaemon/icon.png
deleted file mode 100644
index 9bce174..0000000
Binary files a/appdaemon/icon.png and /dev/null differ
diff --git a/appdaemon/logo.png b/appdaemon/logo.png
deleted file mode 100644
index a1ccf2c..0000000
Binary files a/appdaemon/logo.png and /dev/null differ
diff --git a/appdaemon/translations/de.yaml b/appdaemon/translations/de.yaml
deleted file mode 100644
index 240b0b9..0000000
--- a/appdaemon/translations/de.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-configuration:
- init_commands:
- description: 'Allows you to specificy a list of custom shell commands that are ran before AppDaemon starts.'
- name: 'Init commands'
- log_level:
- description: 'Controls the level of log details the add-on provides.'
- name: 'Log level'
- python_packages:
- description: 'Allows you to specificy a list of additional Python packages to be installed before AppDaemon starts.'
- name: 'Python packages'
- system_packages:
- description: 'Allows you to specificy a list of additional Alpine Linux packages to be installed before AppDaemon starts.'
- name: 'System packages'
-network:
- 5050/tcp: 'The AppDaemon webserver'
diff --git a/appdaemon/translations/en.yaml b/appdaemon/translations/en.yaml
deleted file mode 100644
index 52de59a..0000000
--- a/appdaemon/translations/en.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
----
-configuration:
- log_level:
- name: Log level
- description: >-
- Controls the level of log details the add-on provides.
- system_packages:
- name: System packages
- description: >-
- Allows you to specificy a list of additional Alpine Linux packages to be
- installed before AppDaemon starts.
- python_packages:
- name: Python packages
- description: >-
- Allows you to specificy a list of additional Python packages to be
- installed before AppDaemon starts.
- init_commands:
- name: Init commands
- description: >-
- Allows you to specificy a list of custom shell commands that are ran
- before AppDaemon starts.
-network:
- 5050/tcp: The AppDaemon webserver
diff --git a/appdaemon/translations/nl.yaml b/appdaemon/translations/nl.yaml
deleted file mode 100644
index b0aa8ca..0000000
--- a/appdaemon/translations/nl.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-configuration:
- init_commands:
- description: 'Allows you to specificy a list of custom shell commands that are ran before AppDaemon starts.'
- name: 'Init commands'
- log_level:
- description: 'Bepaalt het niveau van de logs die de add-on toont.'
- name: 'Log niveau'
- python_packages:
- description: 'Allows you to specificy a list of additional Python packages to be installed before AppDaemon starts.'
- name: 'Python packages'
- system_packages:
- description: 'Allows you to specificy a list of additional Alpine Linux packages to be installed before AppDaemon starts.'
- name: 'System packages'
-network:
- 5050/tcp: 'De AppDaemon webserver'
diff --git a/asterisk/CHANGELOG.md b/asterisk/CHANGELOG.md
deleted file mode 100644
index 1bbfee3..0000000
--- a/asterisk/CHANGELOG.md
+++ /dev/null
@@ -1,3 +0,0 @@
-## 1.0.0 - 2021-05-09
-
-* ➕ Add Asterisk server `0.20.21`
diff --git a/asterisk/DOCS.md b/asterisk/DOCS.md
deleted file mode 100644
index 284bfc0..0000000
--- a/asterisk/DOCS.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Configuration
-
-```yaml
-config_files:
- - /config/asterisk/sip.conf
-```
-
-### `config_files`
-
-A list of paths to your configuration files of asterisk.
-Every listed file will overwrite the template config file at `/etc/asterisk` on each addon start.
-The config files can be located on `/config` or`/share`.
-
-For the sample files take a look at the [official asterisk repository](https://github.com/asterisk/asterisk/blob/master/configs/samples).
-
-## Testing
-
-As default there is a test sip phone setup. With user `1001` and password `1234` the number `100` can be called.
-A sound should confirm the working state.
diff --git a/asterisk/Dockerfile b/asterisk/Dockerfile
deleted file mode 100644
index f6b1b7a..0000000
--- a/asterisk/Dockerfile
+++ /dev/null
@@ -1,10 +0,0 @@
-ARG BUILD_FROM
-FROM $BUILD_FROM
-
-RUN apk add --no-cache \
- asterisk=18.2.1-r1 \
- asterisk-sample-config=18.2.1-r1
-
-ENTRYPOINT [ "/init" ]
-CMD []
-COPY root /
diff --git a/asterisk/README.md b/asterisk/README.md
deleted file mode 100644
index d389cd6..0000000
--- a/asterisk/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Asterisk
-
-[Asterisk](https://www.asterisk.org/) is an open source framework for building communications applications. Asterisk turns an ordinary computer into a communications server.
-
-![Addon Stage][stage-badge]
-![Supports aarch64 Architecture][aarch64-badge]
-![Supports amd64 Architecture][amd64-badge]
-![Supports armhf Architecture][armhf-badge]
-![Supports armv7 Architecture][armv7-badge]
-![Supports i386 Architecture][i386-badge]
-
-[![Install on my Home Assistant][install-badge]][install-url]
-[![Donate][donation-badge]][donation-url]
-
-
-[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
-[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
-[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
-[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
-[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
-[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_asterisk
-[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
-
-[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
-[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
-[donation-url]: https://www.buymeacoffee.com/Poeschl
diff --git a/asterisk/build.json b/asterisk/build.json
deleted file mode 100644
index 4ceab93..0000000
--- a/asterisk/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "armhf": "ghcr.io/home-assistant/armhf-base:3.13",
- "armv7": "ghcr.io/home-assistant/armv7-base:3.13",
- "aarch64": "ghcr.io/home-assistant/aarch64-base:3.13",
- "amd64": "ghcr.io/home-assistant/amd64-base:3.13",
- "i386": "ghcr.io/home-assistant/i386-base:3.13"
- }
-}
diff --git a/asterisk/config.json b/asterisk/config.json
deleted file mode 100644
index 9020631..0000000
--- a/asterisk/config.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "Asterisk",
- "version": "1.0.0",
- "slug": "asterisk",
- "description": "Asterisk is an open source framework for building communications applications. Asterisk turns an ordinary computer into a communications server",
- "url": "https://github.com/Poeschl/Hassio-Addons/tree/master/asterisk",
- "arch": [
- "armv7",
- "armhf",
- "aarch64",
- "amd64",
- "i386"
- ],
- "startup": "application",
- "boot": "auto",
- "image": "ghcr.io/poeschl/ha-asterisk-{arch}",
- "map": ["share","config"],
- "ports": {
- "5060/tcp": 5060,
- "5060/udp": 5060,
- "4569/udp": 4569,
- "2727/udp": 2727
- },
- "ports_description": {
- "5060/tcp": "Port for SIP",
- "5060/udp": "Port for SIP",
- "4569/udp": "Port for IAX2",
- "2727/udp": "Port for MGCP"
- },
- "options": {
- "config_files": []
- },
- "schema": {
- "config_files": ["match(/(share|config)/.+)"]
- }
-}
diff --git a/asterisk/icon.png b/asterisk/icon.png
deleted file mode 100755
index 531747f..0000000
Binary files a/asterisk/icon.png and /dev/null differ
diff --git a/asterisk/logo.png b/asterisk/logo.png
deleted file mode 100755
index d942e4c..0000000
Binary files a/asterisk/logo.png and /dev/null differ
diff --git a/asterisk/root/etc/asterisk/asterisk.conf b/asterisk/root/etc/asterisk/asterisk.conf
deleted file mode 100644
index 02c9678..0000000
--- a/asterisk/root/etc/asterisk/asterisk.conf
+++ /dev/null
@@ -1,13 +0,0 @@
-[directories]
-astcachedir => /var/cache/asterisk
-astetcdir => /etc/asterisk
-astmoddir => /usr/lib/asterisk/modules
-astvarlibdir => /var/lib/asterisk
-astdbdir => /var/lib/asterisk
-astkeydir => /var/lib/asterisk
-astdatadir => /var/lib/asterisk
-astagidir => /var/lib/asterisk/agi-bin
-astspooldir => /var/spool/asterisk
-astrundir => /var/run/asterisk
-astlogdir => /var/log/asterisk
-astsbindir => /usr/sbin
\ No newline at end of file
diff --git a/asterisk/root/etc/asterisk/extensions.conf b/asterisk/root/etc/asterisk/extensions.conf
deleted file mode 100644
index 9bfdd49..0000000
--- a/asterisk/root/etc/asterisk/extensions.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-[internal]
-exten = 100,1,Answer()
-same = n,Wait(1)
-same = n,Playback(test)
-same = n,Hangup()
\ No newline at end of file
diff --git a/asterisk/root/etc/asterisk/modules.conf b/asterisk/root/etc/asterisk/modules.conf
deleted file mode 100644
index f531ba1..0000000
--- a/asterisk/root/etc/asterisk/modules.conf
+++ /dev/null
@@ -1,56 +0,0 @@
-;
-; Asterisk configuration file
-;
-; Module Loader configuration file
-;
-
-[modules]
-autoload=yes
-;
-; Any modules that need to be loaded before the Asterisk core has been
-; initialized (just after the logger initialization) can be loaded
-; using 'preload'. 'preload' forces a module and the modules it
-; is known to depend upon to be loaded earlier than they normally get
-; loaded.
-;
-; NOTE: There is no good reason left to use 'preload' anymore. It was
-; historically required to preload realtime driver modules so you could
-; map Asterisk core configuration files to Realtime storage.
-; This is no longer needed.
-;
-;preload = your_special_module.so
-;
-; If you want Asterisk to fail if a module does not load, then use
-; the "require" keyword. Asterisk will exit with a status code of 2
-; if a required module does not load.
-;
-;require = chan_pjsip.so
-;
-; If you want you can combine with preload
-; preload-require = your_special_module.so
-;
-;load = res_musiconhold.so
-;
-; Load one of: chan_oss, alsa, or console (portaudio).
-; By default, load chan_oss only (automatically).
-;
-noload = chan_alsa.so
-noload = chan_console.so
-;noload = chan_oss.so
-;
-; Do not load res_hep and kin unless you are using HEP monitoring
-; in your network.
-;
-noload = res_hep.so
-noload = res_hep_pjsip.so
-noload = res_hep_rtcp.so
-;
-; Do not load chan_sip by default, it may conflict with res_pjsip.
-noload = chan_sip.so
-;
-; Load one of the voicemail modules as they are mutually exclusive.
-; By default, load app_voicemail only (automatically).
-;
-;noload = app_voicemail.so
-noload = app_voicemail_imap.so
-noload = app_voicemail_odbc.so
\ No newline at end of file
diff --git a/asterisk/root/etc/asterisk/pjsip.conf b/asterisk/root/etc/asterisk/pjsip.conf
deleted file mode 100644
index 2bec951..0000000
--- a/asterisk/root/etc/asterisk/pjsip.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-[general]
-type=transport
-protocol=udp
-bind=0.0.0.0
-
-[1001]
-type = endpoint
-context = internal
-disallow=all
-allow=ulaw
-aors = 1001
-auth = auth1001
-
-[1001]
-type = aor
-max_contacts = 1
-
-[auth1001]
-type=auth
-auth_type=userpass
-password=1234
-username=1001
\ No newline at end of file
diff --git a/asterisk/root/etc/cont-init.d/setup-config-files.sh b/asterisk/root/etc/cont-init.d/setup-config-files.sh
deleted file mode 100644
index 4ea909c..0000000
--- a/asterisk/root/etc/cont-init.d/setup-config-files.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-#!/usr/bin/with-contenv bashio
-# shellcheck shell=bash
-set -e
-
-CONFIG_FILES=$(bashio::config 'config_files')
-
-for config in $CONFIG_FILES; do
- bashio::log.info "Apply '$config'"
- cp "$config" '/etc/asterisk/'
-done
-
-chown -R asterisk:asterisk /etc/asterisk
-chmod 640 -R /etc/asterisk
diff --git a/asterisk/root/etc/fix-attrs.d/sample-sound b/asterisk/root/etc/fix-attrs.d/sample-sound
deleted file mode 100644
index 92259ce..0000000
--- a/asterisk/root/etc/fix-attrs.d/sample-sound
+++ /dev/null
@@ -1 +0,0 @@
-/var/lib/asterisk/sounds/test.wav false asterisk:asterisk 0640 0640
\ No newline at end of file
diff --git a/asterisk/root/etc/services.d/asterisk/run b/asterisk/root/etc/services.d/asterisk/run
deleted file mode 100644
index 0d1a478..0000000
--- a/asterisk/root/etc/services.d/asterisk/run
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-# Enable Jemalloc for better memory handling
-export LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
-
-bashio::log.info 'Start Asterisk'
-asterisk -T -W -p -f -dd
diff --git a/bash_script_executer/CHANGELOG.md b/bash_script_executer/CHANGELOG.md
deleted file mode 100644
index 705fb7b..0000000
--- a/bash_script_executer/CHANGELOG.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Changelog
-
-## 1.2.1
-- bump hassio-addon-base to V10.0.1
-
-## 1.2.0
-- bump hassio-addon-base to V10.0.0
-
-## 1.1.1
-- Added the option to submit up to three arguments to the scripts
-
-## 1.1.0
-- Added the option to submit up to two arguments to the scripts
-
-## 1.0.0
-- Initial release
diff --git a/bash_script_executer/Dockerfile b/bash_script_executer/Dockerfile
deleted file mode 100644
index bed6f1a..0000000
--- a/bash_script_executer/Dockerfile
+++ /dev/null
@@ -1,14 +0,0 @@
-ARG BUILD_FROM=ghcr.io/hassio-addons/base/amd64:10.0.1
-# hadolint ignore=DL3006
-FROM ${BUILD_FROM}
-ENV LANG C.UTF-8
-
-# Create directory for apache2 to store PID file
-RUN mkdir /run/apache2
-
-RUN apk --no-cache add busybox-extras curl grep coreutils sed xmlstarlet bash
-
-# Copy data for add-on
-COPY run.sh /
-RUN chmod a+x /run.sh
-CMD [ "/run.sh" ]
diff --git a/bash_script_executer/README.md b/bash_script_executer/README.md
deleted file mode 100644
index cc2768e..0000000
--- a/bash_script_executer/README.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# Home Assistant Community Add-on: Bash Script Executer
-![Supports aarch64 Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield] ![Supports i386 Architecture][i386-shield]
-![Project Maintenance][maintenance-shield]
-
-Bash Script Executer for Homeassistant OS
-
-## About
-
-This is a simple Docker Image to execute personal scripts. The reason I am needing this, is that the HA OS has limited features installed (for example no curl, sed etc) and this Addon fixes that issue.
-You can run up to three different scripts with this addon.
-This docker image comes with: busybox-extras curl grep coreutils sed xmlstarlet
-
-## Installation
-
-[](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2FFaserF%2Fhassio-addons)
-
-The installation of this add-on is pretty straightforward and not different in comparison to installing any other custom Home Assistant add-on.
-Just click the link above or add my repo to the hassio addons repositorys: https://github.com/FaserF/hassio-addons
-
-Put your scripts somewhere in the /share/ folder. Other folders are not visible to this addon.
-Example File where your script could be: /share/scripts/script.sh
-
-## Configuration
-
-**I am recommending to disable "Start on boot" and the Watchdog option from HA for this addon!**
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-script_path: /share/scripts/script.sh
-script_argument1: myFirstArgument
-script_argument2: AnotherVariable
-script_argument3: AnotherVariable
-script_path2: false
-script2_argument1:
-script2_argument2:
-script2_argument3:
-script_path3: false
-script3_argument2:
-script3_argument2:
-script3_argument3:
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `script_path`
-
-This option is needed. Change it depending where your script is or change it to "false" to leave it empty.
-
-### Option: `scriptX_argumentX`
-
-This option is optional. You can submit up to three arguments to your script with this option.
-
-### Option: `script_path2`
-
-This option is needed. Change it depending where your script is or change it to "false" to leave it empty.
-
-### Option: `script_path3`
-
-This option is needed. Change it depending where your script is or change it to "false" to leave it empty.
-
-## Cron Support - running scripts by time
-
-I havent implemented Cron in this addon, as you can run your scripts periodically by an Homeassistant automation.
-Example Automation:
-
-```yaml
- - alias: "Run Bash Script with Addon Bash Script Executer"
- trigger:
- - platform: time
- at: '00:02:00'
- - platform: time_pattern
- minutes: '/90'
- seconds: 0
- action:
- - service: hassio.addon_start
- data:
- addon: 605cee21_bashscriptexecuter
-```
-
-## Support
-
-Got questions or problems?
-
-You can [open an issue here][issue] GitHub.
-Please keep in mind, that this software is only tested on armv7 running on a Raspberry Pi 4. And that I have made this addon for my personal scripts.
-
-## Authors & contributors
-
-The hassio addon is brought to you by [FaserF].
-
-## License
-
-MIT License
-
-Copyright (c) 2021 FaserF
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
-[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
-[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
-[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
-[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg
-[FaserF]: https://github.com/FaserF/
-[issue]: https://github.com/FaserF/hassio-addons/issues
-[repository]: https://github.com/FaserF/hassio-addons/bash_script_executer
diff --git a/bash_script_executer/build.json b/bash_script_executer/build.json
deleted file mode 100644
index 407e3ee..0000000
--- a/bash_script_executer/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "aarch64": "ghcr.io/hassio-addons/base/aarch64:10.0.1",
- "amd64": "ghcr.io/hassio-addons/base/amd64:10.0.1",
- "armhf": "ghcr.io/hassio-addons/base/armhf:10.0.1",
- "armv7": "ghcr.io/hassio-addons/base/armv7:10.0.1",
- "i386": "ghcr.io/hassio-addons/base/i386:10.0.1"
- }
-}
diff --git a/bash_script_executer/config.json b/bash_script_executer/config.json
deleted file mode 100644
index 83bdf1c..0000000
--- a/bash_script_executer/config.json
+++ /dev/null
@@ -1,31 +0,0 @@
- {
- "name": "Bash Script Executer",
- "version": "1.2.1",
- "slug": "bashscriptexecuter",
- "description": "Execute your own bash scripts via Docker Container",
- "url": "https://github.com/FaserF/hassio-addons/tree/master/bash_script_executer",
- "arch": ["armhf", "armv7", "aarch64", "amd64", "i386"],
- "startup": "application",
- "boot": "auto",
- "map": ["share:rw"],
- "panel_icon": "mdi:web-box",
- "options": {
- "script_path": "/share/scripts/mycoolscript.sh",
- "script_path2": "false",
- "script_path3": "false"
- },
- "schema": {
- "script_path":"str",
- "script_argument1":"str?",
- "script_argument2":"str?",
- "script_argument3":"str?",
- "script_path2":"str",
- "script2_argument1":"str?",
- "script2_argument2":"str?",
- "script2_argument3":"str?",
- "script_path3":"str",
- "script3_argument1":"str?",
- "script3_argument2":"str?",
- "script3_argument3":"str?"
- }
- }
diff --git a/bash_script_executer/icon.png b/bash_script_executer/icon.png
deleted file mode 100644
index 93e5d72..0000000
Binary files a/bash_script_executer/icon.png and /dev/null differ
diff --git a/bash_script_executer/run.sh b/bash_script_executer/run.sh
deleted file mode 100644
index e7a4653..0000000
--- a/bash_script_executer/run.sh
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env bashio
-script_path=$(bashio::config 'script_path')
-script_argument1=$(bashio::config 'script_argument1')
-script_argument2=$(bashio::config 'script_argument2')
-script_argument3=$(bashio::config 'script_argument3')
-script_path2=$(bashio::config 'script_path2')
-script2_argument1=$(bashio::config 'script2_argument1')
-script2_argument2=$(bashio::config 'script2_argument2')
-script2_argument3=$(bashio::config 'script2_argument3')
-script_path3=$(bashio::config 'script_path3')
-script3_argument1=$(bashio::config 'script3_argument1')
-script3_argument2=$(bashio::config 'script3_argument2')
-script3_argument3=$(bashio::config 'script3_argument3')
-
-if [ $script_path != "false" ]; then
- if [ ! -f $script_path ]; then
- echo "Cant find your first script at $script_path"
- echo "Exiting now..."
- exit 1
- fi
-fi
-
-if [ $script_path2 != "false" ]; then
- if [ ! -f $script_path2 ]; then
- echo "Cant find your second script at $script_path2"
- echo "Exiting now..."
- exit 1
- fi
-fi
-
-if [ $script_path3 != "false" ]; then
- if [ ! -f $script_path3 ]; then
- echo "Cant find your third script at $script_path3"
- echo "Exiting now..."
- exit 1
- fi
-fi
-
-#Set 711 rights to script
-echo "Fixing permissions."
-if [ $script_path != "false" ]; then
- find $script_path -type d -exec chmod 711 {} \;
-fi
-if [ $script_path2 != "false" ]; then
- find $script_path2 -type d -exec chmod 711 {} \;
-fi
-if [ $script_path3 != "false" ]; then
- find $script_path3 -type d -exec chmod 711 {} \;
-fi
-
-if [ $script_path != "false" ]; then
- 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..."
- echo "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#"
- bash $script_path $script_argument1 $script_argument2 $script_argument3
-fi
-
-if [ $script_path2 != "false" ]; then
- 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..."
- echo "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#"
- bash $script_path2 $script2_argument2 $script2_argument3
-fi
-
-if [ $script_path3 != "false" ]; then
- 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..."
- echo "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#"
- bash $script_path3 $script3_argument1 $script3_argument2 $script3_argument3
-fi
-
-echo "-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#"
-echo "All Scripts were executed. Stopping container..."
\ No newline at end of file
diff --git a/build-site.sh b/build-site.sh
deleted file mode 100755
index 3440c6b..0000000
--- a/build-site.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env bash
-# ==============================================================================
-# Community Hass.io Add-ons for Home Assistant
-# This script builds a small little website
-# ==============================================================================
-set -o errexit # Exit script when a command exits with non-zero status
-set -o errtrace # Exit on error inside any functions or sub-shells
-set -o nounset # Exit script on use of an undefined variable
-set -o pipefail # Return exit status of the last command in the pipe that failed
-
-# Switch to the root of the repository.
-cd "$(dirname "$(dirname "${BASH_SOURCE[0]}")")"
-
-# Create a documentation folder
-mkdir -p docs
-
-# Install requirements
-pip install -r requirements.txt
-
-# Download Beta page
-curl https://raw.githubusercontent.com/hassio-addons/repository-beta/master/README.md --output docs/beta.md
-
-# Download Edge page
-curl https://raw.githubusercontent.com/hassio-addons/repository-edge/master/README.md --output docs/edge.md
-
-# Get the pages into the docs folder
-ln -sf ../README.md docs/index.md
-ln -sf ../LICENSE.md docs/license.md
-ln -sf ../.github/CONTRIBUTING.md docs/contributing.md
-ln -sf ../.github/CODE_OF_CONDUCT.md docs/code-of-conduct.md
-
-# Build!
-mkdocs build
diff --git a/chrony/CHANGELOG.md b/chrony/CHANGELOG.md
deleted file mode 100644
index f80e5ac..0000000
--- a/chrony/CHANGELOG.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#61)
-- Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#62)
-- Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#63)
-- Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#64)
-- Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#65)
-- Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#67)
-- Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#66)
-- Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#68)
-- Bump frenck/action-addon-information from 1.1 to 1.2.2 @dependabot (#70)
-- ⬆️ Upgrades add-on base image to v9.2.2 @frenck (#72)
-- ⬆ Update base image to v10.0.0 and chrony to v4.1-r0 @sinclairpaul (#73)
diff --git a/chrony/DOCS.md b/chrony/DOCS.md
deleted file mode 100644
index d16182a..0000000
--- a/chrony/DOCS.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Home Assistant Community Add-on: chrony
-
-An NTP server accessible by all hosts on the local network, useful for setting
-time on devices with controlled internet access (such as cameras).
-The addon can also be used to set the system clock.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "chrony" add-on in the add-on store and install it.
-1. Start the "chrony" add-on
-1. Check the logs of the "chrony" add-on to see if everything went well.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-set_system_clock: true
-mode: pool
-ntp_pool: pool.ntp.org
-ntp_server:
- - 54.39.13.155
- - briareus.schulte.org
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `set_system_clock`
-
-The `set_system_clock` option configures chrony to set the local system clock.
-For some systems it may be preferable to use a different mechanism for
-setting the system time.
-
-### Option: `mode`
-
-The `mode` option configures chrony to use either `pool` or `server` mode.
-These options are:
-
-- `pool`: References a pool of servers such as pool.ntp.org (Recommended).
-- `server`: References a list of specific names or addresses.
-
-Based on the mode the `ntp_pool` or `ntp_server` option will be used.
-
-### Option: `ntp_pool`
-
-Used by pool mode and configures the pool name to be used, should be a DNS
-record with multiple entries. The application will select which to reference.
-
-### Option: `ntp_server`
-
-Used by server mode, an array of server names or IP Addresses used as the
-time source. The application will select which to reference.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Paul Sinclair][sinclairpaul].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2019-2021 Paul Sinclair
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-chrony/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/community-hass-io-xxxxx/xxxxx
-[sinclairpaul]: https://github.com/sinclairpaul
-[issue]: https://github.com/hassio-addons/addon-chrony/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-chrony/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/chrony/README.md b/chrony/README.md
deleted file mode 100644
index 807ba12..0000000
--- a/chrony/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Home Assistant Community Add-on: chrony
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]
-
-chrony NTP Server.
-
-## About
-
-An NTP server accesible by all hosts on the local network, useful for setting
-time on devices with controlled internet access (such as cameras).
-
-[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/guidelines/download-assets-sm-2.svg
-[buymeacoffee]: https://www.buymeacoffee.com/sinclairpaul
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/?u=frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
-[release-shield]: https://img.shields.io/badge/version-v2.2.0-blue.svg
-[release]: https://github.com/hassio-addons/addon-chrony/tree/v2.2.0
\ No newline at end of file
diff --git a/chrony/config.json b/chrony/config.json
deleted file mode 100644
index dc16820..0000000
--- a/chrony/config.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "chrony",
- "version": "2.2.0",
- "slug": "chrony",
- "description": "A local NTP (Network Time Protocol) server for cameras etc.",
- "url": "https://github.com/hassio-addons/addon-chrony",
- "startup": "system",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "hassio_api": true,
- "init": false,
- "privileged": [
- "SYS_TIME"
- ],
- "ports": {
- "123/udp": 123
- },
- "ports_description": {
- "123/udp": "NTP; Network Time Protocol"
- },
- "options": {
- "set_system_clock": true,
- "mode": "pool",
- "ntp_pool": "pool.ntp.org",
- "ntp_server": [
- "54.39.13.155",
- "briareus.schulte.org"
- ]
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "set_system_clock": "bool",
- "ntp_pool": "str?",
- "ntp_server": [
- "str?"
- ],
- "mode": "list(pool|server)"
- },
- "image": "ghcr.io/hassio-addons/chrony/{arch}"
-}
\ No newline at end of file
diff --git a/chrony/icon.png b/chrony/icon.png
deleted file mode 100644
index 9e9da29..0000000
Binary files a/chrony/icon.png and /dev/null differ
diff --git a/chrony/logo.png b/chrony/logo.png
deleted file mode 100644
index 2ac3670..0000000
Binary files a/chrony/logo.png and /dev/null differ
diff --git a/cloudcommander/CHANGELOG.md b/cloudcommander/CHANGELOG.md
deleted file mode 100644
index 6a16041..0000000
--- a/cloudcommander/CHANGELOG.md
+++ /dev/null
@@ -1,42 +0,0 @@
-
-## 15.9.7 (28-06-2021)
-- Update to latest version from coderaiser/cloudcmd
-- Allow mounting SMB shares
-- Allow mounting local drives
-
-## 15.9.6 (14-06-2021)
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.9.5 (09-06-2021)
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.9.4 (23-05-2021)
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.9.4
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.9.3
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.9.2
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.9.1
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.9.0
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.8.1
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.8.0
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.7.1
-- Update to latest version from coderaiser/cloudcmd
-
-## 15.7.0
-- Update to latest version from coderaiser/cloudcmd
-
diff --git a/cloudcommander/Dockerfile b/cloudcommander/Dockerfile
deleted file mode 100644
index 0a097b2..0000000
--- a/cloudcommander/Dockerfile
+++ /dev/null
@@ -1,39 +0,0 @@
-ARG BUILD_VERSION
-ARG BUILD_UPSTREAM="15.9.7"
-FROM coderaiser/cloudcmd:$BUILD_UPSTREAM
-
-COPY run.sh /
-
-ARG BASHIO_VERSION=0.13.0
-
-RUN \
- ################
- # Install apps #
- ################
- apt-get update \
- && apt-get install -y --no-install-recommends \
- jq \
- cifs-utils \
- keyutils \
- \
- ##################
- # Install bashio #
- ##################
- && mkdir -p /tmp/bashio \
- && curl -L -f -s "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" \
- | tar -xzf - --strip 1 -C /tmp/bashio \
- && mv /tmp/bashio/lib /usr/lib/bashio \
- && ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
- && rm -rf /tmp/bashio \
- \
- /var/{cache,log}/* \
- /var/lib/apt/lists/* \
- \
- ###############
- # Permissions #
- ###############
- && chmod 777 /run.sh
-
-ENTRYPOINT [ "/run.sh" ]
-
-VOLUME [ "/data" ]
diff --git a/cloudcommander/README.md b/cloudcommander/README.md
deleted file mode 100644
index e2bc34f..0000000
--- a/cloudcommander/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Home assistant add-on: Cloudcommander
-![Supports aarch64 Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield]
-
-## About
-
-Cloud Commander a file manager for the web with console and editor.
-This addon is based on the [docker image](https://hub.docker.com/r/coderaiser/cloudcmd).
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Hass.io add-on.
-
-1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance.
-1. Install this add-on.
-1. Click the `Save` button to store your configuration.
-1. Start the add-on.
-1. Check the logs of the add-on to see if everything went well.
-
-## Configuration
-
-Webui can be found at `:8000`.
-
-[repository]: https://github.com/alexbelgium/hassio-addons
-[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
-[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
-[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
-[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
diff --git a/cloudcommander/apparmor.txt b/cloudcommander/apparmor.txt
deleted file mode 100644
index 1e9c60b..0000000
--- a/cloudcommander/apparmor.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-#include
-
-profile cloudcommander_addon flags=(attach_disconnected,mediate_deleted) {
- #include
-
- capability,
- file,
- mount,
- umount,
- remount,
-
- capability setgid,
- capability setuid,
- capability sys_admin,
- capability dac_read_search,
- # capability dac_override,
- # capability sys_rawio,
-
-# S6-Overlay
- /bin/** ix,
- /usr/bin/** ix,
- /usr/lib/bashio/** ix,
- /etc/s6/** rix,
- /run/s6/** rix,
- /etc/services.d/** rwix,
- /etc/cont-init.d/** rwix,
- /etc/cont-finish.d/** rwix,
- /init rix,
- /var/run/** mrwkl,
- /var/run/ mrwkl,
- /dev/i2c-1 mrwkl,
- # Files required
- /dev/sda1 mrwkl,
- /dev/sdb1 mrwkl,
- /dev/mmcblk0p1 mrwkl,
- /dev/* mrwkl,
- /tmp/** mrkwl,
-
- # Data access
- /data/** rw,
-
- # suppress ptrace denials when using 'docker ps' or using 'ps' inside a container
- ptrace (trace,read) peer=docker-default,
-
- # docker daemon confinement requires explict allow rule for signal
- signal (receive) set=(kill,term) peer=/usr/bin/docker,
-
-}
diff --git a/cloudcommander/config.json b/cloudcommander/config.json
deleted file mode 100644
index c0bde73..0000000
--- a/cloudcommander/config.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "Cloudcommander",
- "version": "15.9.7",
- "upstream": "15.9.7",
- "slug": "cloudcommander",
- "description": "Cloud Commander a file manager for the web with console and editor",
- "url": "https://github.com/alexbelgium/hassio-addons/tree/master/cloudcommander#readme",
- "arch": [
- "aarch64",
- "amd64",
- "armv7",
- "armhf"
- ],
- "ports": {
- "8000/tcp": 8000
- },
- "ports_description": {
- "8000/tcp": "Web UI port (required)"
- },
- "map": [
- "ssl"
- ],
- "webui": "http://[HOST]:[PORT:8000]",
- "privileged": [
- "SYS_ADMIN",
- "DAC_READ_SEARCH"
- ],
- "full_access": true,
- "environment": {},
- "options": {},
- "schema": {
- "localdisks": "str?",
- "networkdisks": "str?",
- "cifsusername": "str?",
- "cifspassword": "str?",
- "smbv1": "bool?"
- }
-}
diff --git a/cloudcommander/icon.png b/cloudcommander/icon.png
deleted file mode 100644
index b5da320..0000000
Binary files a/cloudcommander/icon.png and /dev/null differ
diff --git a/cloudcommander/logo.png b/cloudcommander/logo.png
deleted file mode 100644
index b5da320..0000000
Binary files a/cloudcommander/logo.png and /dev/null differ
diff --git a/cloudcommander/run.sh b/cloudcommander/run.sh
deleted file mode 100644
index f2fc96e..0000000
--- a/cloudcommander/run.sh
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/env bashio
-
-##########
-# BANNER #
-##########
-
-if bashio::supervisor.ping; then
- bashio::log.blue \
- '-----------------------------------------------------------'
- bashio::log.blue " Add-on: $(bashio::addon.name)"
- bashio::log.blue " $(bashio::addon.description)"
- bashio::log.blue \
- '-----------------------------------------------------------'
-
- bashio::log.blue " Add-on version: $(bashio::addon.version)"
- if bashio::var.true "$(bashio::addon.update_available)"; then
- bashio::log.magenta ' There is an update available for this add-on!'
- bashio::log.magenta \
- " Latest add-on version: $(bashio::addon.version_latest)"
- bashio::log.magenta ' Please consider upgrading as soon as possible.'
- else
- bashio::log.green ' You are running the latest version of this add-on.'
- fi
-
- bashio::log.blue " System: $(bashio::info.operating_system)" \
- " ($(bashio::info.arch) / $(bashio::info.machine))"
- bashio::log.blue " Home Assistant Core: $(bashio::info.homeassistant)"
- bashio::log.blue " Home Assistant Supervisor: $(bashio::info.supervisor)"
-
- bashio::log.blue \
- '-----------------------------------------------------------'
- bashio::log.blue \
- ' Please, share the above information when looking for help'
- bashio::log.blue \
- ' or support in, e.g., GitHub, forums or the Discord chat.'
- bashio::log.green \
- ' https://github.com/alexbelgium/hassio-addons'
- bashio::log.blue \
- '-----------------------------------------------------------'
-fi
-
-######################
-# MOUNT LOCAL SHARES #
-######################
-
-# Mount local Share if configured and if Protection Mode is active
-if bashio::config.has_value 'localdisks'; then
- bashio::log.info 'Mounting local hdd...'
- bashio::require.unprotected
- MOREDISKS=$(bashio::config 'localdisks')
- bashio::log.info "Local Disks mounting.. ${MOREDISKS}" && \
- for disk in ${MOREDISKS//,/ } # Separate comma separated values
- do
- bashio::log.info "Mount ${disk}"
- mkdir -p /share/$disk && \
- if [ ! -d /share/$disk ]; then
- echo "Creating /share/$disk"
- mkdir -p /share/$disk
- chown -R abc:abc /share/$disk
- fi
- mount /dev/$disk /mnt && \
- bashio::log.info "Success! Mounted to /nmt/$disk"
- done || \
- bashio::log.warning "Error, /dev/$disk couldn't be mounted. Is priviledged mode on?"
-fi || true
-
-####################
-# MOUNT SMB SHARES #
-####################
-if bashio::config.has_value 'networkdisks'; then
- # Mount CIFS Share if configured and if Protection Mode is active
- bashio::log.info 'Mounting smb share(s)...'
-
- # Define variables
- MOREDISKS=$(bashio::config 'networkdisks')
- CIFS_USERNAME=$(bashio::config 'cifsusername')
- CIFS_PASSWORD=$(bashio::config 'cifspassword')
- MOUNTED=false
- SMBVERS=""
- SECVERS=""
-
- if bashio::config.has_value 'cifsdomain'; then
- DOMAIN=",domain=$(bashio::config 'cifsdomain')"
- else
- DOMAIN=""
- fi
-
- # Mounting disks
- for disk in ${MOREDISKS//,/ } # Separate comma separated values
- do
- # Clean name of network share
- disk=$(echo $disk | sed "s,/$,,") # Remove / at end of name
- diskname=${disk//\\//} #replace \ with /
- diskname=${diskname##*/} # Get only last part of the name
- # Prepare mount point
- mkdir -p /mnt/$diskname
- chown -R root:root /mnt/$diskname
-
- #Tries to mount with default options
- mount -t cifs -o rw,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$DOMAIN $disk /mnt/$diskname 2>ERRORCODE && MOUNTED=true || MOUNTED=false
-
- # if Fail test different smb and sec versions
- if [ $MOUNTED = false ]; then
- for SMBVERS in ",vers=3" ",vers=1.0" ",vers=2.1" ",vers=3.0" ",nodfs" ",uid=0,gid=0,forceuid,forcegid" ",noforceuid,noforcegid" ",${DOMAIN}"
- do
- mount -t cifs -o rw,iocharset=utf8,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS $disk /mnt/$diskname 2>/dev/null && MOUNTED=true && break || MOUNTED=false
- for SECVERS in ",sec=ntlmi" ",sec=ntlmv2" ",sec=ntlmv2i" ",sec=ntlmssp" ",sec=ntlmsspi" ",sec=ntlm" ",sec=krb5i" ",sec=krb5"
- do
- mount -t cifs -o rw,iocharset=utf8,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS$SECVERS $disk /mnt/$disk name 2>/dev/null && MOUNTED=true && break 2 && break || MOUNTED=false
- done
- done
- fi
-
- # Messages
- if [ $MOUNTED = true ]; then
- #Test write permissions
- touch /mnt/$diskname/testaze && rm /mnt/$diskname/testaze && bashio::log.info "... $disk successfully mounted to /mnt/$diskname with options $SMBVERS$SECVERS" || bashio::log.fatal "Disk is mounted, however unable to write in the shared disk. Please check UID/GID for permissions, and if the share is rw"
- else
- # message if still fail
- bashio::log.fatal "Unable to mount $disk to /mnt/$diskname with username $CIFS_USERNAME, $CIFS_PASSWORD. Please check your remote share path, username, password, domain, try putting 0 in UID and GID" # Mount share
- bashio::log.fatal "Error read : $(:8096`.
-
-[smb-shield]: https://img.shields.io/badge/SMB--green?style=plastic.svg
-
-
-[repository]: https://github.com/alexbelgium/hassio-addons
-[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
-[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
-[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
-[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
diff --git a/emby/build.json b/emby/build.json
deleted file mode 100644
index 059fcaa..0000000
--- a/emby/build.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "build_from": {
- "armv7": "linuxserver/emby:arm32v7-version-",
- "armhf": "linuxserver/emby:arm32v7-version-",
- "aarch64": "linuxserver/emby:arm64v8-version-",
- "amd64": "linuxserver/emby:amd64-version-"
- }
-}
diff --git a/emby/config.json b/emby/config.json
deleted file mode 100644
index c346760..0000000
--- a/emby/config.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "name": "Emby NAS",
- "version": "4.6.3.0",
- "upstream": "4.6.3.0",
- "slug": "emby_nas",
- "description": "A Free Software Media System that puts you in control of managing and streaming your media.",
- "url": "https://github.com/alexbelgium/hassio-addons",
- "startup": "services",
- "arch": [
- "aarch64",
- "amd64",
- "armv7",
- "armhf"
- ],
- "ports": {
- "8096/tcp": 8096,
- "8920/tcp": null,
- "7359/udp": null,
- "1900/udp": null
- },
- "ports_description": {
- "8096/tcp": "web interface",
- "8920/tcp": "https web interface (optional)",
- "7359/udp": "udp server discover (optional)",
- "1900/udp": "dlna (optional)"
- },
- "map": [
- "config:rw",
- "share:rw",
- "media:rw",
- "ssl"
- ],
- "webui": "http://[HOST]:[PORT:8096]",
- "boot": "auto",
- "apparmor": "true",
- "privileged": [
- "SYS_ADMIN",
- "DAC_READ_SEARCH"
- ],
- "devices": [
- "/dev/ttyUSB0",
- "/dev/*",
- "/dev/sda1"
- ],
- "full_access": true,
- "options": {
- "PUID": 0,
- "PGID": 0
- },
- "schema": {
- "PUID": "int",
- "PGID": "int",
- "TZ": "str?",
- "localdisks": "str?",
- "networkdisks": "str?",
- "cifsusername": "str?",
- "cifspassword": "str?",
- "smbv1": "bool?"
- }
-}
diff --git a/emby/icon.png b/emby/icon.png
deleted file mode 100644
index 19f999c..0000000
Binary files a/emby/icon.png and /dev/null differ
diff --git a/emby/logo.png b/emby/logo.png
deleted file mode 100644
index 19f999c..0000000
Binary files a/emby/logo.png and /dev/null differ
diff --git a/emby/root/etc/cont-init.d/00-banner.sh b/emby/root/etc/cont-init.d/00-banner.sh
deleted file mode 100644
index 71b1a4e..0000000
--- a/emby/root/etc/cont-init.d/00-banner.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/with-contenv bashio
-# ==============================================================================
-# Home Assistant Community Add-on: Base Images
-# Displays a simple add-on banner on startup
-# ==============================================================================
-if bashio::supervisor.ping; then
- bashio::log.blue \
- '-----------------------------------------------------------'
- bashio::log.blue " Add-on: $(bashio::addon.name)"
- bashio::log.blue " $(bashio::addon.description)"
- bashio::log.blue \
- '-----------------------------------------------------------'
-
- bashio::log.blue " Add-on version: $(bashio::addon.version)"
- if bashio::var.true "$(bashio::addon.update_available)"; then
- bashio::log.magenta ' There is an update available for this add-on!'
- bashio::log.magenta \
- " Latest add-on version: $(bashio::addon.version_latest)"
- bashio::log.magenta ' Please consider upgrading as soon as possible.'
- else
- bashio::log.green ' You are running the latest version of this add-on.'
- fi
-
- bashio::log.blue " System: $(bashio::info.operating_system)" \
- " ($(bashio::info.arch) / $(bashio::info.machine))"
- bashio::log.blue " Home Assistant Core: $(bashio::info.homeassistant)"
- bashio::log.blue " Home Assistant Supervisor: $(bashio::info.supervisor)"
-
- bashio::log.blue \
- '-----------------------------------------------------------'
- bashio::log.blue \
- ' Please, share the above information when looking for help'
- bashio::log.blue \
- ' or support in, e.g., GitHub, forums or the Discord chat.'
- bashio::log.green \
- ' https://github.com/alexbelgium/hassio-addons'
- bashio::log.blue \
- '-----------------------------------------------------------'
-fi
diff --git a/emby/root/etc/cont-init.d/00-ha-env b/emby/root/etc/cont-init.d/00-ha-env
deleted file mode 100644
index 3b3e692..0000000
--- a/emby/root/etc/cont-init.d/00-ha-env
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
- printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
-done
\ No newline at end of file
diff --git a/emby/root/etc/cont-init.d/20-folders b/emby/root/etc/cont-init.d/20-folders
deleted file mode 100644
index 8f46b7c..0000000
--- a/emby/root/etc/cont-init.d/20-folders
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/with-contenv bash
-
-if [ ! -d /emby ]; then
- echo "Creating /emby"
- mkdir -p /emby
- chown -R abc:abc /emby
-fi
-
-if [ ! -d /share/storage/tv ]; then
- echo "Creating /share/storage/tv"
- mkdir -p /share/storage/tv
- chown -R abc:abc /share/storage/tv
-fi
-
-if [ ! -d /share/storage/movies ]; then
- echo "Creating /share/storage/movies"
- mkdir -p /share/storage/movies
- chown -R abc:abc /share/storage/movies
-fi
-
-if [ ! -d /share/emby ]; then
- echo "Creating /share/emby"
- mkdir -p /share/emby
- chown -R abc:abc /share/emby
-fi
-
-if [ ! -d /config/emby ]; then
- echo "Creating /config/emby"
- mkdir -p /config/emby
- chown -R abc:abc /config/emby
-fi
-
-# links
-
-if [ ! -d /emby/cache ]; then
- echo "Creating link for /emby/cache"
- mkdir -p /share/emby/cache
- chown -R abc:abc /share/emby/cache
- ln -s /share/emby/cache /emby/cache
-fi
-
-if [ ! -d /emby/config ]; then
- echo "Creating link for /emby/config"
- mkdir -p /config/emby
- chown -R abc:abc /config/emby
- ln -s /config/emby /emby/config
-fi
-
-if [ ! -d /emby/data ]; then
- echo "Creating link for /emby/data"
- mkdir -p /share/emby/data
- chown -R abc:abc /share/emby/data
- ln -s /share/emby/data /emby/data
-fi
-
-if [ ! -d /emby/logs ]; then
- echo "Creating link for /emby/logs"
- mkdir -p /share/emby/logs
- chown -R abc:abc /share/emby/logs
- ln -s /share/emby/logs /emby/logs
-fi
-
-if [ ! -d /emby/metadata ]; then
- echo "Creating link for /emby/metadata"
- mkdir -p /share/emby/metadata
- chown -R abc:abc /share/emby/metadata
- ln -s /share/emby/metadata /emby/metadata
-fi
-
-if [ ! -d /emby/plugins ]; then
- echo "Creating link for /emby/plugins"
- mkdir -p /share/emby/plugins
- chown -R abc:abc /share/emby/plugins
- ln -s /share/emby/plugins /emby/plugins
-fi
-
-if [ ! -d /emby/root ]; then
- echo "Creating link for /emby/root"
- mkdir -p /share/emby/root
- chown -R abc:abc /share/emby/root
- ln -s /share/emby/root /emby/root
-fi
diff --git a/emby/root/etc/cont-init.d/92-local_mounts_v1.2.sh b/emby/root/etc/cont-init.d/92-local_mounts_v1.2.sh
deleted file mode 100644
index d9a382b..0000000
--- a/emby/root/etc/cont-init.d/92-local_mounts_v1.2.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-######################
-# MOUNT LOCAL SHARES #
-######################
-
-bashio::log.info 'Mounting external hdd...'
-
-# Mount local Share if configured and if Protection Mode is active
-if bashio::config.has_value 'localdisks'; then
- bashio::require.unprotected
- MOREDISKS=$(bashio::config 'localdisks')
- bashio::log.info "Local Disks mounting.. ${MOREDISKS}" && \
- for disk in ${MOREDISKS//,/ } # Separate comma separated values
- do
- bashio::log.info "Mount ${disk}"
- mkdir -p /share/$disk && \
- if [ ! -d /share/$disk ]; then
- echo "Creating /share/$disk"
- mkdir -p /share/$disk
- chown -R abc:abc /share/$disk
- fi
- mount /dev/$disk /share/$disk && \
- bashio::log.info "Success! Mounted to /nmt/$disk"
- done || \
- bashio::log.warning "Protection mode is ON. Unable to mount local drives!"
-fi
diff --git a/emby/root/etc/cont-init.d/92-smb_mounts_v1.3.sh b/emby/root/etc/cont-init.d/92-smb_mounts_v1.3.sh
deleted file mode 100644
index 2e5d11a..0000000
--- a/emby/root/etc/cont-init.d/92-smb_mounts_v1.3.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-####################
-# MOUNT SMB SHARES #
-####################
-if bashio::config.has_value 'networkdisks'; then
- # Mount CIFS Share if configured and if Protection Mode is active
- bashio::log.info 'Mounting smb share(s)...'
-
- # Define variables
- MOREDISKS=$(bashio::config 'networkdisks')
- CIFS_USERNAME=$(bashio::config 'cifsusername')
- CIFS_PASSWORD=$(bashio::config 'cifspassword')
- MOUNTED=false
- SMBVERS=""
- SECVERS=""
-
- if bashio::config.has_value 'cifsdomain'; then
- DOMAIN=",domain=$(bashio::config 'cifsdomain')"
- else
- DOMAIN=""
- fi
-
- # Mounting disks
- for disk in ${MOREDISKS//,/ } # Separate comma separated values
- do
- # Clean name of network share
- disk=$(echo $disk | sed "s,/$,,") # Remove / at end of name
- diskname=${disk//\\//} #replace \ with /
- diskname=${diskname##*/} # Get only last part of the name
- # Prepare mount point
- mkdir -p /mnt/$diskname
- chown -R root:root /mnt/$diskname
-
- #Tries to mount with default options
- mount -t cifs -o rw,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$DOMAIN $disk /mnt/$diskname 2>ERRORCODE && MOUNTED=true || MOUNTED=false
-
- # if Fail test different smb and sec versions
- if [ $MOUNTED = false ]; then
- for SMBVERS in ",vers=3" ",vers=1.0" ",vers=2.1" ",vers=3.0" ",nodfs" ",uid=0,gid=0,forceuid,forcegid" ",noforceuid,noforcegid" ",${DOMAIN}"
- do
- mount -t cifs -o rw,iocharset=utf8,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS $disk /mnt/$diskname 2>/dev/null && MOUNTED=true && break || MOUNTED=false
- for SECVERS in ",sec=ntlmi" ",sec=ntlmv2" ",sec=ntlmv2i" ",sec=ntlmssp" ",sec=ntlmsspi" ",sec=ntlm" ",sec=krb5i" ",sec=krb5"
- do
- mount -t cifs -o rw,iocharset=utf8,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS$SECVERS $disk /mnt/$disk name 2>/dev/null && MOUNTED=true && break 2 && break || MOUNTED=false
- done
- done
- fi
-
- # Messages
- if [ $MOUNTED = true ]; then
- #Test write permissions
- touch /mnt/$diskname/testaze && rm /mnt/$diskname/testaze && bashio::log.info "... $disk successfully mounted to /mnt/$diskname with options $SMBVERS$SECVERS" || bashio::log.fatal "Disk is mounted, however unable to write in the shared disk. Please check UID/GID for permissions, and if the share is rw"
- else
- # message if still fail
- bashio::log.fatal "Unable to mount $disk to /mnt/$diskname with username $CIFS_USERNAME, $CIFS_PASSWORD. Please check your remote share path, username, password, domain, try putting 0 in UID and GID" # Mount share
- bashio::log.fatal "Error read : $(
-
-
-
-[View the ESPHome documentation](https://esphome.io/)
-
-## Example
-
-With ESPHome, you can go from a few lines of YAML straight to a custom-made
-firmware. For example, to include a [DHT22][dht22].
-temperature and humidity sensor, you just need to include 8 lines of YAML
-in your configuration file:
-
-
-
-Then just click UPLOAD and the sensor will magically appear in Home Assistant:
-
-
-
-[discord-shield]: https://img.shields.io/discord/429907082951524364.svg
-[dht22]: https://esphome.io/components/sensor/dht.html
-[discord]: https://discord.gg/KhAMKrd
-[releases-shield]: https://img.shields.io/github/release/esphome/esphome.svg
-[releases]: https://esphome.io/changelog/index.html
-[repository]: https://github.com/esphome/esphome
diff --git a/esphome/config.json b/esphome/config.json
deleted file mode 100644
index 459b2ac..0000000
--- a/esphome/config.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "arch": [
- "amd64",
- "armv7",
- "aarch64"
- ],
- "auth_api": true,
- "description": "ESPHome add-on for intelligently managing all your ESP8266/ESP32 devices",
- "hassio_api": true,
- "host_network": true,
- "image": "esphome/esphome-hassio-{arch}",
- "ingress": true,
- "ingress_port": 0,
- "map": [
- "ssl:ro",
- "config:rw"
- ],
- "name": "ESPHome",
- "panel_icon": "mdi:chip",
- "ports": {
- "6052/tcp": null
- },
- "ports_description": {
- "6052/tcp": "Web interface (not required for Home Assistant ingress)"
- },
- "schema": {
- "certfile": "str?",
- "esphome_version": "str?",
- "keyfile": "str?",
- "leave_front_door_open": "bool?",
- "relative_url": "str?",
- "ssl": "bool?",
- "status_use_ping": "bool?",
- "streamer_mode": "bool?"
- },
- "slug": "esphome",
- "snapshot_exclude": [
- "*/*/"
- ],
- "uart": true,
- "url": "https://esphome.io/",
- "version": "1.19.4"
-}
\ No newline at end of file
diff --git a/esphome/icon.png b/esphome/icon.png
deleted file mode 100644
index 0c8fb60..0000000
Binary files a/esphome/icon.png and /dev/null differ
diff --git a/esphome/logo.png b/esphome/logo.png
deleted file mode 100644
index b1cda93..0000000
Binary files a/esphome/logo.png and /dev/null differ
diff --git a/git-exporter/CHANGELOG.md b/git-exporter/CHANGELOG.md
deleted file mode 100644
index c8159db..0000000
--- a/git-exporter/CHANGELOG.md
+++ /dev/null
@@ -1,134 +0,0 @@
-## 1.10.1 - 2021-06-03
-
-* 📝 Add secrets corner case docs for secrets containing special regex chars. (thanks @fliphess)
-
-
-## 1.10.0 - 2021-05-08
-
-* 🐛 Don't encode GitHub Tokens
-* 🔼 Updated python3 to `3.8.10-r0`
-
-
-## 1.9.0 - 2021-04-02
-
-* 🔨 Use ghcr.io/home-assistant for base images
-
-
-## 1.8.0 - 2021-03-30
-
-* 🔨 URL encode git password to support special chars (see #219)
-* 🔼 Updated git to `2.30.2-r0`
-* 🔼 Updated python3 to `3.8.8-r0`
-
-
-## 1.7.1 - 2021-03-04
-
-* 🔼 Updated git to `2.30.1-r0`
-* 🔼 Updated python3 to `3.8.7-r1`
-
-
-## 1.7.0 - 2021-01-30
-
-* 🔼 Updated to alpine `3.13`
-* 🔼 Updated git to `2.30.0-r0`
-* 🔼 Updated rsync to `3.2.3-r1`
-* 🔼 Updated grep to `3.6-r0`
-* 🔼 Updated python3 to `3.8.7-r0`
-* 🔼 Updated py3-pip to `20.3.4-r0`
-* 🔼 Updated findutils to `4.8.0-r0`
-* 🔨 Use Jemalloc for better memory handling
-
-
-## 1.6.0 - 2021-01-06
-
-* 🔨 Add dummy mac and ip adresses as allowed
-* 🐛 Exclude also all Node-Red backup files
-
-
-## 1.5.0 - 2020-12-29
-
-* 🐛 Fixed addon config export (#135), thanks @LiJu09
-
-## 1.4.4 - 2020-10-22
-
-* 🔨 Disable S6-Overlay Init
-
-
-## 1.4.3 - 2020-10-06
-
-* 🔼 Updated python3 to `3.8.5-r0`
-
-
-## 1.4.2 - 2020-06-25
-
-* 🔼 Updated to alpine `3.12`
-* 🔼 Updated git to `2.26.2-r0`
-* 🔼 Updated make to `4.3-r0`
-* 🔼 Updated rsync to `3.1.3-r3`
-* 🔼 Updated grep to `3.4-r0`
-* 🔼 Updated sed to `4.8-r0`
-* 🔼 Updated python3 to `3.8.3-r0`
-* 🔼 Updated py3-pip to `20.1.1-re0`
-* 🔨 Added more default ignore patterns
-
-
-## 1.4.1 - 2020-05-22
-
-* 🔨 Updated Changelog to new format
-
-
-## 1.4.0 - 2020-05-20
-
-* ➕ Export addon repositories
-* 🔨 Changed config documentation
-* ➕ Add Node-Red check
-* ➕ Add commiter email option
-
-
-## 1.3.2 - 2020-04-29
-
-* 🔼 Updated git to `2.24.3-r0`
-
-
-## 1.3.1 - 2020-04-16
-
-* 🔼 Updated git to `2.24.2-r0`
-
-
-## 1.3.0 - 2020-04-06
-
-* ➕ Add export support for node-red
-
-
-## 1.2.1 - 2020-03-30
-
-* ➕ Add findutils at version `4.7.0-r0`
-* 🐛 Fixed lovelace export
-* 🔨 Get the addon information from bashio instead of self-requesting
-* ➖ Removed `curl`
-
-
-## 1.2.0 - 2020-03-29
-
-* 🔨 Changed json2yaml conversion to own little script
-* 🔼 Updated py3-yaml ot `5.3.1-r0`
-* 🐛 Fixed permanent dry_run bug
-
-
-## 1.1.0 - 2020-03-18
-
-* ➕ Dry run toogle to just display the changes.
-* ➕ Adjusted to the multiple lovelace interfaces
-* 🔼 Updated to python `3.8.2-r0`
-
-
-## 1.0 - 2020-02-21
-
-* ➕ Started git exporter addon with basic git push functionality
-* ➕ Added excludes in config
-* ➕ Lovelace exports
-* ➕ Addons config exports
-* ➕ ESPHome exports
-* ➕ Configurable Commit message
-* ➕ Configurable exports
-
diff --git a/git-exporter/DOCS.md b/git-exporter/DOCS.md
deleted file mode 100644
index 2f20381..0000000
--- a/git-exporter/DOCS.md
+++ /dev/null
@@ -1,106 +0,0 @@
-# Configuration
-
-```yaml
-repository:
- url:
- username: user
- password: pass
- pull_before_push: true
- commit_message: 'Home Assistant Git Exporter'
-export:
- lovelace: true
- addons: true
- esphome: true
- node_red: true
-checks:
- enabled: true
- check_for_secrets: true
- check_for_ips: true
-exclude:
- - '*.db'
- - '*.log'
- - __pycache__
- - deps/
- - known_devices.yaml
- - tts/
-dry_run: false
-```
-
-### `repository.url`
-
-Any https url to your git repository. (For now _no_ SSH)
-
-### `repository.email` (Optional)
-
-The email address the commits author is using.
-
-### `repository.username`
-
-Your username for https authentication.
-
-### `repository.password`
-
-Your password or __access token__ for your repository.
-
-### `repository.pull_before_push`
-
-Should the repository be pulled first and commit the new state on top?
-
-### `repository.commit_message`
-
-The commit message for the next commit.
-
-
-### `export.lovelace`
-
-Enable / Disable the export for the lovelace config.
-
-### `export.addons`
-
-Enable / Disable the export for the supervisor addons config.
-
-### `export.esphome`
-
-Enable / Disable the export for the esphome config.
-
-### `export.node_red`
-
-Enable / Disable the export for the Node-RED flows.
-Secure your credentials with [node-red-contrib-credentials](https://flows.nodered.org/node/node-red-contrib-credentials).
-
-
-### `checks.enabled`
-
-Enable / Disable the checks in the exported files.
-
-### `checks.check_for_secrets`
-
-Add your secret values to the check.
-
-### `checks.check_for_ips`
-
-Add pattern for ip and mac addresses to the search.
-
-
-### `exclude`
-
-The files / folders which should be excluded from the config export.
-
-Following folders and files are excluded from the sync per default:
-
-* `secrets.yaml` (secrets are cleared)
-* `.cloud`
-* `.storage`
-
-### `dry_run`
-
-Only show the changes and don't commit or push.
-
-
-## Known limitations
-
-`check_for_secrets` Uses a git plugin that does pattern matching using regexes.
-A limitation of this plugin is that using brackets (like `[`, `]`, `{`, `}` `(` and `)`) in secrets can result in unexpected behaviour and crashes.
-
-If the addon fails during secrets checking with errors originating from grep (I.E. `grep: Unmatched [, [^, [:, [., or [=`),
-change the passwords that contain brackets or set `check_for_secrets` to `false`.
diff --git a/git-exporter/Dockerfile b/git-exporter/Dockerfile
deleted file mode 100644
index 75d648d..0000000
--- a/git-exporter/Dockerfile
+++ /dev/null
@@ -1,31 +0,0 @@
-ARG BUILD_FROM
-FROM $BUILD_FROM AS BUILD
-
-RUN apk add --no-cache \
- 'git=2.30.2-r0' \
- 'make=4.3-r0'
-
-ENV GIT_SECRET_VERSION 1.3.0
-# hadolint ignore=DL3003
-RUN git config --global advice.detachedHead false && \
- git clone https://github.com/awslabs/git-secrets.git -b ${GIT_SECRET_VERSION} /git-secrets && \
- cd /git-secrets && make install
-
-FROM $BUILD_FROM AS RUNNING
-
-RUN apk add --no-cache \
- 'git=2.30.2-r0' \
- 'rsync=3.2.3-r1' \
- 'grep=3.6-r0' \
- 'sed=4.8-r0' \
- 'python3=3.8.10-r0' \
- 'py3-pip=20.3.4-r0' \
- 'findutils=4.8.0-r0'
-
-RUN pip3 install --no-cache-dir PyYAML==5.3.1 dotty-dict==1.2.1
-
-COPY --from=BUILD /usr/local/bin/git-secrets /usr/local/bin/git-secrets
-
-COPY root /
-RUN chmod a+x /run.sh /utils/*
-ENTRYPOINT [ "/run.sh" ]
\ No newline at end of file
diff --git a/git-exporter/README.md b/git-exporter/README.md
deleted file mode 100644
index 1f3a903..0000000
--- a/git-exporter/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# Home Assistant Git Exporter
-
-Export all of your Home Assistant configuration to a git repository of your choice.
-Can be used to show your Home Assistant setup in public repositories.
-
-![Addon Stage][stage-badge]
-![Supports aarch64 Architecture][aarch64-badge]
-![Supports amd64 Architecture][amd64-badge]
-![Supports armhf Architecture][armhf-badge]
-![Supports armv7 Architecture][armv7-badge]
-![Supports i386 Architecture][i386-badge]
-
-[![Install on my Home Assistant][install-badge]][install-url]
-[![Donate][donation-badge]][donation-url]
-
-# Functionality
-
-* Export Home Assistant configuration
-* Export Supervisor Addon configuration
-* Export Lovelace configuration
-* Export ESPHome configurations
-* Export Node-RED flows
-* Check for plaintext secrets based on your `secrets.yaml` file and common patterns.
-* Check for plaintext ip and addresses in your config.
-
-# Example
-
-For an example take a look at my own [Home Assistant configuration](https://github.com/Poeschl/home-assistant-config).
-The folders there are gettings synced with this addon.
-
-
-# Badge
-
-If you export your config with this addon and want to help me to spread it further. Here is a badge you can embedd in your readme.
-
-[](https://github.com/Poeschl/Hassio-Addons/tree/master/git-exporter)
-
-```markdown
-[](https://github.com/Poeschl/Hassio-Addons/tree/master/git-exporter)
-```
-
-
-[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
-[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
-[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
-[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
-[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
-[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_git-exporter
-[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
-
-[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
-[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
-[donation-url]: https://www.buymeacoffee.com/Poeschl
diff --git a/git-exporter/build.json b/git-exporter/build.json
deleted file mode 100644
index 4ceab93..0000000
--- a/git-exporter/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "armhf": "ghcr.io/home-assistant/armhf-base:3.13",
- "armv7": "ghcr.io/home-assistant/armv7-base:3.13",
- "aarch64": "ghcr.io/home-assistant/aarch64-base:3.13",
- "amd64": "ghcr.io/home-assistant/amd64-base:3.13",
- "i386": "ghcr.io/home-assistant/i386-base:3.13"
- }
-}
diff --git a/git-exporter/config.json b/git-exporter/config.json
deleted file mode 100644
index 4864743..0000000
--- a/git-exporter/config.json
+++ /dev/null
@@ -1,75 +0,0 @@
-
-{
- "name": "Home Assistant Git Exporter",
- "version": "1.10.1",
- "slug": "git-exporter",
- "description": "Export all of your Home Assistant configuration to a git repository of your choice.",
- "url": "https://github.com/Poeschl/Hassio-Addons/tree/master/git-exporter",
- "arch": [
- "armhf",
- "armv7",
- "aarch64",
- "amd64",
- "i386"
- ],
- "startup": "once",
- "boot": "manual",
- "image": "ghcr.io/poeschl/ha-git-exporter-{arch}",
- "hassio_api": true,
- "hassio_role": "manager",
- "map": ["config"],
- "options": {
- "repository": {
- "url": "",
- "username": "",
- "password": "",
- "pull_before_push": true,
- "commit_message": "Home Assistant Git Exporter"
- },
- "export": {
- "lovelace": true,
- "addons": true,
- "esphome": true,
- "node_red": true
- },
- "check": {
- "enabled": true,
- "check_for_secrets": true,
- "check_for_ips": true
- },
- "exclude": [
- "*.db",
- "*.log",
- "__pycache__",
- "._*",
- ".DS_Store",
- "deps/",
- "known_devices.yaml",
- "tts/"
- ],
- "dry_run": false
- },
- "schema": {
- "repository": {
- "url": "match(https://.*)",
- "email": "match(.+@.+)?",
- "username": "str",
- "password": "password",
- "pull_before_push": "bool",
- "commit_message": "str"
- },
- "export": {
- "lovelace": "bool",
- "addons": "bool",
- "esphome": "bool",
- "node_red": "bool"
- },
- "check": {
- "enabled": "bool",
- "check_for_secrets": "bool",
- "check_for_ips": "bool"
- },
- "exclude": ["str"],
- "dry_run": "bool"
- }
-}
diff --git a/git-exporter/icon.png b/git-exporter/icon.png
deleted file mode 100644
index a97dd54..0000000
Binary files a/git-exporter/icon.png and /dev/null differ
diff --git a/git-exporter/logo.png b/git-exporter/logo.png
deleted file mode 100644
index d9efb8e..0000000
Binary files a/git-exporter/logo.png and /dev/null differ
diff --git a/git-exporter/root/run.sh b/git-exporter/root/run.sh
deleted file mode 100644
index 7618fec..0000000
--- a/git-exporter/root/run.sh
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/env bashio
-set -e
-
-# Enable Jemalloc for better memory handling
-export LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
-
-local_repository='/data/repository'
-pull_before_push="$(bashio::config 'repository.pull_before_push')"
-
-function setup_git {
- repository=$(bashio::config 'repository.url')
- username=$(bashio::config 'repository.username')
- password=$(bashio::config 'repository.password')
- commiter_mail=$(bashio::config 'repository.email')
-
- if [[ "$password" != "ghp_*" ]]; then
- password=$(python3 -c "import urllib.parse; print(urllib.parse.quote('${password}'))")
- fi
-
- if [ ! -d $local_repository ]; then
- bashio::log.info 'Create local repository'
- mkdir -p $local_repository
- fi
- cd $local_repository
-
- if [ ! -d .git ]; then
- fullurl="https://${username}:${password}@${repository##*https://}"
- if [ "$pull_before_push" == 'true' ]; then
- bashio::log.info 'Clone existing repository'
- git clone "$fullurl" $local_repository
- else
- bashio::log.info 'Initialize new repository'
- git init $local_repository
- git remote add origin "$fullurl"
- fi
- git config user.name "${username}"
- git config user.email "${commiter_mail:-git.exporter@home-assistant}"
- fi
-
- #Reset secrets if existing
- git config --unset-all 'secrets.allowed' || true
- git config --unset-all 'secrets.patterns' || true
- git config --unset-all 'secrets.providers' || true
-
- if [ "$pull_before_push" == 'true' ]; then
- bashio::log.info 'Pull latest'
- git fetch
- git reset --hard origin/master
- fi
-}
-
-function check_secrets {
- bashio::log.info 'Add secrets pattern'
-
- # Allow !secret lines
- git secrets --add -a '!secret'
-
- # Set prohibited patterns
- git secrets --add "password:\s?[\'\"]?\w+[\'\"]?\n?"
- git secrets --add "token:\s?[\'\"]?\w+[\'\"]?\n?"
- git secrets --add "client_id:\s?[\'\"]?\w+[\'\"]?\n?"
- git secrets --add "api_key:\s?[\'\"]?\w+[\'\"]?\n?"
- git secrets --add "chat_id:\s?[\'\"]?\w+[\'\"]?\n?"
- git secrets --add "allowed_chat_ids:\s?[\'\"]?\w+[\'\"]?\n?"
- git secrets --add "latitude:\s?[\'\"]?\w+[\'\"]?\n?"
- git secrets --add "longitude:\s?[\'\"]?\w+[\'\"]?\n?"
- git secrets --add "credential_secret:\s?[\'\"]?\w+[\'\"]?\n?"
-
- if [ "$(bashio::config 'check.check_for_secrets')" == 'true' ]; then
- git secrets --add-provider -- sed '/^$/d;/^#.*/d;/^&/d;s/^.*://g;s/\s//g' /config/secrets.yaml
- fi
-
- if [ "$(bashio::config 'check.check_for_ips')" == 'true' ]; then
- git secrets --add '([0-9]{1,3}\.){3}[0-9]{1,3}'
- git secrets --add '([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})'
-
- # Allow dummy / general ips and mac
- git secrets --add -a 'AA:BB:CC:DD:EE:FF'
- git secrets --add -a '123.456.789.123'
- git secrets --add -a '0.0.0.0'
- fi
-
- bashio::log.info 'Add secrets from secrets.yaml'
- prohibited_patterns=$(git config --get-all secrets.patterns)
- bashio::log.info "Prohibited patterns:\n${prohibited_patterns//\\n/\\\\n}"
-
- bashio::log.info 'Checking for secrets'
- # shellcheck disable=SC2046
- git secrets --scan $(find $local_repository -name '*.yaml' -o -name '*.yml' -o -name '*.json' -o -name '*.disabled') \
- || (bashio::log.error 'Found secrets in files!!! Fix them to be able to commit!' && exit 1)
-}
-
-function export_ha_config {
- bashio::log.info 'Get Home Assistant config'
- excludes=$(bashio::config 'exclude')
- excludes=("secrets.yaml" ".storage" ".cloud" "esphome/" ".uuid" "node-red/" "${excludes[@]}")
-
- # Cleanup existing esphome folder from config
- [ -d "${local_repository}/config/esphome" ] && rm -r "${local_repository}/config/esphome"
- # shellcheck disable=SC2068
- exclude_args=$(printf -- '--exclude=%s ' ${excludes[@]})
- # shellcheck disable=SC2086
- rsync -archive --compress --delete --checksum --prune-empty-dirs -q --include='.gitignore' $exclude_args /config ${local_repository}
- sed 's/:.*$/: ""/g' /config/secrets.yaml > ${local_repository}/config/secrets.yaml
- chmod 644 -R ${local_repository}/config
-}
-
-function export_lovelace {
- bashio::log.info 'Get Lovelace config yaml'
- [ ! -d "${local_repository}/lovelace" ] && mkdir "${local_repository}/lovelace"
- mkdir -p '/tmp/lovelace'
- find /config/.storage -name "lovelace*" -printf '%f\n' | xargs -I % cp /config/.storage/% /tmp/lovelace/%.json
- /utils/jsonToYaml.py '/tmp/lovelace/' 'data'
- rsync -archive --compress --delete --checksum --prune-empty-dirs -q --include='*.yaml' --exclude='*' /tmp/lovelace/ "${local_repository}/lovelace"
- chmod 644 -R "${local_repository}/lovelace"
-}
-
-function export_esphome {
- bashio::log.info 'Get ESPHome configs'
- rsync -archive --compress --delete --checksum --prune-empty-dirs -q \
- --exclude='.esphome*' --include='*/' --include='.gitignore' --include='*.yaml' --include='*.disabled' --exclude='secrets.yaml' --exclude='*' \
- /config/esphome ${local_repository}
- [ -f /config/esphome/secrets.yaml ] && sed 's/:.*$/: ""/g' /config/esphome/secrets.yaml > ${local_repository}/esphome/secrets.yaml
- chmod 644 -R ${local_repository}/esphome
-}
-
-function export_addons {
- [ -d ${local_repository}/addons ] || mkdir -p ${local_repository}/addons
- installed_addons=$(bashio::addons.installed)
- mkdir '/tmp/addons/'
- for addon in $installed_addons; do
- if [ "$(bashio::addons.installed "${addon}")" == 'true' ]; then
- bashio::log.info "Get ${addon} configs"
- bashio::addon.options "$addon" > /tmp/tmp.json
- /utils/jsonToYaml.py /tmp/tmp.json
- mv /tmp/tmp.yaml "/tmp/addons/${addon}.yaml"
- fi
- done
- bashio::log.info "Get addon repositories"
- bashio::addons false 'addons.repositorys' '.repositories | map(select(.source != null)) | map({(.name): {source,maintainer,slug}}) | add' > /tmp/tmp.json
- /utils/jsonToYaml.py /tmp/tmp.json
- mv /tmp/tmp.yaml "/tmp/addons/repositories.yaml"
- rsync -archive --compress --delete --checksum --prune-empty-dirs -q /tmp/addons/ ${local_repository}/addons
- chmod 644 -R ${local_repository}/addons
-}
-
-function export_node-red {
- bashio::log.info 'Get Node-RED flows'
- rsync -archive --compress --delete --checksum --prune-empty-dirs -q \
- --exclude='flows_cred.json' --exclude='*.backup' --include='flows.json' --include='settings.js' --exclude='*' \
- /config/node-red/ ${local_repository}/node-red
- chmod 644 -R ${local_repository}/node-red
-}
-
-bashio::log.info 'Start git export'
-
-setup_git
-
-export_ha_config
-
-if [ "$(bashio::config 'export.lovelace')" == 'true' ]; then
- export_lovelace
-fi
-
-if [ "$(bashio::config 'export.esphome')" == 'true' ] && [ -d '/config/esphome' ]; then
- export_esphome
-fi
-
-if [ "$(bashio::config 'export.addons')" == 'true' ]; then
- export_addons
-fi
-
-if [ "$(bashio::config 'export.node_red')" == 'true' ] && [ -d '/config/node-red' ]; then
- export_node-red
-fi
-
-if [ "$(bashio::config 'check.enabled')" == 'true' ]; then
- check_secrets
-fi
-
-
-if [ "$(bashio::config 'dry_run')" == 'true' ]; then
- git status
-else
- bashio::log.info 'Commit changes and push to remote'
- git add .
- git commit -m "$(bashio::config 'repository.commit_message')"
-
- if [ ! "$pull_before_push" == 'true' ]; then
- git push --set-upstream origin master -f
- else
- git push origin
- fi
-fi
-
-bashio::log.info 'Exporter finished'
diff --git a/git-exporter/root/utils/jsonToYaml.py b/git-exporter/root/utils/jsonToYaml.py
deleted file mode 100644
index a297fcc..0000000
--- a/git-exporter/root/utils/jsonToYaml.py
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/usr/bin/env python3
-import json
-import sys
-import os
-import yaml
-from dotty_dict import dotty
-
-def convert_file(file, path):
- yaml_file_name = os.path.splitext(file)[0] + ".yaml"
- #print (file + ' -> ' + yaml_file_name)
- with open(file, 'r') as infile:
- with open(yaml_file_name, 'w+') as outfile:
- if path is not None:
- data = dotty(json.load(infile)).get(path)
- else:
- data = json.load(infile)
-
- yaml.dump(data, outfile, default_flow_style=False)
-
-input_file = sys.argv[1]
-if len(sys.argv) > 2:
- path = sys.argv[2]
-else:
- path = None
-
-if os.path.isfile(input_file):
- convert_file(input_file, path)
-else:
- #print ('Convert folder ' + input_file)
- for json_file in os.listdir(input_file):
- convert_file(os.path.dirname(input_file) + '/' + json_file, path)
diff --git a/gitea/CHANGELOG.md b/gitea/CHANGELOG.md
new file mode 100644
index 0000000..49f3665
--- /dev/null
+++ b/gitea/CHANGELOG.md
@@ -0,0 +1,136 @@
+
+## 1.22.0 (01-06-2024)
+- Update to latest version from go-gitea/gitea (changelog : https://github.com/go-gitea/gitea/releases)
+
+## 1.21.11 (20-04-2024)
+- Update to latest version from go-gitea/gitea (changelog : https://github.com/go-gitea/gitea/releases)
+
+## 1.21.10 (30-03-2024)
+- Update to latest version from go-gitea/gitea (changelog : https://github.com/go-gitea/gitea/releases)
+
+## 1.21.9 (23-03-2024)
+- Update to latest version from go-gitea/gitea
+
+## 1.21.8 (16-03-2024)
+- Update to latest version from go-gitea/gitea
+
+## 1.21.7 (02-03-2024)
+
+- Update to latest version from go-gitea/gitea
+## 1.21.6-2 (27-02-2024)
+
+- Minor bugs fixed
+
+## 1.21.6 (24-02-2024)
+
+- Update to latest version from go-gitea/gitea
+
+## 1.21.5 (03-02-2024)
+
+- Update to latest version from go-gitea/gitea
+
+## 1.21.4 (20-01-2024)
+
+- Update to latest version from go-gitea/gitea
+
+## 1.21.3 (23-12-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.21.2 (14-12-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.21.1 (28-11-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.21.0-3 (21-11-2023)
+
+- Minor bugs fixed
+## 1.21.0 (15-11-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.20.5 (3-10-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.20.4-4 (23-09-2023)
+
+- Minor bugs fixed
+
+## 1.20.4-2 (09-09-2023)
+
+- Minor bugs fixed
+## 1.20.4 (8-09-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.20.3 (21-08-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.20.2 (05-08-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.20.1 (22-07-2023)
+
+- Update to version 1.20.1 from go-gitea/gitea
+## 1.20.0-2 (17-07-2023)
+
+- Minor bugs fixed
+## 1.20.0 (17-07-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.19.4 (5-07-2023)
+
+- Update to latest version from go-gitea/gitea
+
+## 1.19.3 (5-05-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.19.2 (28-04-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.19.1 (13-04-2023)
+
+- Update to latest version from go-gitea/gitea
+
+## 1.19.0 (24-03-2023)
+
+- Update to latest version from go-gitea/gitea
+- Implemented healthcheck
+## 1.18.5 (23-02-2023)
+
+- Update to latest version from go-gitea/gitea
+
+## 1.18.4 (20-02-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.18.3 (23-01-2023)
+
+- Update to latest version from go-gitea/gitea
+
+## 1.18.2 (21-01-2023)
+
+- Update to latest version from go-gitea/gitea
+
+## 1.18.1 (19-01-2023)
+
+- Update to latest version from go-gitea/gitea
+## 1.18.0 (31-12-2022)
+
+- Update to latest version from go-gitea/gitea
+- WARNING : update to supervisor 2022.11 before installing
+## 1.17.4 (22-12-2022)
+
+- Update to version 1.17.4 from go-gitea/gitea
+## 1.17.3 (17-10-2022)
+
+- Update to version 1.17.3 from go-gitea/gitea
+
+## 1.17.2.1 (26-09-2022)
+
+- fixed error with ssl
+
+## 1.17.2 (07-09-2022)
+
+- Update to version 1.17.2 from go-gitea/gitea
+
+## 1.17.1 (01-09-2022)
+
+- Update to latest version from go-gitea/gitea
diff --git a/gitea/Dockerfile b/gitea/Dockerfile
new file mode 100644
index 0000000..0ec50c3
--- /dev/null
+++ b/gitea/Dockerfile
@@ -0,0 +1,105 @@
+#################
+# 1 Build Image #
+#################
+
+ARG BUILD_FROM=gitea/gitea
+
+FROM ${BUILD_FROM}
+
+##################
+# 2 Modify Image #
+##################
+
+# Set S6 wait time
+ENV S6_CMD_WAIT_FOR_SERVICES=1 \
+ S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \
+ S6_SERVICES_GRACETIME=0
+
+
+USER root
+
+##################
+# 3 Install apps #
+##################
+
+# Add rootfs
+COPY rootfs/ /
+
+# Uses /bin for compatibility purposes
+# hadolint ignore=DL4005
+RUN if [ ! -f /bin/sh ] && [ -f /usr/bin/sh ]; then ln -s /usr/bin/sh /bin/sh; fi && \
+ if [ ! -f /bin/bash ] && [ -f /usr/bin/bash ]; then ln -s /usr/bin/bash /bin/bash; fi
+
+# Modules
+ARG MODULES="00-banner.sh 00-global_var.sh 01-custom_script.sh"
+
+# Automatic modules download
+ADD "https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/ha_automodules.sh" "/ha_automodules.sh"
+RUN chmod 744 /ha_automodules.sh && /ha_automodules.sh "$MODULES" && rm /ha_automodules.sh
+
+# Manual apps
+ENV PACKAGES=""
+
+# Automatic apps & bashio
+ADD "https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/ha_autoapps.sh" "/ha_autoapps.sh"
+RUN chmod 744 /ha_autoapps.sh && /ha_autoapps.sh "$PACKAGES" && rm /ha_autoapps.sh
+
+EXPOSE 22 3000
+
+################
+# 4 Entrypoint #
+################
+
+# Add entrypoint
+ENV S6_STAGE2_HOOK=/ha_entrypoint.sh
+ADD "https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/ha_entrypoint.sh" "/ha_entrypoint.sh"
+
+# Entrypoint modifications
+ADD "https://raw.githubusercontent.com/Mesteriis/hassio-addons-avm/master/.templates/ha_entrypoint_modif.sh" "/ha_entrypoint_modif.sh"
+RUN chmod 777 /ha_entrypoint.sh /ha_entrypoint_modif.sh && /ha_entrypoint_modif.sh && rm /ha_entrypoint_modif.sh
+
+
+ENTRYPOINT [ "/ha_entrypoint.sh" ]
+
+############
+# 5 Labels #
+############
+
+ARG BUILD_ARCH
+ARG BUILD_DATE
+ARG BUILD_DESCRIPTION
+ARG BUILD_NAME
+ARG BUILD_REF
+ARG BUILD_REPOSITORY
+ARG BUILD_VERSION
+LABEL \
+ io.hass.name="${BUILD_NAME}" \
+ io.hass.description="${BUILD_DESCRIPTION}" \
+ io.hass.arch="${BUILD_ARCH}" \
+ io.hass.type="addon" \
+ io.hass.version=${BUILD_VERSION} \
+ maintainer="alexbelgium (https://github.com/alexbelgium)" \
+ org.opencontainers.image.title="${BUILD_NAME}" \
+ org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
+ org.opencontainers.image.vendor="Home Assistant Add-ons" \
+ org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \
+ org.opencontainers.image.licenses="MIT" \
+ org.opencontainers.image.url="https://github.com/alexbelgium" \
+ org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
+ org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
+ org.opencontainers.image.created=${BUILD_DATE} \
+ org.opencontainers.image.revision=${BUILD_REF} \
+ org.opencontainers.image.version=${BUILD_VERSION}
+
+#################
+# 6 Healthcheck #
+#################
+
+ENV HEALTH_PORT="3000" \
+ HEALTH_URL=""
+HEALTHCHECK \
+ --interval=5s \
+ --retries=5 \
+ --start-period=30s \
+ --timeout=25s \
+ CMD curl --fail "http://127.0.0.1:${HEALTH_PORT}${HEALTH_URL}" &>/dev/null || exit 1
diff --git a/gitea/README.md b/gitea/README.md
new file mode 100644
index 0000000..09f1b86
--- /dev/null
+++ b/gitea/README.md
@@ -0,0 +1,56 @@
+# Home assistant add-on: Gitea
+
+[![Donate][donation-badge]](https://www.buymeacoffee.com/alexbelgium)
+[![Donate][paypal-badge]](https://www.paypal.com/donate/?hosted_button_id=DZFULJZTP3UQA)
+
+
+
+
+
+[](https://www.codacy.com/gh/Mesteriis/hassio-addons-avm/dashboard?utm_source=github.com&utm_medium=referral&utm_content=Mesteriis/hassio-addons-avm&utm_campaign=Badge_Grade)
+[](https://github.com/Mesteriis/hassio-addons-avm/actions/workflows/weekly-supelinter.yaml)
+[](https://github.com/Mesteriis/hassio-addons-avm/actions/workflows/onpush_builder.yaml)
+
+[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee%20(no%20paypal)-%23d32f2f?logo=buy-me-a-coffee&style=flat&logoColor=white
+[paypal-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee%20with%20Paypal-0070BA?logo=paypal&style=flat&logoColor=white
+
+_Thanks to everyone having starred my repo! To star it click on the image below, then it will be on top right. Thanks!_
+
+[](https://github.com/Mesteriis/hassio-addons-avm/stargazers)
+
+
+
+## About
+
+[Gitea](https://about.gitea.com/) is a painless self-hosted all-in-one software development service, it includes Git hosting, code review, team collaboration, package registry and CI/CD. It is similar to GitHub, Bitbucket and GitLab.
+
+Various tweaks and configuration options addition.
+This addon is based on the [docker image](https://hub.docker.com/r/gitea/gitea).
+
+## Configuration
+
+```yaml
+certfile: fullchain.pem #ssl certificate, must be located in /ssl
+keyfile: privkey.pem #sslkeyfile, must be located in /ssl
+ssl: should the app use https or not
+APP_NAME: name of the app
+DOMAIN: domain to be reached # default : homeassistant.local
+ROOT_URL: customize root_url, should not be needed unless specific needs
+```
+
+Webui can be found at `:port`.
+
+## Installation
+
+The installation of this add-on is pretty straightforward and not different in
+comparison to installing any other Hass.io add-on.
+
+1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance.
+1. Install this add-on.
+1. Click the `Save` button to store your configuration.
+1. Start the add-on.
+1. Check the logs of the add-on to see if everything went well.
+1. Go to the webui, where you will initialize the app
+1. Restart the addon, to apply any option that should be applied
+
+[repository]: https://github.com/Mesteriis/hassio-addons-avm
diff --git a/emby/apparmor.txt b/gitea/apparmor.txt
similarity index 63%
rename from emby/apparmor.txt
rename to gitea/apparmor.txt
index 7bdec83..c25695e 100644
--- a/emby/apparmor.txt
+++ b/gitea/apparmor.txt
@@ -1,22 +1,37 @@
#include
-profile addon_db21ed7f_emby_nas flags=(attach_disconnected,mediate_deleted) {
+profile gitea_addon flags=(attach_disconnected,mediate_deleted) {
#include
-
+
capability,
file,
+ signal,
mount,
umount,
remount,
+ network udp,
+ network tcp,
+ network dgram,
+ network stream,
+ network inet,
+ network inet6,
+ network netlink raw,
+ network unix dgram,
capability setgid,
capability setuid,
- capability sys_admin,
- capability dac_read_search,
+ capability sys_admin,
+ capability dac_read_search,
# capability dac_override,
# capability sys_rawio,
# S6-Overlay
+ /init ix,
+ /run/{s6,s6-rc*,service}/** ix,
+ /package/** ix,
+ /command/** ix,
+ /run/{,**} rwk,
+ /dev/tty rw,
/bin/** ix,
/usr/bin/** ix,
/usr/lib/bashio/** ix,
@@ -28,21 +43,23 @@ profile addon_db21ed7f_emby_nas flags=(attach_disconnected,mediate_deleted) {
/init rix,
/var/run/** mrwkl,
/var/run/ mrwkl,
- /dev/i2c-1 mrwkl,
+ /dev/i2c-1 mrwkl,
# Files required
+ /dev/fuse mrwkl,
/dev/sda1 mrwkl,
/dev/sdb1 mrwkl,
+ /dev/nvme0 mrwkl,
+ /dev/nvme1 mrwkl,
/dev/mmcblk0p1 mrwkl,
- /dev/ttyUSB0 mrwkl,
/dev/* mrwkl,
/tmp/** mrkwl,
-
+
# Data access
- /data/** rw,
+ /data/** rw,
# suppress ptrace denials when using 'docker ps' or using 'ps' inside a container
ptrace (trace,read) peer=docker-default,
-
+
# docker daemon confinement requires explict allow rule for signal
signal (receive) set=(kill,term) peer=/usr/bin/docker,
diff --git a/gitea/build.json b/gitea/build.json
new file mode 100644
index 0000000..936de61
--- /dev/null
+++ b/gitea/build.json
@@ -0,0 +1,9 @@
+{
+ "build_from": {
+ "aarch64": "gitea/gitea:latest",
+ "amd64": "gitea/gitea:latest"
+ },
+ "codenotary": {
+ "signer": "alexandrep.github@gmail.com"
+ }
+}
diff --git a/gitea/config.json b/gitea/config.json
new file mode 100644
index 0000000..150ca9a
--- /dev/null
+++ b/gitea/config.json
@@ -0,0 +1,103 @@
+{
+ "arch": [
+ "aarch64",
+ "amd64"
+ ],
+ "codenotary": "alexandrep.github@gmail.com",
+ "description": "Gitea for Home Assistant",
+ "devices": [
+ "/dev/dri",
+ "/dev/dri/card0",
+ "/dev/dri/card1",
+ "/dev/dri/renderD128",
+ "/dev/vchiq",
+ "/dev/video10",
+ "/dev/video11",
+ "/dev/video12",
+ "/dev/video13",
+ "/dev/video14",
+ "/dev/video15",
+ "/dev/video16",
+ "/dev/ttyUSB0",
+ "/dev/sda",
+ "/dev/sdb",
+ "/dev/sdc",
+ "/dev/sdd",
+ "/dev/sde",
+ "/dev/sdf",
+ "/dev/sdg",
+ "/dev/nvme",
+ "/dev/nvme0n1p1",
+ "/dev/nvme0n1p2",
+ "/dev/nvme0n1p3",
+ "/dev/nvme1n1p1",
+ "/dev/nvme1n1p2",
+ "/dev/nvme1n1p3",
+ "/dev/nvme2n1p1",
+ "/dev/nvme2n1p2",
+ "/dev/nvme3n1p3",
+ "/dev/mmcblk",
+ "/dev/fuse",
+ "/dev/sda1",
+ "/dev/sdb1",
+ "/dev/sdc1",
+ "/dev/sdd1",
+ "/dev/sde1",
+ "/dev/sdf1",
+ "/dev/sdg1",
+ "/dev/sda2",
+ "/dev/sdb2",
+ "/dev/sdc2",
+ "/dev/sdd2",
+ "/dev/sde2",
+ "/dev/sdf2",
+ "/dev/sdg2",
+ "/dev/sda3",
+ "/dev/sdb3",
+ "/dev/sda4",
+ "/dev/sdb4",
+ "/dev/sda5",
+ "/dev/sda6",
+ "/dev/sda7",
+ "/dev/sda8",
+ "/dev/nvme0",
+ "/dev/nvme1",
+ "/dev/nvme2"
+ ],
+ "image": "ghcr.io/alexbelgium/gitea-{arch}",
+ "init": false,
+ "map": [
+ "addon_config:rw",
+ "share:rw",
+ "ssl:rw"
+ ],
+ "name": "Gitea",
+ "options": {
+ "APP_NAME": "Gitea for Homeassistant",
+ "DOMAIN": "homeassistant.local",
+ "certfile": "fullchain.pem",
+ "keyfile": "privkey.pem",
+ "ssl": false
+ },
+ "ports": {
+ "22/tcp": 2222,
+ "3000/tcp": 3000
+ },
+ "ports_description": {
+ "22/tcp": "ssh",
+ "3000/tcp": "Web interface"
+ },
+ "schema": {
+ "APP_NAME": "str?",
+ "DOMAIN": "str?",
+ "ROOT_URL": "str?",
+ "certfile": "str",
+ "keyfile": "str",
+ "ssl": "bool"
+ },
+ "slug": "gitea",
+ "udev": true,
+ "url": "https://github.com/Mesteriis/hassio-addons-avm/tree/master/gitea",
+ "version": "1.22.0",
+ "webui": "[PROTO:ssl]://[HOST]:[PORT:3000]"
+}
diff --git a/gitea/icon.png b/gitea/icon.png
new file mode 100644
index 0000000..f0a2c3f
Binary files /dev/null and b/gitea/icon.png differ
diff --git a/gitea/logo.png b/gitea/logo.png
new file mode 100644
index 0000000..f0a2c3f
Binary files /dev/null and b/gitea/logo.png differ
diff --git a/gitea/rootfs/etc/cont-init.d/99-run.sh b/gitea/rootfs/etc/cont-init.d/99-run.sh
new file mode 100755
index 0000000..320107f
--- /dev/null
+++ b/gitea/rootfs/etc/cont-init.d/99-run.sh
@@ -0,0 +1,74 @@
+#!/usr/bin/env bashio
+# shellcheck shell=bash
+set -e
+
+for file in /data/gitea/conf/app.ini /etc/templates/app.ini; do
+
+ if [ ! -f "$file" ]; then
+ continue
+ fi
+
+ ##############
+ # SSL CONFIG #
+ ##############
+
+ # Clean values
+ sed -i "/PROTOCOL/d" "$file"
+ sed -i "/CERT_FILE/d" "$file"
+ sed -i "/KEY_FILE/d" "$file"
+
+ # Add ssl
+ bashio::config.require.ssl
+ if bashio::config.true 'ssl'; then
+ PROTOCOL=https
+ bashio::log.info "ssl is enabled"
+ sed -i "/server/a PROTOCOL=https" "$file"
+ sed -i "/server/a CERT_FILE=/ssl/$(bashio::config 'certfile')" "$file"
+ sed -i "/server/a KEY_FILE=/ssl/$(bashio::config 'keyfile')" "$file"
+ chmod 744 /ssl/*
+ else
+ PROTOCOL=http
+ sed -i "/server/a PROTOCOL=http" "$file"
+ fi
+
+ ##################
+ # ADAPT ROOT_URL #
+ ##################
+
+ if bashio::config.has_value 'ROOT_URL'; then
+ bashio::log.blue "ROOT_URL set, using value : $(bashio::config 'ROOT_URL')"
+ else
+ ROOT_URL="$PROTOCOL://$(bashio::config 'DOMAIN'):$(bashio::addon.port 3000)"
+ bashio::log.blue "ROOT_URL not set, using extrapolated value : $ROOT_URL"
+ sed -i "/server/a ROOT_URL=$ROOT_URL" "$file"
+ fi
+
+ ####################
+ # ADAPT PARAMETERS #
+ ####################
+
+ for param in APP_NAME DOMAIN ROOT_URL; do
+ # Remove parameter
+ sed -i "/$param/d" "$file"
+
+ # Define parameter
+ if bashio::config.has_value "$param"; then
+ echo "parameter set : $param=$(bashio::config "$param")"
+ sed -i "/server/a $param = \"$(bashio::config "$param")\"" "$file"
+
+ # Allow at setup
+ sed -i "1a $param=\"$(bashio::config "$param")\"" /etc/s6/gitea/setup
+
+ fi
+
+ done
+
+done
+
+##############
+# LAUNCH APP #
+##############
+
+bashio::log.info "Please wait while the app is loading !"
+
+/./usr/bin/entrypoint
diff --git a/gitea/stats.png b/gitea/stats.png
new file mode 100644
index 0000000..c0a4e00
Binary files /dev/null and b/gitea/stats.png differ
diff --git a/gitea/updater.json b/gitea/updater.json
new file mode 100644
index 0000000..d3d9660
--- /dev/null
+++ b/gitea/updater.json
@@ -0,0 +1,8 @@
+{
+ "last_update": "01-06-2024",
+ "repository": "Mesteriis/hassio-addons-avm",
+ "slug": "gitea",
+ "source": "github",
+ "upstream_repo": "go-gitea/gitea",
+ "upstream_version": "1.22.0"
+}
diff --git a/glances/CHANGELOG.md b/glances/CHANGELOG.md
deleted file mode 100644
index 9654fa4..0000000
--- a/glances/CHANGELOG.md
+++ /dev/null
@@ -1,19 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Upgrades python3 to 3.8.10-r0 @frenck (#149)
-- ⬆️ Bump zeroconf from 0.29.0 to 0.30.0 in /glances @dependabot (#148)
-- ⬆️ Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#150)
-- ⬆️ Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#151)
-- ⬆️ Bump zeroconf from 0.30.0 to 0.31.0 in /glances @dependabot (#153)
-- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#152)
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#154)
-- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#155)
-- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#156)
-- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#157)
-- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#158)
-- ⬆️ Upgrades add-on base image to v9.2.1 @frenck (#159)
-- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2 @dependabot (#160)
-- ⬆️ Bump netifaces from 0.10.9 to 0.11.0 in /glances @dependabot (#161)
-- ⬆️ Upgrades add-on base image to v9.2.2 @frenck (#163)
diff --git a/glances/DOCS.md b/glances/DOCS.md
deleted file mode 100644
index 99756c0..0000000
--- a/glances/DOCS.md
+++ /dev/null
@@ -1,236 +0,0 @@
-# Home Assistant Community Add-on: Glances
-
-Glances is a cross-platform monitoring tool which aims to present a maximum of
-information in a minimum of space through a Web-based interface.
-
-Glances can export all system statistics to InfluxDB, allowing you to look
-at all your system information and its behavior over time.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "Glances" add-on in the Supervisor add-on store
- and install it.
-1. Disable "Protection mode" in the add-on panel.
-1. Start the "Glances" add-on.
-1. Check the logs of the "Glances" to see if everything went well.
-1. Click the "OPEN WEB UI" button take a glance at Glances.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-process_info: false
-refresh_time: 10
-ssl: false
-certfile: fullchain.pem
-keyfile: privkey.pem
-influxdb:
- enabled: false
- host: a0d7b954-influxdb
- port: 8086
- username: glances
- password: "!secret glances_influxdb_password"
- database: glances
- prefix: localhost
- interval: 60
- ssl: false
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `process_info`
-
-If set to `true`, it will enable the process module of Glances and gives
-detailed insight into each individual process running on the system.
-
-**Note**: _Enabling this feature will increase CPU usage significantly._
-
-### Options: `refresh_time`
-
-Sets refresh time (in seconds).
-
-**Note**: _Refreshing more quickly will result in a higher CPU usage._
-
-### Option: `ssl`
-
-Enables/Disables SSL (HTTPS) on the Glances Web UI. Set it `true` to enable it,
-`false` otherwise.
-
-### Option: `certfile`
-
-The certificate file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `keyfile`
-
-The private key file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option group `influxdb`
-
----
-
-The following options are for the option group: `influxdb`. These settings
-only apply to the Glances InfluxDB data export.
-
-#### Option `influxdb`: `enabled`
-
-Enables/Disables the Glances data export to InfluxDB.
-
-#### Option `influxdb`: `host`
-
-The hostname where InfluxDB is running.
-
-**Note**: _If you are using the Community InfluxDB add-on,
-use `a0d7b954-influxdb` as the hostname._
-
-#### Option `influxdb`: `port`
-
-The port on which InfluxDB is listening.
-
-#### Option `influxdb`: `username`
-
-The username that you have created for Glances to authenticate against
-InfluxDB.
-
-#### Option `influxdb`: `password`
-
-The password for the above username option.
-
-#### Option `influxdb`: `database`
-
-The name of the database to store all Glances information into.
-
-**Note**: _It is strongly recommended to create a separate database for glances
-and not store this in the same database name as Home Assistant._
-
-#### Option `prefix`: `localhost`
-
-The hostname to append for exported data.
-
-**Note**: _For the Grafana Glances dashboard set this to `localhost`._
-
-#### Option `influxdb`: `interval`
-
-Defines the interval (in seconds) on how often Glances exports data to InfluxDB.
-
-#### Option `influxdb`: `ssl`
-
-Adding this option will allow SSL to be used on the InfluxDB connection. If not
-set will default to `false` which is the required setting for the Community
-InfluxDB add-on.
-
-## Adding Glances as a sensor into Home Assistant
-
-The Home Assistant Glances sensor platform is consuming the system information
-provided by the Glances API.
-
-This enables one to track and display their stats in Home Assistant,
-and even build automations based on that data.
-
-Set up the integration through **Configuration -> Integrations -> Glances**.
-
-**Note**: _Once the add-on is running, add the integration with all
-defaults, except for port, which should be 61209_
-
-More information about the Glances sensor platform can be found in the
-Home Assistant documentation:
-
-
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2019-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-glances/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-glances/97102?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-glances/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-glances/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/glances/README.md b/glances/README.md
deleted file mode 100644
index d9230b5..0000000
--- a/glances/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Home Assistant Community Add-on: Glances
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Glances is a cross-platform system monitoring tool written in Python.
-
-## About
-
-Glances is a cross-platform monitoring tool which aims to present a maximum of
-information in a minimum of space through a Web-based interface.
-
-Glances can export all system statistics to InfluxDB, allowing you to look
-at all your system information and its behavior over time.
-
-![Glances screenshot][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-glances/97102?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.12.2-blue.svg
-[release]: https://github.com/hassio-addons/addon-glances/tree/v0.12.2
-[screenshot]: https://github.com/hassio-addons/addon-glances/raw/main/images/screenshot.png
\ No newline at end of file
diff --git a/glances/config.json b/glances/config.json
deleted file mode 100644
index 8159798..0000000
--- a/glances/config.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
- "name": "Glances",
- "version": "0.12.2",
- "slug": "glances",
- "description": "A cross-platform system monitoring tool",
- "url": "https://github.com/hassio-addons/addon-glances",
- "ingress": true,
- "ingress_port": 0,
- "panel_icon": "mdi:speedometer",
- "startup": "services",
- "homeassistant": "0.92.0b2",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "ports": {
- "80/tcp": null
- },
- "ports_description": {
- "80/tcp": "Web interface (Not required for Ingress)"
- },
- "map": [
- "addons",
- "backup",
- "config:rw",
- "share",
- "ssl",
- "media"
- ],
- "hassio_api": true,
- "auth_api": true,
- "docker_api": true,
- "host_network": true,
- "host_pid": true,
- "apparmor": false,
- "options": {
- "log_level": "info",
- "process_info": false,
- "refresh_time": 10,
- "ssl": false,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem",
- "influxdb": {
- "enabled": false,
- "host": "a0d7b954-influxdb",
- "port": 8086,
- "username": "glances",
- "password": "",
- "database": "glances",
- "prefix": "localhost",
- "interval": 60
- }
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)",
- "process_info": "bool",
- "refresh_time": "int",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str",
- "influxdb": {
- "enabled": "bool",
- "host": "str",
- "port": "port",
- "username": "str",
- "password": "password",
- "database": "str",
- "prefix": "str",
- "interval": "int",
- "ssl": "bool?"
- },
- "leave_front_door_open": "bool?"
- },
- "environment": {
- "LOG_FORMAT": "{LEVEL}: {MESSAGE}"
- },
- "image": "ghcr.io/hassio-addons/glances/{arch}"
-}
\ No newline at end of file
diff --git a/glances/icon.png b/glances/icon.png
deleted file mode 100644
index a4fe9cd..0000000
Binary files a/glances/icon.png and /dev/null differ
diff --git a/glances/logo.png b/glances/logo.png
deleted file mode 100644
index 3288f59..0000000
Binary files a/glances/logo.png and /dev/null differ
diff --git a/google-assistant-webserver/Dockerfile b/google-assistant-webserver/Dockerfile
deleted file mode 100755
index 172b7a6..0000000
--- a/google-assistant-webserver/Dockerfile
+++ /dev/null
@@ -1,23 +0,0 @@
-FROM python:3.8-slim
-
-RUN set -x \
- # Install required system packages
- && apt-get update && apt-get install -y --no-install-recommends \
- jq \
- tzdata \
- portaudio19-dev \
- libffi-dev \
- libssl-dev
-
-# install python packages
-COPY requirements.txt .
-RUN pip install --upgrade -r requirements.txt
-
-EXPOSE 5000/tcp
-
-VOLUME [ "/data" ]
-
-WORKDIR /usr/src/app
-COPY /app /usr/src/app/
-
-CMD [ "python", "/usr/src/app/main.py" ]
\ No newline at end of file
diff --git a/google-assistant-webserver/README.md b/google-assistant-webserver/README.md
deleted file mode 100644
index d9ccf91..0000000
--- a/google-assistant-webserver/README.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Marcelveldt's Hassio Add-ons: Google Assistant Webserver
-
-## About
-
-Webservice for the Google Assistant SDK
-Allow you to send (broadcast) commands to Google Assistant
-
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Hass.io add-on.
-
-1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance.
-1. Install the "Google Assistant Webserver" add-on.
-1. Start the "Google Assistant Webserver" add-on.
-1. Check the logs of the add-on to see if everything went well.
-1. At the first start, you will need to authenticate with Google, use the "Open Web UI" button for that.
-1. Ready to go!
-
-
-## Usage in HomeAssistant
-
-Once you've set-up the webserver, you can add the component to HomeAssistant as notify component (for the broadcasts) and as script for the custom actions.
-
-### Broadcast component
-
-```yaml
-notify:
- - name: Google Assistant
- platform: rest
- resource: http://YOUR_HASS_IP_HERE:5000/broadcast
-```
-
-### Script component
-
-```yaml
-
-# define as rest_command in configuration
-rest_command:
- - google_assistant_command:
- url: 'http://YOUR_HASS_IP_HERE:5000/command?message={{ command }}'
-
-
-# example usage in script
-script:
- - google_cmd_test:
- service: rest_command.google_assistant_command
- data:
- command: "some command you want to throw at the assistant"
-```
-
-
-
-
-
-[repository]: https://github.com/marcelveldt/hassio-addons-repo
\ No newline at end of file
diff --git a/google-assistant-webserver/app/assistant.py b/google-assistant-webserver/app/assistant.py
deleted file mode 100755
index ce7d86b..0000000
--- a/google-assistant-webserver/app/assistant.py
+++ /dev/null
@@ -1,108 +0,0 @@
-"""Google Assistant Text Assistant."""
-import json
-import logging
-import os
-import sys
-from pathlib import Path
-
-import google.auth.transport.grpc
-import google.auth.transport.requests
-import google.oauth2.credentials
-from aiohttp import web
-from google.assistant.embedded.v1alpha2 import (embedded_assistant_pb2,
- embedded_assistant_pb2_grpc)
-
-import assistant_helpers
-
-
-ASSISTANT_API_ENDPOINT = 'embeddedassistant.googleapis.com'
-DEFAULT_GRPC_DEADLINE = 60 * 3 + 5
-PLAYING = embedded_assistant_pb2.ScreenOutConfig.PLAYING
-
-
-class GoogleTextAssistant(object):
- """Sample Assistant that supports text based conversations.
-
- Args:
- language_code: language for the conversation.
- device_model_id: identifier of the device model.
- device_id: identifier of the registered device instance.
- display: enable visual display of assistant response.
- cred_json: Filename of jsonfile containing credentials.
- deadline_sec: gRPC deadline in seconds for Google Assistant API call.
- """
-
- def __init__(self, language_code, device_model_id, device_id,
- cred_json:Path, display = True, deadline_sec = DEFAULT_GRPC_DEADLINE):
- self.language_code = language_code
- self.device_model_id = device_model_id
- self.device_id = device_id
- self.conversation_state = None
- # Force reset of first conversation.
- self.is_new_conversation = True
- self.display = display
- # open credentials
- with open(cred_json, 'r') as _file:
- credentials = google.oauth2.credentials.Credentials(token=None, **json.load(_file))
- http_request = google.auth.transport.requests.Request()
- credentials.refresh(http_request)
- # Create an authorized gRPC channel.
- grpc_channel = google.auth.transport.grpc.secure_authorized_channel(
- credentials, http_request, ASSISTANT_API_ENDPOINT)
- self.assistant = embedded_assistant_pb2_grpc.EmbeddedAssistantStub(
- grpc_channel
- )
- self.deadline = deadline_sec
-
- def __enter__(self):
- return self
-
- def __exit__(self, etype, e, traceback):
- if e:
- return False
-
- def assist(self, text_query):
- """Send a text request to the Assistant and playback the response.
- """
- def iter_assist_requests():
- config = embedded_assistant_pb2.AssistConfig(
- audio_out_config=embedded_assistant_pb2.AudioOutConfig(
- encoding='LINEAR16',
- sample_rate_hertz=16000,
- volume_percentage=0,
- ),
- dialog_state_in=embedded_assistant_pb2.DialogStateIn(
- language_code=self.language_code,
- conversation_state=self.conversation_state,
- is_new_conversation=self.is_new_conversation,
- ),
- device_config=embedded_assistant_pb2.DeviceConfig(
- device_id=self.device_id,
- device_model_id=self.device_model_id,
- ),
- text_query=text_query,
- )
- # Continue current conversation with later requests.
- self.is_new_conversation = False
- if self.display:
- config.screen_out_config.screen_mode = PLAYING
- req = embedded_assistant_pb2.AssistRequest(config=config)
- # This can be used to output the assistant request
- # assistant_helpers.log_assist_request_without_audio(req)
- yield req
-
- text_response = None
- html_response = None
- for resp in self.assistant.Assist(iter_assist_requests(),
- self.deadline):
- # This can be used to output the assistant response
- # assistant_helpers.log_assist_response_without_audio(resp)
- if resp.screen_out.data:
- html_response = resp.screen_out.data
- if resp.dialog_state_out.conversation_state:
- conversation_state = resp.dialog_state_out.conversation_state
- self.conversation_state = conversation_state
- if resp.dialog_state_out.supplemental_display_text:
- text_response = resp.dialog_state_out.supplemental_display_text()
- return text_response, html_response
-
diff --git a/google-assistant-webserver/app/assistant_helpers.py b/google-assistant-webserver/app/assistant_helpers.py
deleted file mode 100644
index 4e41a6b..0000000
--- a/google-assistant-webserver/app/assistant_helpers.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (C) 2017 Google Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Helper functions for the Google Assistant API."""
-
-import logging
-
-from google.assistant.embedded.v1alpha2 import embedded_assistant_pb2
-
-
-def log_assist_request_without_audio(assist_request):
- """Log AssistRequest fields without audio data."""
- if logging.getLogger().isEnabledFor(logging.DEBUG):
- resp_copy = embedded_assistant_pb2.AssistRequest()
- resp_copy.CopyFrom(assist_request)
- if len(resp_copy.audio_in) > 0:
- size = len(resp_copy.audio_in)
- resp_copy.ClearField('audio_in')
- logging.debug('AssistRequest: audio_in (%d bytes)',
- size)
- return
- logging.debug('AssistRequest: %s', resp_copy)
-
-
-def log_assist_response_without_audio(assist_response):
- """Log AssistResponse fields without audio data."""
- if logging.getLogger().isEnabledFor(logging.DEBUG):
- resp_copy = embedded_assistant_pb2.AssistResponse()
- resp_copy.CopyFrom(assist_response)
- has_audio_data = (resp_copy.HasField('audio_out') and
- len(resp_copy.audio_out.audio_data) > 0)
- if has_audio_data:
- size = len(resp_copy.audio_out.audio_data)
- resp_copy.audio_out.ClearField('audio_data')
- if resp_copy.audio_out.ListFields():
- logging.debug('AssistResponse: %s audio_data (%d bytes)',
- resp_copy,
- size)
- else:
- logging.debug('AssistResponse: audio_data (%d bytes)',
- size)
- return
- logging.debug('AssistResponse: %s', resp_copy)
diff --git a/google-assistant-webserver/app/auth.html b/google-assistant-webserver/app/auth.html
deleted file mode 100644
index 4b3f265..0000000
--- a/google-assistant-webserver/app/auth.html
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- In order to use the Google Assistant webserver, you need to authenticate your Google account (once).
- Please click the button below to start the authentication process.
- Once you received the authentication token, come back to this page to submit it.
-
- Authenticate
-
-
Step 2
- Once you received the token, paste it below and click submit.
-
-
-
-
-
-
-
-
- Authentication finished. You can now issue commands to Google Assistant.
-
- Submit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/google-assistant-webserver/app/main.py b/google-assistant-webserver/app/main.py
deleted file mode 100644
index 101239e..0000000
--- a/google-assistant-webserver/app/main.py
+++ /dev/null
@@ -1,67 +0,0 @@
-"""Main entrypoint: webserver handling commands to google assistant."""
-import json
-import logging
-import os
-from pathlib import Path
-
-from aiohttp import web
-
-from assistant import GoogleTextAssistant
-from auth import AuthHandler
-
-LOGGER = logging.getLogger()
-
-CLIENT_JSON = Path(os.path.join(os.path.dirname(os.path.abspath(__file__)), "client_secrets.json"))
-CRED_JSON = Path("/data/cred.json")
-if not os.path.isdir("/data"):
- CRED_JSON = Path(os.path.join(os.path.dirname(os.path.abspath(__file__)), "cred.json"))
-
-routes = web.RouteTableDef()
-
-
-@routes.get("/broadcast")
-async def broadcast_message(request):
- message = request.query.get("message", default="This is a test!")
- text_query = "broadcast " + message
- with GoogleTextAssistant("en-US", "HA_GA", "HA_GA_TEXT_SERVER", CRED_JSON) as assistant:
- response_text, response_html = assistant.assist(text_query=text_query)
- return web.Response(text=response_text)
-
-
-@routes.get("/command")
-async def command(request):
- message = request.query.get("message", default="This is a test!")
- with GoogleTextAssistant("en-US", "HA_GA", "HA_GA_TEXT_SERVER", CRED_JSON) as assistant:
- response_text, response_html = assistant.assist(text_query=message)
- return web.Response(text=response_text)
-
-
-@routes.get("/")
-async def index(request):
- """Landingpage."""
- if not CRED_JSON.exists():
- raise web.HTTPFound("/auth")
- html_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "index.html")
- return web.FileResponse(html_file)
-
-
-@routes.get("/auth")
-async def auth(request):
- """Authenticate with google."""
- html_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), "auth.html")
- with open(html_file) as _file:
- html = _file.read()
- html = html.replace("[[AUTH_URL]]", request.app["auth"].auth_url)
- return web.Response(text=html, content_type="text/html")
-
-
-app = web.Application()
-app.add_routes(routes)
-
-with CLIENT_JSON.open("r") as data:
- user_data = json.load(data)["installed"]
-auth = AuthHandler(user_data, CRED_JSON)
-app.router.add_post("/token", auth.token)
-app["auth"] = auth
-
-web.run_app(app, port=5000)
diff --git a/google-assistant-webserver/config.json b/google-assistant-webserver/config.json
deleted file mode 100755
index 7a1bcc9..0000000
--- a/google-assistant-webserver/config.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "name": "Google Assistant Webserver",
- "version": "0.0.10",
- "description": "Webservice for the Google Assistant SDK - Allow you to send (broadcast) commands to Google Assistant",
- "slug": "google_assistant_webserver",
- "startup": "application",
- "boot": "auto",
- "arch": ["armhf", "amd64", "aarch64"],
- "devices": ["/dev/snd:/dev/snd:rwm"],
- "ports": {
- "5000/tcp": 5000
- },
- "ingress": true,
- "ingress_port": 5000,
- "webui": "http://[HOST]:[PORT:5000]",
- "options": {
- },
- "schema": {
- }
-}
diff --git a/google-assistant-webserver/logo.png b/google-assistant-webserver/logo.png
deleted file mode 100755
index 4f2e879..0000000
Binary files a/google-assistant-webserver/logo.png and /dev/null differ
diff --git a/google-assistant-webserver/requirements.txt b/google-assistant-webserver/requirements.txt
deleted file mode 100644
index c1ca9f6..0000000
--- a/google-assistant-webserver/requirements.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-aiohttp[speedups]
-google-assistant-sdk[samples]
-google-auth-oauthlib[tool]
-uvloop
\ No newline at end of file
diff --git a/grafana/CHANGELOG.md b/grafana/CHANGELOG.md
deleted file mode 100644
index 3f62a5a..0000000
--- a/grafana/CHANGELOG.md
+++ /dev/null
@@ -1,5 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Upgrades Grafana to v8.0.2 @frenck (#172)
diff --git a/grafana/DOCS.md b/grafana/DOCS.md
deleted file mode 100644
index 3b7639b..0000000
--- a/grafana/DOCS.md
+++ /dev/null
@@ -1,215 +0,0 @@
-# Home Assistant Community Add-on: Grafana
-
-The analytics platform for all your metrics.
-
-Grafana allows you to query, visualize, alert on and understand your metrics
-no matter where they are stored. Create, explore, and share dashboards. Learn
-about your Home Automation system using sexy and compelling graphs, and other
-data visualizations.
-
-Combine this add-on with the InfluxDB add-on to get insanely powerful
-insights to your home.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "Grafana" add-on in the Supervisor add-on store.
-1. Install the "Grafana" add-on.
-1. Start the "Grafana" add-on.
-1. Check the logs of the "Grafana" to see if everything went well.
-1. Open the Web UI.
-
-**Note**: As the addon now supports both Ingress and direct access, the default
-`admin` user has a password of `hassio`. **Due to the implementation the
-password cannot be changed, however you can delete and create a new user, if so
-please ensure to update the `grafana_ingress_user` option.**
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-grafana_ingress_user: frenck
-plugins:
- - ayoungprogrammer-finance-datasource
- - grafana-clock-panel
-env_vars:
- - name: GF_DEFAULT_INSTANCE_NAME
- value: Hassio
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `grafana_ingress_user`
-
-When using Ingress grafana will automatically log in by default with a username
-of `admin`. If a different user is required this option can be set.
-
-### Option: `plugins`
-
-Allows you to specify additional Grafana plugins to be installed to your
-Grafana setup. For a list of available plugins, see:
-
-
-
-**Note**: _Adding plugins will result in a longer start-up for the add-on._
-
-### Option: `env_vars`
-
-This option allows you to tweak every aspect of Grafana by setting
-configuration options using environment variables. See the example at the
-start of this chapter to get an idea of how the configuration looks.
-
-For more information about using these variables, see the official Grafana
-documentation:
-
-
-
-**Note**: _Only environment variables starting with `GF_` are accepted.\_
-
-## Using it with the InfluxDB Community add-on
-
-Grafana does not come out of the box pre-configured, but letting it interact
-with the community [InfluxDB add-on][influxdb-addon] is pretty easy. Please,
-follow the instructions from the on how to [create a database][create-db]
-for Home Assistant.
-
-1. Create a new user for Grafana on InfluxDB
- (InfluxDB Admin -> Users and "+ Create User")
-1. Login into Grafana
-1. Create a new datasource:
-
-- Name: Anything you want, e.g., Home Assistant
-- Type: InfluxDB
-- HTTP > URL: `http://a0d7b954-influxdb:8086`
-- HTTP > Access: Server (Default)
-- Auth: (leave them all disabled)
-- InfluxDB Details > Database: _Your Home Assistant InfluxDB database_,
- e.g., `homeassistant`
-- InfluxDB Details > User: _Grafana InfluxDB username defined in step 1_
-- InfluxDB Details > Password: _Grafana InfluxDB user password defined_
- _in step 1_
-
-1. Hit Save & Test
-
-## Anonymous Access
-
-Anonymous access on a local network is possible by exposing the port in the
-add-on configuration, along with setting the following environment variables:
-
-```yaml
-env_vars:
- - name: GF_AUTH_ANONYMOUS_ENABLED
- value: "true"
- - name: GF_AUTH_ANONYMOUS_ORG_NAME
- value: "Main Org."
- - name: GF_AUTH_ANONYMOUS_ORG_ROLE
- value: "Viewer"
-```
-
-It is not possible to enable anonymous or non-administrator access with Home
-Assistant Cloud. This includes embedding Grafana resources with an iframe or
-rendered image inside of a dashboard. For more details see
-[Anonymous login not working, Grafana add-on 3.0.0 #55](https://github.com/hassio-addons/addon-grafana/issues/55).
-
-## Known issues and limitations
-
-- This add-on does support ARM-based devices, nevertheless, they must
- at least be an ARMv7 device. (Raspberry Pi 1 and Zero is not supported).
-- `To render a panel image, you must install the Grafana Image Renderer plugin.`
- This message is shown on ARM devices, like a Raspberry Pi. The Grafana Image
- Renderer plugin is not available for these devices.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2018-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-grafana/graphs/contributors
-[create-db]: https://github.com/hassio-addons/addon-influxdb/blob/main/influxdb/DOCS.md#integrating-into-home-assistant
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-grafana/54674?u=frenck
-[frenck]: https://github.com/frenck
-[influxdb-addon]: https://github.com/hassio-addons/addon-influxdb
-[issue]: https://github.com/hassio-addons/addon-grafana/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-grafana/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/grafana/README.md b/grafana/README.md
deleted file mode 100644
index 6497504..0000000
--- a/grafana/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Home Assistant Community Add-on: Grafana
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-The open platform for beautiful analytics and monitoring.
-
-## About
-
-The analytics platform for all your metrics.
-
-Grafana allows you to query, visualize, alert on and understand your metrics
-no matter where they are stored. Create, explore, and share dashboards. Learn
-about your Home Automation system using sexy and compelling graphs, and other
-data visualizations.
-
-Combine this add-on with the InfluxDB add-on to get insanely powerful
-insights to your home.
-
-![Grafana in the Home Assistant Frontend][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-grafana/54674?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
-[release-shield]: https://img.shields.io/badge/version-v7.0.1-blue.svg
-[release]: https://github.com/hassio-addons/addon-grafana/tree/v7.0.1
-[screenshot]: https://github.com/hassio-addons/addon-grafana/raw/main/images/screenshot.png
\ No newline at end of file
diff --git a/grafana/config.json b/grafana/config.json
deleted file mode 100644
index dce42ed..0000000
--- a/grafana/config.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "name": "Grafana",
- "version": "7.0.1",
- "slug": "grafana",
- "description": "The open platform for beautiful analytics and monitoring",
- "url": "https://github.com/hassio-addons/addon-grafana",
- "startup": "services",
- "ingress": true,
- "ingress_port": 1337,
- "panel_icon": "mdi:chart-timeline",
- "panel_title": "Grafana",
- "arch": [
- "aarch64",
- "amd64",
- "armv7"
- ],
- "map": [
- "config",
- "ssl"
- ],
- "watchdog": "http://[HOST]:1337/api/health",
- "options": {
- "plugins": [],
- "env_vars": [],
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem"
- },
- "ports": {
- "80/tcp": null
- },
- "ports_description": {
- "80/tcp": "Not required for Ingress"
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "plugins": [
- "str"
- ],
- "certfile": "str",
- "keyfile": "str",
- "ssl": "bool",
- "grafana_ingress_user": "str?",
- "env_vars": [
- {
- "name": "match(^GF_([A-Z0-9_])+$)",
- "value": "str"
- }
- ]
- },
- "image": "ghcr.io/hassio-addons/grafana/{arch}"
-}
\ No newline at end of file
diff --git a/grafana/icon.png b/grafana/icon.png
deleted file mode 100644
index e9dff3b..0000000
Binary files a/grafana/icon.png and /dev/null differ
diff --git a/grafana/logo.png b/grafana/logo.png
deleted file mode 100644
index 081dfb3..0000000
Binary files a/grafana/logo.png and /dev/null differ
diff --git a/influxdb/CHANGELOG.md b/influxdb/CHANGELOG.md
deleted file mode 100644
index e238a6f..0000000
--- a/influxdb/CHANGELOG.md
+++ /dev/null
@@ -1,8 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#167)
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#168)
-- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#169)
-- ⬆️ Upgrades InfluxDB to 1.8.6 @frenck (#170)
diff --git a/influxdb/DOCS.md b/influxdb/DOCS.md
deleted file mode 100644
index 7ca434e..0000000
--- a/influxdb/DOCS.md
+++ /dev/null
@@ -1,234 +0,0 @@
-# Home Assistant Community Add-on: InfluxDB
-
-InfluxDB is an open source time series database optimized for high-write-volume.
-It's useful for recording metrics, sensor data, events,
-and performing analytics. It exposes an HTTP API for client interaction and is
-often used in combination with Grafana to visualize the data.
-
-This add-on comes with Chronograf & Kapacitor pre-installed as well. Which
-gives you a nice InfluxDB admin interface for managing your users, databases,
-data retention settings, and lets you peek inside the database using the
-Data Explorer.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "InfluxDB" add-on in the Supervisor add-on store and install it.
-1. Start the "InfluxDB" add-on.
-1. Check the logs of the "InfluxDB" to see if everything went well.
-1. Click the "OPEN WEB UI" button!
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-auth: true
-reporting: true
-ssl: true
-certfile: fullchain.pem
-keyfile: privkey.pem
-envvars:
- - name: INFLUXDB_HTTP_LOG_ENABLED
- value: "true"
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `auth`
-
-Enable or disable InfluxDB user authentication.
-
-**Note**: _Turning this off is NOT recommended!_
-
-### Option: `reporting`
-
-This option allows you to disable the reporting of usage data to InfluxData.
-
-**Note**: _No data from user databases is ever transmitted!_
-
-### Option: `ssl`
-
-Enables/Disables SSL (HTTPS) on the web interface.
-Set it `true` to enable it, `false` otherwise.
-
-**Note**: _This does NOT activate SSL for InfluxDB, just the web interface_
-
-### Option: `certfile`
-
-The certificate file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `keyfile`
-
-The private key file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `envvars`
-
-This allows the setting of Environment Variables to control InfluxDB
-configuration as documented at:
-
-
-
-**Note**: _Changing these options can possibly cause issues with you instance.
-USE AT YOUR OWN RISK!_
-
-These are case sensitive.
-
-#### Sub-option: `name`
-
-The name of the environment variable to set which must start with `INFLUXDB_`
-
-#### Sub-option: `value`
-
-The value of the environment variable to set, set the Influx documentation for
-full details. Values should always be entered as a string (even true/false values).
-
-### Option: `leave_front_door_open`
-
-Adding this option to the add-on configuration allows you to disable
-authentication on the Web Terminal by setting it to `true` and leaving the
-username and password empty.
-
-**Note**: _We STRONGLY suggest, not to use this, even if this add-on is
-only exposed to your internal network. USE AT YOUR OWN RISK!_
-
-## Integrating into Home Assistant
-
-The `influxdb` integration of Home Assistant makes it possible to transfer all
-state changes to an InfluxDB database.
-
-You need to do the following steps in order to get this working:
-
-- Click on "OPEN WEB UI" to open the admin web-interface provided by this add-on.
-- On the left menu click on the "InfluxDB Admin".
-- Create a database for storing Home Assistant's data in, e.g., `homeassistant`.
-- Go to the users tab and create a user for Home Assistant,
- e.g., `homeassistant`.
-- Add "ALL" to "Permissions" of the created user, to allow writing to your
- database.
-
-Now we've got this in place, add the following snippet to your Home Assistant
-`configuration.yaml` file.
-
-```yaml
-influxdb:
- host: a0d7b954-influxdb
- port: 8086
- database: homeassistant
- username: homeassistant
- password:
- max_retries: 3
- default_measurement: state
-```
-
-Restart Home Assistant.
-
-You should now see the data flowing into InfluxDB by visiting the web-interface
-and using the Data Explorer.
-
-Full details of the Home Assistant integration can be found here:
-
-
-
-## Known issues and limitations
-
-- While the Chronograph interface supports SSL, currently, the add-on does
- not support having SSL on InfluxDB. This limitation is caused by
- Chronograf and we are still looking into a proper solution for this.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2018-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-influxdb/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-influxdb/54491?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-influxdb/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-influxdb/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/influxdb/README.md b/influxdb/README.md
deleted file mode 100644
index 481b548..0000000
--- a/influxdb/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Home Assistant Community Add-on: InfluxDB
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Scalable datastore for metrics, events, and real-time analytics.
-
-## About
-
-InfluxDB is an open source time series database optimized for high-write-volume.
-It's useful for recording metrics, sensor data, events,
-and performing analytics. It exposes an HTTP API for client interaction and if
-often used in combination with Grafana to visualize the data.
-
-This add-on comes with Chronograf & Kapacitor pre-installed as well. Which
-gives you a nice InfluxDB admin interface for managing your users, databases,
-data retention settings, and lets you peek inside the database using the
-Data Explorer.
-
-![Chronograf in the Home Assistant Frontend][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-influxdb/54491?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
-[release-shield]: https://img.shields.io/badge/version-v4.1.1-blue.svg
-[release]: https://github.com/hassio-addons/addon-influxdb/tree/v4.1.1
-[screenshot]: https://github.com/hassio-addons/addon-influxdb/raw/main/images/screenshot.png
\ No newline at end of file
diff --git a/influxdb/config.json b/influxdb/config.json
deleted file mode 100644
index 5a345be..0000000
--- a/influxdb/config.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "name": "InfluxDB",
- "version": "4.1.1",
- "slug": "influxdb",
- "description": "Scalable datastore for metrics, events, and real-time analytics",
- "url": "https://github.com/hassio-addons/addon-influxdb",
- "ingress": true,
- "ingress_port": 1337,
- "panel_icon": "mdi:chart-areaspline",
- "startup": "services",
- "homeassistant": "0.92.0b2",
- "hassio_api": true,
- "arch": [
- "aarch64",
- "amd64",
- "armv7",
- "i386"
- ],
- "init": false,
- "map": [
- "share:rw",
- "ssl"
- ],
- "ports": {
- "80/tcp": null,
- "8086/tcp": 8086
- },
- "ports_description": {
- "80/tcp": "Web interface (Not required for Ingress)",
- "8086/tcp": "InfluxDB server"
- },
- "auth_api": true,
- "options": {
- "auth": true,
- "reporting": true,
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem",
- "envvars": []
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "auth": "bool",
- "reporting": "bool",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str",
- "envvars": [
- {
- "name": "match(^INFLUXDB_([A-Z0-9_])+$)",
- "value": "str"
- }
- ],
- "leave_front_door_open": "bool?"
- },
- "image": "ghcr.io/hassio-addons/influxdb/{arch}"
-}
\ No newline at end of file
diff --git a/influxdb/icon.png b/influxdb/icon.png
deleted file mode 100644
index e97bdce..0000000
Binary files a/influxdb/icon.png and /dev/null differ
diff --git a/influxdb/logo.png b/influxdb/logo.png
deleted file mode 100644
index 1683a09..0000000
Binary files a/influxdb/logo.png and /dev/null differ
diff --git a/jupyterlab/CHANGELOG.md b/jupyterlab/CHANGELOG.md
deleted file mode 100644
index 3b8c09e..0000000
--- a/jupyterlab/CHANGELOG.md
+++ /dev/null
@@ -1,16 +0,0 @@
-## What’s changed
-
-## ✨ New features
-
-- Add Seaborn by default @frenck (#245)
-
-## ⬆️ Dependency updates
-
-- ⬆ Upgrades libpq5 to 11.10-0+deb10u1 @frenck (#238)
-- ⬆️ Bump actions/stale from v3.0.15 to v3.0.16 @dependabot (#236)
-- ⬆️ Bump frenck/action-addon-linter from v1.4 to v2 @dependabot (#237)
-- ⬆️ Bump release-drafter/release-drafter from v5.13.0 to v5.14.0 @dependabot (#240)
-- ⬆️ Bump docker/build-push-action from v2.2.2 to v2.3.0 @dependabot (#242)
-- ⬆️ Bump actions/stale from v3.0.16 to v3.0.17 @dependabot (#243)
-- ⬆ Upgrades nodejs to 12.20.2-1nodesource1 @frenck (#244)
-- ⬆ Upgrades nodejs to 12.21.0-1nodesource1 @frenck (#246)
diff --git a/jupyterlab/DOCS.md b/jupyterlab/DOCS.md
deleted file mode 100644
index 9af340d..0000000
--- a/jupyterlab/DOCS.md
+++ /dev/null
@@ -1,171 +0,0 @@
-# Home Assistant Community Add-on: JupyterLab
-
-JupyterLab is an open-source web application that allows you to create and share
-documents that contain live code, equations, visualizations and narrative text.
-Uses include: data cleaning and transformation, numerical simulation,
-statistical modeling, data visualization, machine learning, and much more.
-
-This add-on runs JupyterLab, which is the next-generation user interface for
-Project Jupyter. It is an extensible environment for interactive and
-reproducible computing, based on the Jupyter Notebook and Architecture.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "JupyterLab" add-on in the Supervisor add-on store
- and install it.
-1. Start the "JupyterLab" add-on
-1. Check the logs of the "JupyterLab" add-on to see if everything went well.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-github_access_token: abcdef1234567890abcdef0123456789abcdef01
-system_packages:
- - ffmpeg
-init_commands:
- - pip install virtualenv
- - pip install yamllint
-```
-
-**Note**: _This is just an example, don't copy and past it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `github_access_token`
-
-Sets an GitHub access token. When making unauthenticated requests to GitHub
-(as we must do to get repository data), GitHub imposes fairly strict rate-limits
-on how many requests we can make. As such, you are likely to hit that limit
-within a few minutes of work.
-
-There is a chapter in this document with instruction on obtaining such a token.
-
-**Note**: _This option support secrets, e.g., `!secret github_token`._
-
-### Option: `system_packages`
-
-Allows you to specify additional [Alpine packages][alpine-packages] to be
-installed to your JupyterLab setup (e.g., `g++`. `make`, `ffmpeg`).
-
-**Note**: _Adding many packages will result in a longer start-up time
-for the add-on._
-
-#### Option: `init_commands`
-
-Customize your environment even more with the `init_commands` option.
-Add one or more shell commands to the list, and they will be executed every
-single time this add-on starts.
-
-## Getting a GitHub access token
-
-You can get an access token by following these steps:
-
-1. [Verify][github-verify] your email address with GitHub.
-1. Go to your account settings on GitHub and select "Developer Settings"
- from the left panel.
-1. On the left, select "Personal access tokens"
-1. Click the "Generate new token" button, and enter your password.
-1. Give the token a description, and check the "**repo**" scope box.
-1. Click "Generate token"
-1. You should be given a string which will be your access token.
-
-Remember that this token is effectively a password for your GitHub account.
-_Do not_ share it online or check the token into version control,
-as people can use it to access all of your data on GitHub.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2018-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[alpine-packages]: https://pkgs.alpinelinux.org/packages
-[contributors]: https://github.com/hassio-addons/addon-jupyterlab/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-jupyterlab/87337?u=frenck
-[frenck]: https://github.com/frenck
-[github-verify]: https://help.github.com/articles/verifying-your-email-address
-[issue]: https://github.com/hassio-addons/addon-jupyterlab/issues
-[python-packages]: https://pypi.org/
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-jupyterlab/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/jupyterlab/README.md b/jupyterlab/README.md
deleted file mode 100644
index c7466cb..0000000
--- a/jupyterlab/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Home Assistant Community Add-on: JupyterLab
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Create documents containing live code, equations, visualizations,
-and explanatory text.
-
-![The JupyterLab add-on][screenshot]
-
-## About
-
-JupyterLab is an open-source web application that allows you to create and share
-documents that contain live code, equations, visualizations and narrative text.
-Uses include: data cleaning and transformation, numerical simulation,
-statistical modeling, data visualization, machine learning, and much more.
-
-This add-on runs JupyterLab, which is the next-generation user interface for
-Project Jupyter. It is an extensible environment for interactive and
-reproducible computing, based on the Jupyter Notebook and Architecture.
-
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-jupyterlab-lite/87337?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.5.0-blue.svg
-[release]: https://github.com/hassio-addons/addon-jupyterlab/tree/v0.5.0
-[screenshot]: https://github.com/hassio-addons/addon-jupyterlab/raw/main/images/screenshot.png
\ No newline at end of file
diff --git a/jupyterlab/config.json b/jupyterlab/config.json
deleted file mode 100644
index 206bde2..0000000
--- a/jupyterlab/config.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "JupyterLab",
- "version": "0.5.0",
- "slug": "jupyterlablite",
- "description": "Create documents containing live code, equations, visualizations, and explanatory text",
- "url": "https://github.com/hassio-addons/addon-jupyterlab",
- "ingress": true,
- "panel_icon": "mdi:flask-outline",
- "arch": [
- "aarch64",
- "amd64"
- ],
- "homeassistant_api": true,
- "map": [
- "config:rw",
- "share:rw"
- ],
- "options": {
- "github_access_token": "",
- "system_packages": [],
- "init_commands": []
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "github_access_token": "password",
- "system_packages": [
- "str"
- ],
- "init_commands": [
- "str"
- ]
- },
- "image": "ghcr.io/hassio-addons/jupyterlab/{arch}"
-}
\ No newline at end of file
diff --git a/jupyterlab/icon.png b/jupyterlab/icon.png
deleted file mode 100644
index 20e4bae..0000000
Binary files a/jupyterlab/icon.png and /dev/null differ
diff --git a/jupyterlab/logo.png b/jupyterlab/logo.png
deleted file mode 100644
index 2301809..0000000
Binary files a/jupyterlab/logo.png and /dev/null differ
diff --git a/log-viewer/CHANGELOG.md b/log-viewer/CHANGELOG.md
deleted file mode 100644
index c522f47..0000000
--- a/log-viewer/CHANGELOG.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## What’s changed
-
-## ✨ New features
-
-- Add translation support @frenck (#86)
-
-## 🚀 Enhancements
-
-- Remove NGINX access log from Supervisor log output @frenck (#85)
-
-## 🧰 Maintenance
-
-- Apply updated repository structure & CI workflow @frenck (#84)
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump actions/cache from v2.1.4 to v2.1.5 @dependabot (#75)
-- ⬆️ Upgrades nodejs to 14.16.1-r1 @frenck (#76)
-- ⬆️ Bump brpaz/hadolint-action from v1.3.1 to v1.4.0 @dependabot (#77)
-- ⬆️ Bump docker/setup-buildx-action from v1.1.2 to v1.2.0 @dependabot (#78)
-- ⬆️ Bump docker/setup-qemu-action from v1.0.2 to v1.1.0 @dependabot (#79)
-- ⬆️ Bump docker/login-action from v1.8.0 to v1.9.0 @dependabot (#80)
-- ⬆️ Bump docker/setup-buildx-action from v1.2.0 to v1.3.0 @dependabot (#81)
-- ⬆️ Upgrades add-on base image to v9.2.0 @frenck (#83)
diff --git a/log-viewer/DOCS.md b/log-viewer/DOCS.md
deleted file mode 100644
index 5678156..0000000
--- a/log-viewer/DOCS.md
+++ /dev/null
@@ -1,155 +0,0 @@
-# Home Assistant Community Add-on: Log Viewer
-
-Easily monitor your Home Assistant logs in your web browser. Custom filtering
-is available to make it simple to differentiate different types of logs.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "Log Viewer" add-on in the Supervisor add-on store and
- install it.
-1. Start the "Log Viewer" add-on
-1. Check the logs of the "Log Viewer" add-on to see if everything went well.
-1. Open the web UI for the "Log Viewer" add-on to start watching logs.
-
-**Tip:** To see more logs, be sure to enable the [`logger`][logger] integration
-in your Home Assistant `configuration.yaml`:
-
-```yaml
-logger:
- default: info
-```
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-ssl: false
-certfile: fullchain.pem
-keyfile: privkey.pem
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `ssl`
-
-Enables/Disables SSL on the Log Viewer. Set it `true` to enable it,
-`false` otherwise.
-
-**Note**: _The SSL settings only apply to direct access and has no effect
-on the Ingress service._
-
-### Option: `certfile`
-
-The certificate file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `keyfile`
-
-The private key file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `leave_front_door_open`
-
-Adding this option to the add-on configuration allows you to disable
-authentication on the add-on by setting it to `true` and leaving the
-username and password empty.
-
-**Note**: _We STRONGLY suggest, not to use this, even if this add-on is
-only exposed to your internal network. USE AT YOUR OWN RISK!_
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Dale Higgs][dale3h].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2018-2021 Dale Higgs <@dale3h>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-log-viewer/graphs/contributors
-[dale3h]: https://github.com/dale3h
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-log-viewer/64377?u=dale3h
-[issue]: https://github.com/hassio-addons/addon-log-viewer/issues
-[logger]: https://www.home-assistant.io/integrations/logger/
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-log-viewer/releases
-[semver]: https://semver.org/spec/v2.0.0
diff --git a/log-viewer/README.md b/log-viewer/README.md
deleted file mode 100644
index 8ea04b5..0000000
--- a/log-viewer/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Home Assistant Community Add-on: Log Viewer
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]
-
-Browser-based log utility for Home Assistant.
-
-## About
-
-Easily monitor your Home Assistant logs in your web browser. Custom filtering
-is available to make it simple to differentiate different types of logs.
-
-[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/guidelines/download-assets-sm-2.svg
-[buymeacoffee]: https://www.buymeacoffee.com/dale3h
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-log-viewer/64377?u=dale3h
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.11.0-blue.svg
-[release]: https://github.com/hassio-addons/addon-log-viewer/tree/v0.11.0
\ No newline at end of file
diff --git a/log-viewer/config.json b/log-viewer/config.json
deleted file mode 100644
index a4afef5..0000000
--- a/log-viewer/config.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
- "name": "Log Viewer",
- "version": "0.11.0",
- "slug": "logviewer",
- "description": "Browser-based log utility for Home Assistant",
- "url": "https://github.com/hassio-addons/addon-log-viewer",
- "init": false,
- "ingress": true,
- "panel_icon": "mdi:text-box-outline",
- "homeassistant": "0.92.0b2",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "homeassistant_api": true,
- "auth_api": true,
- "ports": {
- "80/tcp": null
- },
- "ports_description": {
- "80/tcp": "Web interface (Not required for Ingress)"
- },
- "map": [
- "config",
- "share",
- "ssl"
- ],
- "options": {
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem"
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str",
- "leave_front_door_open": "bool?"
- },
- "image": "ghcr.io/hassio-addons/log-viewer/{arch}"
-}
\ No newline at end of file
diff --git a/log-viewer/icon.png b/log-viewer/icon.png
deleted file mode 100644
index 145b71b..0000000
Binary files a/log-viewer/icon.png and /dev/null differ
diff --git a/log-viewer/logo.png b/log-viewer/logo.png
deleted file mode 100644
index 145b71b..0000000
Binary files a/log-viewer/logo.png and /dev/null differ
diff --git a/log-viewer/translations/en.yaml b/log-viewer/translations/en.yaml
deleted file mode 100644
index e1b01f1..0000000
--- a/log-viewer/translations/en.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-configuration:
- log_level:
- name: Log level
- description: >-
- Controls the level of log details the add-on provides.
- ssl:
- name: SSL
- description: >-
- Enables/Disables SSL (HTTPS) on the web interface.
- certfile:
- name: Certificate file
- description: >-
- The certificate file to use for SSL. Note that this file must
- exist in the /ssl/ folder.
- keyfile:
- name: Private key file
- description: >-
- The private key file to use for SSL. Note that this file must
- exist in the /ssl/ folder.
-network:
- 80/tcp: Web interface (Not required for Ingress)
diff --git a/matrix/CHANGELOG.md b/matrix/CHANGELOG.md
deleted file mode 100644
index ea2a143..0000000
--- a/matrix/CHANGELOG.md
+++ /dev/null
@@ -1,17 +0,0 @@
-[![GitLab CI][gitlabci-shield]][gitlabci]
-
-## Changes
-
-- ⬆ Upgrades musl-dev to 1.1.24-r2
-- 🔨 Disable Docker init
-- 🔨 Implement OCI image specification on labels
-- ⬆ Updates matrix-synapse to v1.14.0 (#52)
-- ⬆ Upgrades add-on base image to v5.2.1
-- ✏ Split add-on documentation
-- ⬆ Upgrades riot-web to v1.6.2
-
-[Full Changelog][changelog]
-
-[changelog]: https://github.com/hassio-addons/addon-matrix/compare/v0.9.0...v0.10.0
-[gitlabci-shield]: https://gitlab.com/hassio-addons/addon-matrix/badges/v0.10.0/pipeline.svg
-[gitlabci]: https://gitlab.com/hassio-addons/addon-matrix/pipelines
diff --git a/matrix/DOCS.md b/matrix/DOCS.md
deleted file mode 100644
index a28ba30..0000000
--- a/matrix/DOCS.md
+++ /dev/null
@@ -1,167 +0,0 @@
-# Home Assistant Community Add-on: Matrix
-
-Matrix is a secure and decentralized communication platform served as an
-in-house and open-source alternative for platfoms like Discord or Slack. You
-can connect via your own [clients][clients], or via the Riot web client
-provided from this add-on.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "Matrix" add-on in the Supervisor add-on store and install it.
-1. Set your `server_name` as the hostname of the instance you will be using.
- This is an important step for integrating other services later.
-1. Start the "Matrix" add-on.
-1. Check the logs of the "Matrix" add-on to see if everything went well.
-1. Click "Open Web UI".
-1. You can then register via the message that appears at the top of the app.
-1. Change the server address to your own via "Custom server" and set the
- "Home server URL" to yours. By default this will be
- `https://yourservername:8448`. You can check this by navigating to this URL
- and you will be presented with a welcome message.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-ssl: true
-certfile: fullchain.pem
-keyfile: privkey.pem
-server_name: yourddns_url.com
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-These log level also affects the log levels of the Matrix.
-
-### Option: `ssl`
-
-Enables/Disables SSL (HTTPS) on the IDE. Set it `true` to enable it,
-`false` otherwise.
-
-### Option: `certfile`
-
-The certificate file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `keyfile`
-
-The private key file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `server_name`
-
-This is the hostname of your server. Set this to the host that you will be
-connecting to with your clients without the port and without the
-`http://` or`https://`. For example: if your domain name is
-`home-assistant.io` set your `server_name` to this.
-
-**Note**: _You should only set this once. You will likely have to reinstall the
- addon to change this after the fact, losing all your rooms and users._
-
-### Option: `leave_front_door_open`
-
-Adding this option to the add-on configuration allows you to disable HA
-authentication on the Riot interface by setting it to `true` and leaving the
-username and password empty.
-
-**Note**: _We STRONGLY suggest, not to use this, even if this add-on is
-only exposed to your internal network. USE AT YOUR OWN RISK!_
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality. The format of the log is based on
-[Keep a Changelog][keepchangelog].
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of ``MAJOR.MINOR.PATCH``. In a nutshell, the version will be incremented
-based on the following:
-
-- ``MAJOR``: Incompatible or major changes.
-- ``MINOR``: Backwards-compatible new features and enhancements.
-- ``PATCH``: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Timmo][timmo].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2019-2020 Timmo
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[clients]: https://matrix.org/docs/projects/try-matrix-now.html
-[contributors]: https://github.com/hassio-addons/addon-matrix/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io
-[issue]: https://github.com/hassio-addons/addon-matrix/issues
-[keepchangelog]: http://keepachangelog.com/en/1.0.0/
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-matrix/releases
-[semver]: http://semver.org/spec/v2.0.0.html
-[timmo]: https://github.com/timmo001
diff --git a/matrix/README.md b/matrix/README.md
deleted file mode 100644
index 2dc7da2..0000000
--- a/matrix/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# Home Assistant Community Add-on: Matrix
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]
-
-A secure, decentralized communication platform.
-
-## About
-
-Matrix is a secure and decentralized communication platform served as an
- in-house and open-source alternative for platfoms like Discord or Slack. You
- can connect via your own [clients][clients], or via the Riot web client
- provided from this add-on.
-
-![Screenshot][screenshot]
-
-[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/guidelines/download-assets-sm-2.svg
-[buymeacoffee]: https://www.buymeacoffee.com/timmo
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2020.svg
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.10.0-blue.svg
-[release]: https://github.com/hassio-addons/addon-matrix/tree/v0.10.0
-[screenshot]: https://github.com/hassio-addons/addon-matrix/raw/master/images/screenshot.png
-[clients]: https://matrix.org/docs/projects/try-matrix-now.html
\ No newline at end of file
diff --git a/matrix/config.json b/matrix/config.json
deleted file mode 100644
index 34e38e8..0000000
--- a/matrix/config.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "name": "Matrix",
- "version": "0.10.0",
- "slug": "matrix",
- "description": "A secure and decentralized communication platform.",
- "url": "https://github.com/hassio-addons/addon-matrix",
- "webui": "http://[HOST]:[PORT:80]",
- "startup": "application",
- "ingress": true,
- "ingress_port": 1337,
- "panel_icon": "mdi:chat",
- "homeassistant": "0.92.0b2",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "init": false,
- "boot": "auto",
- "hassio_api": true,
- "hassio_role": "default",
- "auth_api": true,
- "ports": {
- "8448/tcp": 8448,
- "80/tcp": null
- },
- "ports_description": {
- "8448/tcp": "Matrix Synapse Home Server",
- "80/tcp": "Riot Matrix web client (Not required for Ingress)"
- },
- "map": [
- "config:rw",
- "share:rw",
- "ssl"
- ],
- "options": {
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem",
- "server_name": "hassio.local"
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str",
- "server_name": "str",
- "leave_front_door_open": "bool?"
- },
- "image": "hassioaddons/matrix-{arch}"
-}
\ No newline at end of file
diff --git a/matrix/icon.png b/matrix/icon.png
deleted file mode 100644
index 30b80ec..0000000
Binary files a/matrix/icon.png and /dev/null differ
diff --git a/matrix/logo.png b/matrix/logo.png
deleted file mode 100644
index 2beb651..0000000
Binary files a/matrix/logo.png and /dev/null differ
diff --git a/motioneye/CHANGELOG.md b/motioneye/CHANGELOG.md
deleted file mode 100644
index 1b81eec..0000000
--- a/motioneye/CHANGELOG.md
+++ /dev/null
@@ -1,24 +0,0 @@
-## What’s changed
-
-## ✨ New features
-
-- Add Home Assistant integration discovery @frenck (#243)
-
-## 🚀 Enhancements
-
-- Enable motionEye discovery in add-on configuration @frenck (#244)
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#238)
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#241)
-- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#245)
-- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#248)
-- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#249)
-- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#251)
-- ⬆️ Upgrades add-on base image to v9.2.1 @frenck (#253)
-- ⬆️ Bump singledispatch from 3.6.1 to 3.6.2 in /motioneye @dependabot (#247)
-- ⬆️ Upgrades ffmpeg to 4.3.1-r4 @frenck (#257)
-- ⬆️ Upgrades cifs-utils to 6.13-r0 @frenck (#258)
-- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2.2 @dependabot (#256)
-- ⬆️ Upgrades nginx to 1.18.0-r15 @frenck (#259)
diff --git a/motioneye/DOCS.md b/motioneye/DOCS.md
deleted file mode 100644
index c55ba02..0000000
--- a/motioneye/DOCS.md
+++ /dev/null
@@ -1,196 +0,0 @@
-# Home Assistant Community Add-on: motionEye
-
-motionEye is a popular frontend to the camera software called motion. This
-add-on provides both, allowing you to add your camera's to your Hass.io setup.
-
-motionEye is Open Source CCTV and NVR, that is elegant and really easy to use.
-It can be used as a Baby Monitor, Construction Site Montage Viewer,
-Store Camera DVR, Garden Security, and much more.
-
-Some cool features of motionEye:
-
-- Support for a ridiculous amount of cameras, including IP cams.
-- Add multiple cameras by hooking up multiple motionEye instances together.
- For example, by using MotionEyeOS on a Pi Zero + Pi camera in your network.
-- Supports uploading recording into Google Drive and Dropbox.
-- motion detection, including email notification and scheduling.
-- Can record continuously, motion, or timelapse, with retention settings.
-- Supports "[action buttons][motioneye-wiki-action-buttons]" within the configuration.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "motionEye" add-on in the Supervisor add-on store and
- install it.
-1. Start the "motionEye" add-on
-1. Check the logs of the "motionEye" add-on to see if everything went well.
-1. Click the "OPEN WEB UI" button to open the web interface
-1. Login with username "admin", without a password.
-1. Edit your admin account with a secure password!
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-ssl: true
-certfile: mycertfile.pem
-keyfile: mykeyfile.pem
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `motion_webcontrol`
-
-Enables the motion webcontrol endpoint running on port `7999`.
-
-:warning: MotionEye HTTP webcontrol **DOES NOT** support authentication
-and **DOES NOT** support SSL! Enable this **ONLY** when you know what
-you are doing! **NEVER, EVER** expose this port to the outside world!
-
-### Option: `ssl`
-
-Enables/Disables SSL (HTTPS) on the web interface of motionEye. Set it `true`
-to enable it, `false` otherwise.
-
-### Option: `certfile`
-
-The certificate file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `keyfile`
-
-The private key file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `action_buttons`
-
-If configured, a script will be created to implement an [action button][motioneye-wiki-action-buttons].
-
-Example action buttons configuration:
-
-```yaml
-action_buttons:
- - type: light_on
- camera: 1
- command: "curl -s 192.168.1.1/index.html?light=ON > /dev/null"
- - type: light_off
- camera: 1
- command: "curl -s 192.168.1.1/index.html?light=OFF > /dev/null"
-```
-
-#### Sub-option: `action_buttons.type`
-
-Type of action button. Acceptable types are:
-
-- `lock` and `unlock`.
-- `light_on` and `light_off`.
-- `alarm_on` and `alarm_off`.
-- `up`, `right`, `down`, and `left`.
-- `zoom_in` and `zoom_out`.
-- `preset1` to `preset9`.
-
-#### Sub-option: `action_buttons.camera`
-
-The camera identification number. Corresponds to the camera number as set up
-within the motionEye UI.
-
-#### Sub-option: `action_buttons.command`
-
-The bash shell command to be executed when the button is pressed.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2018-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-motioneye/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[dockerhub]: https://hub.docker.com/r/hassioaddons/motioneye
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-motioneye/71826?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-motioneye/issues
-[motioneye-wiki-action-buttons]: https://github.com/ccrisan/motioneye/wiki/Action-Buttons
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-motioneye/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/motioneye/README.md b/motioneye/README.md
deleted file mode 100644
index 367f4f4..0000000
--- a/motioneye/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# Home Assistant Community Add-on: motionEye
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Simple, elegant and feature-rich CCTV/NVR for your cameras.
-
-## About
-
-motionEye is a popular frontend to the camera software called motion. This add-on provides both, allowing you to add your camera's to your Hass.io setup.
-
-motionEye is Open Source CCTV and NVR, that is elegant and really easy to use. It can be used as a Baby Monitor, Construction Site Montage Viewer, Store Camera DVR, Garden Security, and much more.
-
-Some cool features of motionEye:
-
-- Support for a ridiculous amount of cameras, including IP cams.
-- Add multiple cameras by hooking up multiple motionEye instances together.
- For example, by using MotionEyeOS on a Pi Zero + Pi camera in your network.
-- Supports uploading recording into Google Drive and Dropbox.
-- motion detection, including email notification and scheduling.
-- Can record continuously, motion, or timelapse, with retention settings.
-
-![motionEye screenshot][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-motioneye/71826?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.14.0-blue.svg
-[release]: https://github.com/hassio-addons/addon-motioneye/tree/v0.14.0
-[screenshot]: https://github.com/hassio-addons/addon-motioneye/raw/main/images/screenshot.png
\ No newline at end of file
diff --git a/motioneye/config.json b/motioneye/config.json
deleted file mode 100644
index f5a08f9..0000000
--- a/motioneye/config.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
- "name": "motionEye",
- "version": "0.14.0",
- "slug": "motioneye",
- "description": "Simple, elegant and feature-rich CCTV/NVR for your cameras",
- "url": "https://github.com/hassio-addons/addon-motioneye",
- "ingress": true,
- "ingress_port": 0,
- "panel_icon": "mdi:cctv",
- "homeassistant": "0.92.0b2",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "init": false,
- "ports": {
- "80/tcp": null
- },
- "ports_description": {
- "80/tcp": "Web interface (Not required for Ingress)"
- },
- "discovery": [
- "motioneye"
- ],
- "host_network": true,
- "apparmor": false,
- "video": true,
- "privileged": [
- "DAC_READ_SEARCH",
- "SYS_ADMIN"
- ],
- "map": [
- "media:rw",
- "share:rw",
- "ssl"
- ],
- "options": {
- "motion_webcontrol": false,
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem",
- "action_buttons": []
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "motion_webcontrol": "bool",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str",
- "action_buttons": [
- {
- "type": "list(lock|unlock|light_on|light_off|alarm_on|alarm_off|up|right|down|left|zoom_in|zoom_out|preset1|preset2|preset3|preset4|preset5|preset6|preset7|preset8|preset9)?",
- "camera": "int?",
- "command": "str?"
- }
- ]
- },
- "image": "ghcr.io/hassio-addons/motioneye/{arch}"
-}
\ No newline at end of file
diff --git a/motioneye/icon.png b/motioneye/icon.png
deleted file mode 100644
index 2507ebe..0000000
Binary files a/motioneye/icon.png and /dev/null differ
diff --git a/motioneye/logo.png b/motioneye/logo.png
deleted file mode 100644
index 8fd0da2..0000000
Binary files a/motioneye/logo.png and /dev/null differ
diff --git a/motioneye/translations/de.yaml b/motioneye/translations/de.yaml
deleted file mode 100644
index db22046..0000000
--- a/motioneye/translations/de.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-configuration:
- action_buttons:
- description: 'If configured, a script will be created to implement an motionEye action button. See add-on documentation for usage details.'
- name: 'Action buttons'
- certfile:
- description: 'The certificate file to use for SSL. Note that this file must exist in the /ssl/ folder.'
- name: 'Certificate file'
- keyfile:
- description: 'The private key file to use for SSL. Note that this file must exist in the /ssl/ folder.'
- name: 'Private key file'
- log_level:
- description: 'Controls the level of log details the add-on provides.'
- name: 'Log level'
- motion_webcontrol:
- description: 'Enables the motion webcontrol endpoint running on port 7999.'
- name: 'Motion webcontrol'
- ssl:
- description: 'Enables/Disables SSL (HTTPS) on the web interface of motionEye.'
- name: SSL
-network:
- 80/tcp: 'Web interface (Not required for Ingress)'
diff --git a/motioneye/translations/en.yaml b/motioneye/translations/en.yaml
deleted file mode 100644
index 9d5931a..0000000
--- a/motioneye/translations/en.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
----
-configuration:
- log_level:
- name: Log level
- description: >-
- Controls the level of log details the add-on provides.
- motion_webcontrol:
- name: Motion webcontrol
- description: >-
- Enables the motion webcontrol endpoint running on port 7999.
- ssl:
- name: SSL
- description: >-
- Enables/Disables SSL (HTTPS) on the web interface of motionEye.
- certfile:
- name: Certificate file
- description: >-
- The certificate file to use for SSL. Note that this file must
- exists in the /ssl/ folder.
- keyfile:
- name: Private key file
- description: >-
- The private key file to use for SSL. Note that this file must
- exists in the /ssl/ folder.
- action_buttons:
- name: Action buttons
- description: >-
- If configured, a script will be created to implement an motionEye
- action button. See add-on documentation for usage details.
-network:
- 80/tcp: Web interface (Not required for Ingress)
diff --git a/motioneye/translations/nl.yaml b/motioneye/translations/nl.yaml
deleted file mode 100644
index c2ee4a7..0000000
--- a/motioneye/translations/nl.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-configuration:
- action_buttons:
- description: 'If configured, a script will be created to implement an motionEye action button. See add-on documentation for usage details.'
- name: 'Action buttons'
- certfile:
- description: 'The certificate file to use for SSL. Note that this file must exist in the /ssl/ folder.'
- name: 'Certificate file'
- keyfile:
- description: 'The private key file to use for SSL. Note that this file must exist in the /ssl/ folder.'
- name: 'Private key file'
- log_level:
- description: 'Bepaalt het niveau van de logs die de add-on toont.'
- name: 'Log niveau'
- motion_webcontrol:
- description: 'Enables the motion webcontrol endpoint running on port 7999.'
- name: 'Motion webcontrol'
- ssl:
- description: 'Enables/Disables SSL (HTTPS) on the web interface of motionEye.'
- name: SSL
-network:
- 80/tcp: 'Web interface (Not required for Ingress)'
diff --git a/mpd/CHANGELOG.md b/mpd/CHANGELOG.md
deleted file mode 100644
index 82705d0..0000000
--- a/mpd/CHANGELOG.md
+++ /dev/null
@@ -1,106 +0,0 @@
-## 1.7.0 - 2021-04-02
-
-* 🔨 Use ghcr.io/home-assistant for base images
-
-
-## 1.6.0 - 2021-03-27
-
-* 🐛 Fixed `media_folder`, `playlist_folder` options overwriting custom config. Thanks @LiJu09
-* 🔨 Change how custom_config behave. Check docs. Thanks @LiJu09
-
-
-## 1.5.4 - 2021-03-25
-
-* ➕ Add `media_folder`, `playlist_folder` option. Thanks @LiJu09
-
-
-## 1.5.3 - 2021-03-17
-
-* 🐛 Specifiy own S6 entrypoint, don't rely on the base image.
-
-
-## 1.5.2 - 2021-02-09
-
-* 🔨 Migrate to new `devices` option format. Thanks @LiJu09
-
-
-## 1.5.1 - 2021-01-30
-
-* 🐛 Fixed missing permissions on startup
-
-
-## 1.5.0 - 2021-01-30
-
-* 🔼 Updated alpine image to `3.13`
-* 🔼 Updated mpd to `0.22.3-r0`
-* 🔨 Use Jemalloc for better memory handling
-
-
-## 1.4.2 - 2020-11-11
-
-* 🔨 Add httpd output config
-* 🐛 Make debug config optional
-
-
-## 1.4.1 - 2020-10-24
-
-* ➕ Add `verbose` option
-
-
-## 1.4.0 - 2020-10-20
-
-* 🔼 Update alpine to `3.12`
-* 🔼 Update mpd to `0.21.23-r0`
-* 🔼 Update ympd to `1.3.0-r9`
-* 🔼 Update mpc to `0.33-r2`
-* 🔨 Use S6-Overlay for execution
-* 🔨 Disable Avahi Discovery
-* 🔨 Change audio output to Pulseaudio
-* 🔨 Start mpd as `application` startup
-* ➖ Removed alsa-plugins-pulse
-
-
-## 1.3.2 - 2020-10-06
-
-* ➕ Support `/media` folder
-
-
-## 1.3.1 - 2020-05-26
-
-* 🐛 Fixed startup without custom config file
-
-
-## 1.3.0 - 2020-05-22
-
-* ➕ Added `custom_config` option for own mpd configuration file.
-* ➕ Added configuration docs
-* 🔨 Updated Changelog to new format
-
-
-## 1.2.0 - 2020-03-09
-
-* ➕ Added `alsa-plugins-pulse` to be compatible with latest HassOS (> 3.11)
-
-
-## 1.1.2 - 2020-02-09
-
-* 🔨 Start mpd as `system` startup
-
-
-## 1.1.1 - 2020-02-07
-
-* 🔼 Update mpd to `0.21.16-r1`
-* 🔼 Update ympd to `1.3.0-r8`
-* 🔼 Update alpine to `3.11`
-* 🔼 Update mpc to `0.33-r0`
-
-
-## 1.1.0 - 2019-12-14
-
-* ➕ Add `volume_normalization` option to addon
-
-
-## 1.0.0 - 2019-12-x
-
-* ➕ Add MPD version `0.20.21`
-* ➕ Add ympd version `1.3.0`
diff --git a/mpd/DOCS.md b/mpd/DOCS.md
deleted file mode 100644
index 17a4828..0000000
--- a/mpd/DOCS.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Configuration
-
-```yaml
-media_folder: /media/mpd/media
-playlist_folder: /media/mpd/playlists
-volume_normalization: false
-httpd_output: false
-```
-
-### `volume_normalization`
-
-Enables the built-in volume normalization feature.
-
-### `httpd_output`
-
-Enables the httpd audio output.
-
-### `media_folder`
-
-This option let you specify an custom media folder.
-
-### `playlist_folder`
-
-This option let you specify an custom playlist folder.
-
-### `verbose` (optional)
-
-Make `mpd` verbose.
-
-```yaml
-verbose: true
-```
-
-### `custom_config` (optional)
-
-**If this is specified, all other options are ignored.**
-
-This option let you specify an custom configuration file for MPD.
-To keep all MPD files in one place I restricted the path prefix to `/share/mpd`
-Please use the default [mpd.conf of the addon](https://github.com/Poeschl/Hassio-Addons/blob/master/mpd/root/etc/mpd.conf) as starting point.
-In case you have issues with your configuration, the [MPD docs](https://www.musicpd.org/doc/html/user.html#configuration) might help you out.
-
-Working example:
-
-```yaml
-...
-custom_config: /share/mpd/mpd.conf
-```
-
-# Troubleshooting
-
-### `RTIOThread could not get realtime scheduling, continuing anyway: sched_setscheduler`
-
-This error is shown on any none-glibc system like alpine linux is. MPD should work without it.
-More see here: [MPD Issue](https://github.com/MusicPlayerDaemon/MPD/issues/218)
-
-### `Failed to open '/data/database/mpd.db': No such file or directory`
-
-This error is shown on the first start, when no database exists. It will be there on the second run.
diff --git a/mpd/Dockerfile b/mpd/Dockerfile
deleted file mode 100644
index 35e4966..0000000
--- a/mpd/Dockerfile
+++ /dev/null
@@ -1,11 +0,0 @@
-ARG BUILD_FROM
-FROM $BUILD_FROM
-
-RUN apk add --no-cache \
- mpc=0.33-r2 \
- mpd=0.22.3-r0 \
- ympd=1.3.0-r9
-
-ENTRYPOINT [ "/init" ]
-CMD []
-COPY root /
diff --git a/mpd/README.md b/mpd/README.md
deleted file mode 100644
index f1497fa..0000000
--- a/mpd/README.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# MPD
-
-[MPD](https://www.musicpd.org/) is a free and open source music player. It plays audio files, organizes playlists and maintains a music database. For interaction client software is needed.
-Inside this addon there is [ympd](https://ympd.org/), a simple web frontend for interacting.
-
-![Addon Stage][stage-badge]
-![Supports aarch64 Architecture][aarch64-badge]
-![Supports amd64 Architecture][amd64-badge]
-![Supports armhf Architecture][armhf-badge]
-![Supports armv7 Architecture][armv7-badge]
-![Supports i386 Architecture][i386-badge]
-
-[![Install on my Home Assistant][install-badge]][install-url]
-[![Donate][donation-badge]][donation-url]
-
-# Configuration
-
-The configuration is located under the Docs tab or [DOCS.md](https://github.com/Poeschl/Hassio-Addons/blob/master/mpd/DOCS.md).
-
-
-[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
-[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
-[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
-[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
-[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
-[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_mpd
-[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
-
-[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
-[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
-[donation-url]: https://www.buymeacoffee.com/Poeschl
diff --git a/mpd/build.json b/mpd/build.json
deleted file mode 100644
index 4ceab93..0000000
--- a/mpd/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "armhf": "ghcr.io/home-assistant/armhf-base:3.13",
- "armv7": "ghcr.io/home-assistant/armv7-base:3.13",
- "aarch64": "ghcr.io/home-assistant/aarch64-base:3.13",
- "amd64": "ghcr.io/home-assistant/amd64-base:3.13",
- "i386": "ghcr.io/home-assistant/i386-base:3.13"
- }
-}
diff --git a/mpd/config.json b/mpd/config.json
deleted file mode 100644
index 8ed81e5..0000000
--- a/mpd/config.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "MPD",
- "version": "1.7.0",
- "slug": "mpd",
- "panel_icon": "mdi:music-circle",
- "description": "Music Player Daemon is a free and open source music player. It plays audio files, organizes playlists and maintains a music database",
- "url": "https://github.com/Poeschl/Hassio-Addons/tree/master/mpd",
- "ingress": true,
- "ingress_port": 6680,
- "arch": [
- "armv7",
- "armhf",
- "aarch64",
- "amd64",
- "i386"
- ],
- "startup": "application",
- "boot": "auto",
- "image": "ghcr.io/poeschl/ha-mpd-{arch}",
- "audio": true,
- "devices": ["/dev/snd"],
- "map": ["share:rw", "media:rw"],
- "ports": {
- "6680/tcp": null,
- "6600/tcp": 6600,
- "8000/tcp": null
- },
- "ports_description": {
- "6680/tcp": "Web Frontend (Not needed with ingress feature)",
- "6600/tcp": "MDP Connection",
- "8000/tcp": "HTTPd Connection (if enabled)"
- },
- "options": {
- "media_folder": "/media/mpd/media",
- "playlist_folder": "/media/mpd/playlists",
- "volume_normalization": false,
- "httpd_output": false
- },
- "schema": {
- "media_folder": "match(/share/.+|/media/.+|(smb|nfs)://.+)",
- "playlist_folder": "match(/share/.+|/media/.+|(smb|nfs)://.+)",
- "volume_normalization": "bool",
- "httpd_output": "bool",
- "verbose": "bool?",
- "custom_config": "match(/share/mpd/.+)?"
- }
-}
diff --git a/mpd/icon.png b/mpd/icon.png
deleted file mode 100644
index 0063045..0000000
Binary files a/mpd/icon.png and /dev/null differ
diff --git a/mpd/logo.png b/mpd/logo.png
deleted file mode 100644
index fd42286..0000000
Binary files a/mpd/logo.png and /dev/null differ
diff --git a/mpd/root/etc/cont-init.d/setup-folders b/mpd/root/etc/cont-init.d/setup-folders
deleted file mode 100644
index 732442f..0000000
--- a/mpd/root/etc/cont-init.d/setup-folders
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-bashio::log.info 'Setup Folders'
-
-MEDIA_FOLDER=$(bashio::config 'media_folder')
-PLAYLIST_FOLDER=$(bashio::config 'playlist_folder')
-
-mkdir -p /data/database \
- "${MEDIA_FOLDER}" \
- "${PLAYLIST_FOLDER}"
diff --git a/mpd/root/etc/cont-init.d/setup-settings b/mpd/root/etc/cont-init.d/setup-settings
deleted file mode 100644
index f47553b..0000000
--- a/mpd/root/etc/cont-init.d/setup-settings
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-bashio::log.info 'Setup settings'
-
-if [ "$(bashio::config 'custom_config')" != 'null' ]; then
- bashio::log.info 'Use custom config'
- cp "$(bashio::config 'custom_config')" '/etc/mpd.conf'
-else
- bashio::log.info 'Set media folder'
- MEDIA_FOLDER=$(bashio::config 'media_folder')
- sed -i "s/music_directory.*/music_directory \"${MEDIA_FOLDER//\//\\/}\"/" /etc/mpd.conf
-
- bashio::log.info 'Set playlist folder'
- PLAYLIST_FOLDER=$(bashio::config 'playlist_folder')
- sed -i "s/playlist_directory.*/playlist_directory \"${PLAYLIST_FOLDER//\//\\/}\"/" /etc/mpd.conf
-
- if [ "$(bashio::config 'volume_normalization')" == 'true' ]; then
- sed -i "/^#volume_normalization/s/^#//" /etc/mpd.conf
- fi
-
- if [ "$(bashio::config 'verbose')" == 'true' ]; then
- sed -i "/^log_level/s/default/verbose/" /etc/mpd.conf
- fi
-
- if [ "$(bashio::config 'httpd_output')" == 'true' ]; then
- printf '\n
- audio_output { \n
- type "httpd" \n
- name "HTTPd Output" \n
- port "8000" \n
- bitrate "192" \n
- }' >> /etc/mpd.conf
- bashio::log.info 'HTTPd output enabled'
- fi
-fi
diff --git a/mpd/root/etc/fix-attrs.d/mpd b/mpd/root/etc/fix-attrs.d/mpd
deleted file mode 100644
index 2476daf..0000000
--- a/mpd/root/etc/fix-attrs.d/mpd
+++ /dev/null
@@ -1,2 +0,0 @@
-/usr/bin/mpd false root:root 0744 0744
-/usr/bin/mpc false root:root 0744 0744
\ No newline at end of file
diff --git a/mpd/root/etc/fix-attrs.d/ympd b/mpd/root/etc/fix-attrs.d/ympd
deleted file mode 100644
index 7ea8d69..0000000
--- a/mpd/root/etc/fix-attrs.d/ympd
+++ /dev/null
@@ -1 +0,0 @@
-/usr/bin/ympd false root:root 0744 0744
\ No newline at end of file
diff --git a/mpd/root/etc/mpd.conf b/mpd/root/etc/mpd.conf
deleted file mode 100644
index 8645667..0000000
--- a/mpd/root/etc/mpd.conf
+++ /dev/null
@@ -1,386 +0,0 @@
-# An example configuration file for MPD.
-# Read the user manual for documentation: http://www.musicpd.org/doc/user/
-
-
-# Files and directories #######################################################
-#
-# This setting controls the top directory which MPD will search to discover the
-# available audio files and add them to the daemon's online database. This
-# setting defaults to the XDG directory, otherwise the music directory will be
-# be disabled and audio files will only be accepted over ipc socket (using
-# file:// protocol) or streaming files over an accepted protocol.
-#
-music_directory "/share/mpd/music"
-#
-# This setting sets the MPD internal playlist directory. The purpose of this
-# directory is storage for playlists created by MPD. The server will use
-# playlist files not created by the server but only if they are in the MPD
-# format. This setting defaults to playlist saving being disabled.
-#
-playlist_directory "/share/mpd/playlists"
-#
-# This setting sets the location of the MPD database. This file is used to
-# load the database at server start up and store the database while the
-# server is not up. This setting defaults to disabled which will allow
-# MPD to accept files over ipc socket (using file:// protocol) or streaming
-# files over an accepted protocol.
-#
-db_file "/data/database/mpd.db"
-#
-# These settings are the locations for the daemon log files for the daemon.
-# These logs are great for troubleshooting, depending on your log_level
-# settings.
-#
-# The special value "syslog" makes MPD use the local syslog daemon. This
-# setting defaults to logging to syslog, otherwise logging is disabled.
-#
-log_file "syslog"
-#
-# This setting sets the location of the file which stores the process ID
-# for use of mpd --kill and some init scripts. This setting is disabled by
-# default and the pid file will not be stored.
-#
-# pid_file "/var/run/mpd/mpd.pid"
-#
-# This setting sets the location of the file which contains information about
-# most variables to get MPD back into the same general shape it was in before
-# it was brought down. This setting is disabled by default and the server
-# state will be reset on server start up.
-#
-#state_file "/data/state"
-#
-# The location of the sticker database. This is a database which
-# manages dynamic information attached to songs.
-#
-sticker_file "/data/sticker.sql"
-#
-###############################################################################
-
-
-# General music daemon options ################################################
-#
-# This setting specifies the user that MPD will run as. MPD should never run as
-# root and you may use this setting to make MPD change its user ID after
-# initialization. This setting is disabled by default and MPD is run as the
-# current user.
-#
-#user "mpd"
-#
-# This setting specifies the group that MPD will run as. If not specified
-# primary group of user specified with "user" setting will be used (if set).
-# This is useful if MPD needs to be a member of group such as "audio" to
-# have permission to use sound card.
-#
-#group "audio"
-#
-# This setting sets the address for the daemon to listen on. Careful attention
-# should be paid if this is assigned to anything other then the default, any.
-# This setting can deny access to control of the daemon. Not effective if
-# systemd socket activiation is in use.
-#
-# For network
-bind_to_address "0.0.0.0"
-#
-# And for Unix Socket
-#bind_to_address "~/.mpd/socket"
-#
-# This setting is the TCP port that is desired for the daemon to get assigned
-# to.
-#
-port "6600"
-#
-# This setting controls the type of information which is logged. Available
-# setting arguments are "default", "secure" or "verbose". The "verbose" setting
-# argument is recommended for troubleshooting, though can quickly stretch
-# available resources on limited hardware storage.
-#
-log_level "default"
-#
-# Setting "restore_paused" to "yes" puts MPD into pause mode instead
-# of starting playback after startup.
-#
-#restore_paused "no"
-#
-# This setting enables MPD to create playlists in a format usable by other
-# music players.
-#
-#save_absolute_paths_in_playlists "no"
-#
-# This setting defines a list of tag types that will be extracted during the
-# audio file discovery process. The complete list of possible values can be
-# found in the user manual.
-metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
-#
-# This setting enables automatic update of MPD's database when files in
-# music_directory are changed.
-#
-#auto_update "yes"
-#
-# Limit the depth of the directories being watched, 0 means only watch
-# the music directory itself. There is no limit by default.
-#
-#auto_update_depth "3"
-#
-###############################################################################
-
-
-# Symbolic link behavior ######################################################
-#
-# If this setting is set to "yes", MPD will discover audio files by following
-# symbolic links outside of the configured music_directory.
-#
-#follow_outside_symlinks "yes"
-#
-# If this setting is set to "yes", MPD will discover audio files by following
-# symbolic links inside of the configured music_directory.
-#
-#follow_inside_symlinks "yes"
-#
-###############################################################################
-
-
-# Zeroconf / Avahi Service Discovery ##########################################
-#
-# If this setting is set to "yes", service information will be published with
-# Zeroconf / Avahi.
-#
-zeroconf_enabled "no"
-#
-# The argument to this setting will be the Zeroconf / Avahi unique name for
-# this MPD server on the network.
-#
-#zeroconf_name "Music Player"
-#
-###############################################################################
-
-
-# Permissions #################################################################
-#
-# If this setting is set, MPD will require password authorization. The password
-# setting can be specified multiple times for different password profiles.
-#
-#password "password@read,add,control,admin"
-#
-# This setting specifies the permissions a user has who has not yet logged in.
-#
-#default_permissions "read,add,control,admin"
-#
-###############################################################################
-
-
-# Database #######################################################################
-#
-
-#database {
-# plugin "proxy"
-# host "other.mpd.host"
-# port "6600"
-#}
-
-# Input #######################################################################
-#
-
-#input {
-# plugin "curl"
-# proxy "proxy.isp.com:8080"
-# proxy_user "user"
-# proxy_password "password"
-#}
-
-#
-###############################################################################
-
-# Audio Output ################################################################
-#
-# MPD supports various audio output types, as well as playing through multiple
-# audio outputs at the same time, through multiple audio_output settings
-# blocks. Setting this block is optional, though the server will only attempt
-# autodetection for one sound card.
-#
-# An example of an ALSA output:
-#
-#audio_output {
-# type "alsa"
-# name "Home Assistant ALSA Audio"
-## device "hw:0,0" # optional
-## mixer_type "hardware" # optional
-## mixer_device "default" # optional
-## mixer_control "PCM" # optional
-## mixer_index "0" # optional
-#}
-#
-# An example of an OSS output:
-#
-#audio_output {
-# type "oss"
-# name "My OSS Device"
-## device "/dev/dsp" # optional
-## mixer_type "hardware" # optional
-## mixer_device "/dev/mixer" # optional
-## mixer_control "PCM" # optional
-#}
-#
-# An example of a shout output (for streaming to Icecast):
-#
-#audio_output {
-# type "shout"
-# encoder "vorbis" # optional
-# name "My Shout Stream"
-# host "localhost"
-# port "8000"
-# mount "/mpd.ogg"
-# password "hackme"
-# quality "5.0"
-# bitrate "128"
-# format "44100:16:1"
-## protocol "icecast2" # optional
-## user "source" # optional
-## description "My Stream Description" # optional
-## url "http://example.com" # optional
-## genre "jazz" # optional
-## public "no" # optional
-## timeout "2" # optional
-## mixer_type "software" # optional
-#}
-#
-# An example of a recorder output:
-#
-#audio_output {
-# type "recorder"
-# name "My recorder"
-# encoder "vorbis" # optional, vorbis or lame
-# path "/var/lib/mpd/recorder/mpd.ogg"
-## quality "5.0" # do not define if bitrate is defined
-# bitrate "128" # do not define if quality is defined
-# format "44100:16:1"
-#}
-#
-# An example of a httpd output (built-in HTTP streaming server):
-#
-#audio_output {
-# type "httpd"
-# name "My HTTP Stream"
-# encoder "vorbis" # optional, vorbis or lame
-# port "8000"
-# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
-# quality "5.0" # do not define if bitrate is defined
-# bitrate "192" # do not define if quality is defined
-# format "44100:16:1"
-# max_clients "5" # optional 0=no limit
-#}
-#
-# An example of a pulseaudio output (streaming to a remote pulseaudio server)
-#
-audio_output {
- type "pulse"
- name "Home Assistant Pulseaudio"
-# server "remote_server" # optional
-# sink "remote_server_sink" # optional
-}
-#
-# An example of a winmm output (Windows multimedia API).
-#
-#audio_output {
-# type "winmm"
-# name "My WinMM output"
-## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
-# or
-## device "0" # optional
-## mixer_type "hardware" # optional
-#}
-#
-# An example of an openal output.
-#
-#audio_output {
-# type "openal"
-# name "My OpenAL output"
-## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
-#}
-#
-# An example of an sndio output.
-#
-#audio_output {
-# type "sndio"
-# name "sndio output"
-# mixer_type "software"
-#}
-#
-# An example of an OS X output:
-#
-#audio_output {
-# type "osx"
-# name "My OS X Device"
-## device "Built-in Output" # optional
-## channel_map "-1,-1,0,1" # optional
-#}
-#
-## Example "pipe" output:
-#
-#audio_output {
-# type "pipe"
-# name "my pipe"
-# command "aplay -f cd 2>/dev/null"
-## Or if you're want to use AudioCompress
-# command "AudioCompress -m | aplay -f cd 2>/dev/null"
-## Or to send raw PCM stream through PCM:
-# command "nc example.org 8765"
-# format "44100:16:2"
-#}
-#
-## An example of a null output (for no audio output):
-#
-#audio_output {
-# type "null"
-# name "My Null Output"
-# mixer_type "none" # optional
-#}
-#
-###############################################################################
-
-
-# Normalization automatic volume adjustments ##################################
-#
-# This setting specifies the type of ReplayGain to use. This setting can have
-# the argument "off", "album", "track" or "auto". "auto" is a special mode that
-# chooses between "track" and "album" depending on the current state of
-# random playback. If random playback is enabled then "track" mode is used.
-# See for more details about ReplayGain.
-# This setting is off by default.
-#
-#replaygain "album"
-#
-# This setting sets the pre-amp used for files that have ReplayGain tags. By
-# default this setting is disabled.
-#
-#replaygain_preamp "0"
-#
-# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
-# By default this setting is disabled.
-#
-#replaygain_missing_preamp "0"
-#
-# This setting enables or disables ReplayGain limiting.
-# MPD calculates actual amplification based on the ReplayGain tags
-# and replaygain_preamp / replaygain_missing_preamp setting.
-# If replaygain_limit is enabled MPD will never amplify audio signal
-# above its original level. If replaygain_limit is disabled such amplification
-# might occur. By default this setting is enabled.
-#
-#replaygain_limit "yes"
-#
-# This setting enables on-the-fly normalization volume adjustment. This will
-# result in the volume of all playing audio to be adjusted so the output has
-# equal "loudness". This setting is disabled by default.
-#
-#volume_normalization "yes"
-#
-###############################################################################
-
-# Character Encoding ##########################################################
-#
-# If file or directory names do not display correctly for your locale then you
-# may need to modify this setting.
-#
-filesystem_charset "UTF-8"
-#
-###############################################################################
diff --git a/mpd/root/etc/services.d/mpd/run b/mpd/root/etc/services.d/mpd/run
deleted file mode 100644
index 53ababb..0000000
--- a/mpd/root/etc/services.d/mpd/run
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-# Enable Jemalloc for better memory handling
-export LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
-
-bashio::log.info 'Start MPD'
-mpd --stdout --no-daemon
diff --git a/mpd/root/etc/services.d/ympd/run b/mpd/root/etc/services.d/ympd/run
deleted file mode 100644
index 9b767e1..0000000
--- a/mpd/root/etc/services.d/ympd/run
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-bashio::net.wait_for 6600
-
-# Enable Jemalloc for better memory handling
-export LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
-
-bashio::log.info 'Start ympd'
-ympd -w 6680
diff --git a/mqtt/CHANGELOG.md b/mqtt/CHANGELOG.md
deleted file mode 100644
index 468788a..0000000
--- a/mqtt/CHANGELOG.md
+++ /dev/null
@@ -1,26 +0,0 @@
-## ⚠️ Deprecation notice!
-
-This is the final and last release of this add-on, which is now deprecated.
-
-We strongly advise you to upgrade/migrate to using the Mosquitto add-on, as provided by the Home Assistant project.
-
-This add-on will be removed from the add-on store soon.
-
-
-## Changes
-
-- :pencil2: Maintaince -> Maintenance
-- :ambulance: Fixes path handling for SSL certificates
-- :hammer: Updates HA Auth URL in NGinx LUA script
-- :hammer: Use Hass.io DNS as NGinx resolver
-- :fireworks: Updates maintenance/license year to 2020
-- :books: Update add-on documentation to use new YAML configuration format
-- :hammer: Re-branding
-- :pencil2: Fixes some typos
-- :hammer: Update add-on config with new password & list features
-- :arrow_up: Upgrades add-on base image to v7.0.2
-- :warning: Adds deprecation notices
-
-[Full Changelog][changelog]
-
-[changelog]: https://github.com/hassio-addons/addon-mqtt/compare/v1.1.0...v1.2.0
\ No newline at end of file
diff --git a/mqtt/README.md b/mqtt/README.md
deleted file mode 100644
index 08fbf91..0000000
--- a/mqtt/README.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Home Assistant Community Add-on: MQTT Server & Web client
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]
-
-Mosquitto MQTT Server bundled with Hivemq's web client.
-
-## Deprecation warning
-
-**This add-on is in a deprecated state!**
-
-This add-on is now deprecated. We highly recommend on switching to the
-official Home Assistant Mosquitto add-on as an alternative.
-
-This add-on will soon be removed from the add-on store.
-
-## About
-
-This add-on combines the power of [Hivemq][hivemq]'s
-web-based MQTT client, and the powerful [Mosquitto][mosquitto]
-broker (MQTT Server). With this, you can host your own MQTT server,
-and inspect/publish messages using the built-in web client!
-
-[Click here for the full documentation][docs]
-
-![Screenshot][screenshot]
-
-[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/guidelines/download-assets-sm-2.svg
-[buymeacoffee]: https://www.buymeacoffee.com/ludeeus
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[docs]: https://github.com/hassio-addons/addon-mqtt/blob/v1.2.0/README.md
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/community-hass-io-add-ons-mqtt-server-web-client/70376
-[hivemq]: https://www.hivemq.com/
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2020.svg
-[mosquitto]: https://mosquitto.org/
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-%20!%20DEPRECATED%20%20%20!-ff0000.svg
-[release-shield]: https://img.shields.io/badge/version-v1.2.0-blue.svg
-[release]: https://github.com/hassio-addons/addon-mqtt/tree/v1.2.0
-[screenshot]: https://github.com/hassio-addons/addon-mqtt/raw/master/images/image.png
\ No newline at end of file
diff --git a/mqtt/config.json b/mqtt/config.json
deleted file mode 100644
index 0a2b763..0000000
--- a/mqtt/config.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "name": "MQTT Server & Web client",
- "version": "1.2.0",
- "slug": "mqtt",
- "description": "Mosquitto MQTT Server bundled with Hivemq's web client",
- "url": "https://github.com/hassio-addons/addon-mqtt/tree/master/README.md",
- "webui": "https://[HOST]:[PORT:80]",
- "ingress": true,
- "ingress_port": 1337,
- "homeassistant": "0.92.0",
- "panel_icon": "mdi:code-brackets",
- "panel_title": "MQTT",
- "startup": "services",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "boot": "auto",
- "auth_api": true,
- "hassio_api": true,
- "hassio_role": "default",
- "ports": {
- "80/tcp": null,
- "1883/tcp": 1883,
- "1884/tcp": 1884,
- "4883/tcp": 4883,
- "4884/tcp": 4884
- },
- "ports_description": {
- "80/tcp": "HiveMQ web interface (Not required for Ingress)",
- "1883/tcp": "Standard MQTT port (without SSL)",
- "1884/tcp": "Standard WebSocket port (without SSL)",
- "4883/tcp": "Secure MQTT port (with SSL)",
- "4884/tcp": "Secure WebSocket port (with SSL)"
- },
- "map": [
- "share",
- "ssl",
- "config"
- ],
- "options": {
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem",
- "broker": true,
- "allow_anonymous": false,
- "mqttusers": [
- {
- "username": "",
- "password": "",
- "readonly": true,
- "topics": [
- "#"
- ]
- }
- ]
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str",
- "broker": "bool",
- "allow_anonymous": "bool",
- "mqttusers": [
- {
- "username": "str",
- "password": "password",
- "readonly": "bool",
- "topics": [
- "str"
- ]
- }
- ],
- "i_like_to_be_pwned": "bool?",
- "leave_front_door_open": "bool?"
- },
- "image": "hassioaddons/mqtt"
-}
\ No newline at end of file
diff --git a/mqtt/icon.png b/mqtt/icon.png
deleted file mode 100644
index 539d37b..0000000
Binary files a/mqtt/icon.png and /dev/null differ
diff --git a/mqtt/logo.png b/mqtt/logo.png
deleted file mode 100644
index 539d37b..0000000
Binary files a/mqtt/logo.png and /dev/null differ
diff --git a/nginxproxymanager/CHANGELOG.md b/nginxproxymanager/CHANGELOG.md
deleted file mode 100644
index 0e3ebd9..0000000
--- a/nginxproxymanager/CHANGELOG.md
+++ /dev/null
@@ -1,29 +0,0 @@
-## What’s changed
-
-## ✨ New features
-
-- Add add-on translation support @frenck (#199)
-
-## 🧰 Maintenance
-
-- Apply updated repository structure & CI workflow @frenck (#198)
-
-## ⬆️ Dependency updates
-
-- ⬆️ Upgrade add-on base image to 9.1.6 @frenck (#184)
-- ⬆️ Bump ludeeus/action-shellcheck from 1.0.0 to 1.1.0 @dependabot (#182)
-- ⬆️ Bump certbot-dns-cloudflare from 1.13.0 to 1.14.0 in /proxy-manager @dependabot (#185)
-- ⬆️ Bump docker/build-push-action from v2.3.0 to v2.4.0 @dependabot (#186)
-- ⬆️ Upgrades nodejs to 14.16.1-r0 @frenck (#189)
-- ⬆️ Bump docker/setup-qemu-action from v1.0.1 to v1.0.2 @dependabot (#188)
-- ⬆️ Bump docker/setup-buildx-action from v1.1.1 to v1.1.2 @dependabot (#187)
-- ⬆️ Upgrades add-on base image to v9.1.7 @frenck (#190)
-- ⬆️ Bump actions/cache from v2.1.4 to v2.1.5 @dependabot (#192)
-- ⬆️ Upgrades nodejs to 14.16.1-r1 @frenck (#194)
-- ⬆️ Bump brpaz/hadolint-action from v1.3.1 to v1.4.0 @dependabot (#196)
-- Upgrades add-on base image to v9.2.0 @frenck (#197)
-- ⬆️ Upgrades mariadb to 10.5.9-r0 @frenck (#200)
-- ⬆️ Bump docker/setup-qemu-action from v1.0.2 to v1.1.0 @dependabot (#202)
-- ⬆️ Bump docker/setup-buildx-action from v1.1.2 to v1.2.0 @dependabot (#203)
-- ⬆️ Bump docker/login-action from v1.8.0 to v1.9.0 @dependabot (#205)
-- ⬆️ Bump docker/setup-buildx-action from v1.2.0 to v1.3.0 @dependabot (#206)
diff --git a/nginxproxymanager/DOCS.md b/nginxproxymanager/DOCS.md
deleted file mode 100644
index 76504c5..0000000
--- a/nginxproxymanager/DOCS.md
+++ /dev/null
@@ -1,149 +0,0 @@
-# Home Assistant Community Add-on: Nginx Proxy Manager
-
-This add-on enables you to easily forward incoming connections to anywhere,
-including free SSL, without having to know too much about Nginx
-or Let’s Encrypt.
-
-Forward your domain to your Home Assistant, add-ons, or websites running
-at home or anywhere else, straight from a simple, powerful interface.
-
-Want to protect the website with a username/password? Well, it can do that too!
-Enable authentication and create a list of usernames/password that can access
-that specific application.
-
-For the power users, you can customize the behavior of each host in the
-Nginx proxy manager by providing additional Nginx directives.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Ensure you are running the MariaDB add-on. This add-on is required to use
- the Nginx Proxy Manager add-on as it uses the database services provided.
-1. Search for the "Nginx Proxy Manager" add-on in the Supervisor add-on store
- and install it.
-1. Start the "Nginx Proxy Manager" add-on
-1. Check the logs of the "Nginx Proxy Manager" add-on to see if everything went well.
-1. Click the "OPEN WEB UI" button and login using:
- `admin@example.com` / `changeme`
-1. Forward port `80` and `443` from your router to your Home Assistant machine.
-1. Enjoy the add-on!
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `reset_database`
-
-By setting to `true` provides the option to delete and recreate the database. As
-the data is held within the MariaDB addon, it is not removed on an uninstall.
-
-**Note**: _Once the database is reset the configuration for the addon will be
-cleared automatically_
-
-## Known issues and limitations
-
-- The original NGinx Proxy Manager has support for forwarding TCP/UDP streams,
- which is removed from this add-on. It makes no sense from a
- Home Assistant / Home perspective and, by removing it, it also
- removed the need for this add-on to run on the Docker host network.
-- This add-on stores its database on the MariaDB add-on. This also means that
- by taking a snapshot of just the Nginx Proxy Manager add-on, will not
- contain the data from this add-on. Please make sure you backup both
- the Nginx Proxy Manager and the MariaDB add-ons.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2019-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-nginx-proxy-manager/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-nginx-proxy-manager/111830?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-nginx-proxy-manager/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-nginx-proxy-manager/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/nginxproxymanager/README.md b/nginxproxymanager/README.md
deleted file mode 100644
index c3eb8d9..0000000
--- a/nginxproxymanager/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Home Assistant Community Add-on: Nginx Proxy Manager
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Manage Nginx proxy hosts with a simple, powerful interface.
-
-## About
-
-This add-on enables you to easily forward incoming connections to anywhere,
-including free SSL, without having to know too much about Nginx
-or Let’s Encrypt.
-
-Forward your domain to your Home Assistant, add-ons, or websites running
-at home or anywhere else, straight from a simple, powerful interface.
-
-Want to protect the website with a username/password? Well, it can do that too!
-Enable authentication and create a list of usernames/password that can access
-that specific application.
-
-For the power users, you can customize the behavior of each host in the
-Nginx proxy manager by providing additional Nginx directives.
-
-![Nginx Proxy Manager screenshot][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-nginx-proxy-manager/111830?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.11.0-blue.svg
-[release]: https://github.com/hassio-addons/addon-nginx-proxy-manager/tree/v0.11.0
-[screenshot]: https://github.com/hassio-addons/addon-nginx-proxy-manager/raw/main/images/screenshot.gif
\ No newline at end of file
diff --git a/nginxproxymanager/config.json b/nginxproxymanager/config.json
deleted file mode 100644
index 7f2f980..0000000
--- a/nginxproxymanager/config.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "Nginx Proxy Manager without external database",
- "version": "0.11.1",
- "slug": "nginxproxymanager",
- "description": "Manage Nginx proxy hosts with a simple, powerful interface",
- "url": "https://github.com/avm-sh-inc/addon-nginx-proxy-manager",
- "webui": "http://[HOST]:[PORT:81]",
- "init": false,
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "services": [
- ],
- "hassio_api": true,
- "ports": {
- "80/tcp": 80,
- "81/tcp": 81,
- "443/tcp": 443
- },
- "ports_description": {
- "80/tcp": "HTTP Entrance port",
- "81/tcp": "Proxy management web interface",
- "443/tcp": "HTTPS/SSL Entrance port"
- },
- "map": [
- "ssl:rw",
- "backup:rw"
- ],
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "reset_database": "bool?"
- },
- "image": "ghcr.io/hassio-addons/nginxproxymanager/{arch}"
-}
\ No newline at end of file
diff --git a/nginxproxymanager/icon.png b/nginxproxymanager/icon.png
deleted file mode 100644
index c3c19c3..0000000
Binary files a/nginxproxymanager/icon.png and /dev/null differ
diff --git a/nginxproxymanager/logo.png b/nginxproxymanager/logo.png
deleted file mode 100644
index a6691f6..0000000
Binary files a/nginxproxymanager/logo.png and /dev/null differ
diff --git a/nginxproxymanager/translations/en.yaml b/nginxproxymanager/translations/en.yaml
deleted file mode 100644
index 342aa2b..0000000
--- a/nginxproxymanager/translations/en.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
----
-configuration:
- log_level:
- name: Log level
- description: >-
- Controls the level of log details the add-on provides.
- reset_database:
- name: Reset database
- description: >-
- Enabling this option to delete and recreate the database.
-network:
- 80/tcp: HTTP Entrance port
- 81/tcp: NGinx Proxy Manager Admin web interface
- 443/tcp: HTTPS/SSL Entrance port
diff --git a/portainer/CHANGELOG.md b/portainer/CHANGELOG.md
deleted file mode 100644
index 6f0f850..0000000
--- a/portainer/CHANGELOG.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#95)
-- ⬆️ Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#96)
-- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#97)
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#98)
-- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#99)
-- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#102)
-- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#100)
-- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#101)
-- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2 @dependabot (#103)
-- ⬆️ Upgrades add-on base image to v9.2.2 @frenck (#107)
-- ⬆️ Upgrades Portainer to v1.24.2 @frenck (#108)
diff --git a/portainer/DOCS.md b/portainer/DOCS.md
deleted file mode 100644
index 1c97e2a..0000000
--- a/portainer/DOCS.md
+++ /dev/null
@@ -1,145 +0,0 @@
-# Home Assistant Community Add-on: Portainer
-
-Portainer is an open-source lightweight management UI which allows you to
-easily manage a Docker host(s) or Docker swarm clusters.
-
-It has never been so easy to manage Docker. Portainer provides a detailed
-overview of Docker and allows you to manage containers, images, networks and
-volumes.
-
-## WARNING
-
-The Portainer add-on is really powerful and gives you access to virtually
-your whole system. While this add-on is created and maintained with care and
-with security in mind, in the wrong or inexperienced hands,
-it could damage your system.
-
-## Installation
-
-To install this add-on, you'll first need to go to your profile and turn on
-"Advanced Mode", once that is done go back to Home Assistant add-ons and search
-for "Portainer" and install it as you would any other add-on.
-
-To be able to use this add-on, you'll need to disable protection mode on this
-add-on. Without it, the add-on is unable to access Docker.
-
-1. Search for the "Portainer" add-on in the Supervisor add-on store and
- install it.
-1. Set the "Protection mode" switch to off.
-1. Start the "Portainer" add-on.
-1. Check the logs of the "Portainer" add-on to see if everything went well.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-agent_secret: password
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `agent_secret`
-
-An option to set a shared agent secret. Must also be set in the remote agent
-as an Environment variable.
-
-## Known issues and limitations
-
-By default all Home Assistant managed containers are hidden from Portainer.
-This is recommended since fooling around with Home Assistant managed containers
-can easily lead to a broken system.
-
-Access to these containers can be gained by going into Portainer ->
-Settings -> Hidden containers. Then delete the listed hidden labels
-(io.hass.type labels). **Only do this if you know what you're doing!**
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2018-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-portainer/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-portainer/68836?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-portainer/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-portainer/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/portainer/README.md b/portainer/README.md
deleted file mode 100644
index 43b61c6..0000000
--- a/portainer/README.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# Home Assistant Community Add-on: Portainer
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Manage your Docker environment with ease.
-
-## About
-
-Portainer is an open-source lightweight management UI which allows you to
-easily manage your a Docker host(s) or Docker swarm clusters.
-
-It has never been so easy to manage Docker. Portainer provides a detailed
-overview of Docker and allows you to manage containers, images, networks and
-volumes.
-
-## WARNING
-
-The Portainer add-on is really powerful and gives you virtually access to
-your whole system. While this add-on is created and maintained with care and
-with security in mind, in the wrong or inexperienced hands,
-it could damage your system.
-
-![Portainer screenshot][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-portainer/68836?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
-[release-shield]: https://img.shields.io/badge/version-v1.5.1-blue.svg
-[release]: https://github.com/hassio-addons/addon-portainer/tree/v1.5.1
-[screenshot]: https://github.com/hassio-addons/addon-portainer/raw/main/images/screenshot.png
\ No newline at end of file
diff --git a/portainer/config.json b/portainer/config.json
deleted file mode 100644
index 34651dd..0000000
--- a/portainer/config.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "Portainer",
- "version": "1.5.1",
- "slug": "portainer",
- "description": "Manage your Docker environment with ease",
- "url": "https://github.com/hassio-addons/addon-portainer",
- "advanced": true,
- "ingress": true,
- "ingress_port": 1337,
- "startup": "services",
- "panel_icon": "mdi:docker",
- "homeassistant": "0.92.0b2",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7"
- ],
- "init": false,
- "map": [
- "ssl"
- ],
- "ports": {
- "8000/tcp": null
- },
- "ports_description": {
- "8000/tcp": "Edge Agent Api (Enable when managing remote edge agents)"
- },
- "hassio_api": true,
- "docker_api": true,
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "agent_secret": "str?"
- },
- "image": "ghcr.io/hassio-addons/portainer/{arch}"
-}
\ No newline at end of file
diff --git a/portainer/icon.png b/portainer/icon.png
deleted file mode 100644
index c411cf1..0000000
Binary files a/portainer/icon.png and /dev/null differ
diff --git a/portainer/logo.png b/portainer/logo.png
deleted file mode 100644
index e790cc3..0000000
Binary files a/portainer/logo.png and /dev/null differ
diff --git a/portainer/translations/en.yaml b/portainer/translations/en.yaml
deleted file mode 100644
index 208ab89..0000000
--- a/portainer/translations/en.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-configuration:
- log_level:
- name: Log level
- description: >-
- Controls the level of log details the add-on provides.
- agent_secret:
- name: Agent Secret
- description: >-
- An option to set a shared agent secret. Must also be set in the remote
- agent as an Environment variable.
-network:
- 8000/tcp: Edge Agent Api (Enable when managing remote edge agents)
diff --git a/qbittorrent/CHANGELOG.md b/qbittorrent/CHANGELOG.md
deleted file mode 100644
index 84fcaa1..0000000
--- a/qbittorrent/CHANGELOG.md
+++ /dev/null
@@ -1,108 +0,0 @@
-
-## 14.3.7.99202108230857-7410-fefce0337ubuntu20.04.1-ls151 (24-08-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.7.99202108032349-7395-0415c0c6fubuntu20.04.1-ls149 (05-08-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-- Improved smb mount code
-
-## 14.3.6.99202107121017-7389-3ac8c97e6ubuntu20.04.1-ls145 (13-07-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.6.99202107050919-7388-ede42910dubuntu20.04.1-ls143 (05-07-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.6.99202106272003-7387-ac8105c30ubuntu20.04.1-ls141 (28-06-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.5.99202106211645-7376-e25948e73ubuntu20.04.1-ls140 (22-06-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.5.99202106201814-7376-e25948e73ubuntu20.04.1-ls139 (21-06-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.5.99202106191735-7376-e25948e73ubuntu20.04.1-ls138 (20-06-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.5.99202106151345-7374-667d4e421ubuntu20.04.1-ls137 (16-06-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.5.99202106080759-7366-33e090cfcubuntu20.04.1-ls136 (09-06-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-- Add banner in log
-- New option openvpn_alternative_mode, binds only ovpn to qbittorrent and not webui
-
-## 14.3.5.99202105022253-7365-063844ed4ubuntu20.04.1-ls133 (11-05-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.5.99202105022253-7365-063844ed4ubuntu20.04.1-ls132 (04-05-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-- New option : use specific DNS instead of the router ones to avoid spamming, especially useful if using adguard home/pihole. Keep blank to use the router dns.
-
-## 14.3.4.99202104300534-7354-9f8a6e8fbubuntu20.04.1-ls131 (01-05-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-- Robust the smb script to test for several common options
-- smbv1 bit is not used anymore
-
-## 14.3.4.99202104281424-7353-7dd9e7343ubuntu20.04.1-ls130 (29-04-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.4.99202104250604-7352-b2a43eeffubuntu20.04.1-ls129 (27-04-2021)
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.4.99202104250604-7352-b2a43eeffubuntu20.04.1-ls128
-- Update to latest version from linuxserver/docker-qbittorrent
-- Clarified steps to check in case of smb mount fail
-- New option : set domain for smb share
-- Addition of openvpn support
-
-## 14.3.4.99202104180633-7350-2c8f322afubuntu20.04.1-ls127
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.4.99202104090418-7349-789803700ubuntu20.04.1-ls126
-- Update to latest version from linuxserver/docker-qbittorrent
-- Addition of ingress
-- Viewtorrent as default ui
-
-## 14.3.4.99202104031018-7348-2b6baa609ubuntu20.04.1-ls125
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.3.99202103251603-7345-332b173e0ubuntu20.04.1-ls122
-- Update to latest version from linuxserver/docker-qbittorrent ; Rebase to focal.
-
-## 14.3.3.99202101191832-7248-da0b276d5ubuntu20.04.1-ls120
-- Update to latest version from linuxserver/docker-qbittorrent ; Stop creating /config/data directory on startup
-
-## 14.3.3.99202101191832-7248-da0b276d5ubuntu20.04.1-ls119
-- Update to latest version from linuxserver/docker-qbittorrent ; Fix adding search engine plugin
-
-## 14.3.3.99202101191832-7248-da0b276d5ubuntu20.04.1-ls118
-- Update to latest version from linuxserver/docker-qbittorrent
-- Allow mounting shares named \ip\share in addition to //ip/share
-
-## 14.3.3.99202101191832-7248-da0b276d5ubuntu20.04.1-ls117
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.3.99202101191832-7248-da0b276d5ubuntu20.04.1-ls116
-- Correct VueTorrent link
-
-## 14.3.3.99202101191832-7248-da0b276d5ubuntu20.04.1-ls115
-- New configuration option : set download path
-- New configuration option : set username for webUI
-- New feature : mount smb share in protected mode
-- New feature : mount multiple smb shares
-- New config/feature : mount smbv1
-- Changed path : changed smb mount path from /storage/externalcifs to /mnt/$NAS name
-- Removed feature : ability to remove protection and mount local hdd, to increase the addon score
-- Update to latest version from linuxserver/docker-qbittorrent
-- Enabling of custom webUI from configuration
-
-## 14.3.3.99202101191832-7248-da0b276d5ubuntu18.04.1-ls114
-- Update to latest version from linuxserver/docker-qbittorrent
-
-## 14.3.3.99202101191832-7248-da0b276d5ubuntu18.04.1-ls113
-- Update to latest version from linuxserver/docker-qbittorrent
-- Whitelist option
-- Enables PUID/GUID options
-- Addition of ssl options
-- Addition of possibility to mount local disc or smb
diff --git a/qbittorrent/Dockerfile b/qbittorrent/Dockerfile
deleted file mode 100644
index f7b2c38..0000000
--- a/qbittorrent/Dockerfile
+++ /dev/null
@@ -1,109 +0,0 @@
-ARG BUILD_FROM
-ARG BUILD_VERSION
-FROM ${BUILD_FROM}
-
-# Base system
-ARG BASHIO_VERSION=0.13.1
-ARG TEMPIO_VERSION=2021.01.0
-ARG BUILD_ARCH
-
-RUN \
- ################
- # Install apps #
- ################
- apt-get update \
- && apt-get install -y \
- jq \
- curl \
- cifs-utils \
- keyutils \
- samba \
- nginx \
- coreutils \
- openvpn \
- && apt-get clean \
- \
- ##################
- # Install tempio #
- ##################
- && curl -L -f -s -o /usr/bin/tempio \
- "https://github.com/home-assistant/tempio/releases/download/${TEMPIO_VERSION}/tempio_${BUILD_ARCH}" \
- && chmod a+x /usr/bin/tempio \
- \
- ##############
- # STATISTICS #
- ##############
- && curl -L -f -s -o /tmp/tmp \
- "https://github.com/alexbelgium/downloads-tracker/archive/refs/tags/Qbittorrent.zip" \
- \
- ##################
- # Install bashio #
- ##################
- && mkdir -p /tmp/bashio \
- && curl -L -f -s "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" \
- | tar -xzf - --strip 1 -C /tmp/bashio \
- && mv /tmp/bashio/lib /usr/lib/bashio \
- && ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
- && rm -rf /tmp/bashio \
- \
- ########################################
- # Correct upstream image folders links #
- ########################################
- \
- # Allow UID and GID setting
- && sed -i 's/bash/bashio/g' /etc/cont-init.d/10-adduser \
- && sed -i 's/{PUID:-911}/(bashio::config "PUID")/g' /etc/cont-init.d/10-adduser \
- && sed -i 's/{PGID:-911}/(bashio::config "PGID")/g' /etc/cont-init.d/10-adduser \
- \
- # Correct permissions
- && sed -i 's=/config=/config/qBittorrent || true=g' /etc/cont-init.d/10-adduser \
- && sed -i 's= /config=/config/qBittorrent || true=g' /etc/cont-init.d/30-config \
- \
- # Set download folder to /share
- && sed -i 's|/downloads/|/share/qBittorrent/|g' /defaults/qBittorrent.conf \
- \
- # Remove fixed folders, allows connection to webUI
- && sed '11,13d' /defaults/qBittorrent.conf \
- && echo 'WebUI\HostHeaderValidation=false' >> /defaults/qBittorrent.conf \
- && echo 'WebUI\LocalHostAuth=false' >> /defaults/qBittorrent.conf
-
-# Copy root filesystem
-COPY rootfs /
-
-VOLUME [ "/data" ]
-
-# Environment variables
-ENV \
- DEBIAN_FRONTEND="noninteractive"\
- LANG="C.UTF-8" \
- PS1="$(whoami)@$(hostname):$(pwd)$ " \
- S6_BEHAVIOUR_IF_STAGE2_FAILS=2 \
- S6_CMD_WAIT_FOR_SERVICES=1 \
- TERM="xterm-256color"
-
-### LABELS
-ARG BUILD_ARCH
-ARG BUILD_DATE
-ARG BUILD_DESCRIPTION
-ARG BUILD_NAME
-ARG BUILD_REF
-ARG BUILD_REPOSITORY
-ARG BUILD_VERSION
-LABEL \
- io.hass.name="${BUILD_NAME}" \
- io.hass.description="${BUILD_DESCRIPTION}" \
- io.hass.arch="${BUILD_ARCH}" \
- io.hass.type="addon" \
- io.hass.version=${BUILD_VERSION} \
- maintainer="alexbelgium (https://github.com/alexbelgium)" \
- org.opencontainers.image.title="${BUILD_NAME}" \
- org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
- org.opencontainers.image.vendor="Home Assistant Add-ons" \
- org.opencontainers.image.authors="alexbelgium (https://github.com/alexbelgium)" \
- org.opencontainers.image.licenses="MIT" \
- org.opencontainers.image.url="https://github.com/alexbelgium" \
- org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
- org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
- org.opencontainers.image.created=${BUILD_DATE} \
- org.opencontainers.image.revision=${BUILD_REF} \
- org.opencontainers.image.version=${BUILD_VERSION}
diff --git a/qbittorrent/README.md b/qbittorrent/README.md
deleted file mode 100644
index 6478c9f..0000000
--- a/qbittorrent/README.md
+++ /dev/null
@@ -1,79 +0,0 @@
-![Supports aarch64 Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield]
-![Supports smb mounts][smb-shield] ![Supports openvpn][openvpn-shield] ![Supports ingress][ingress-shield] ![Supports ssl][ssl-shield]
-
-# About
-----------
-[Qbittorrent](https://github.com/qbittorrent/qBittorrent) is a cross-platform free and open-source BitTorrent client.
-This addon is based on the docker image from [linuxserver.io](https://www.linuxserver.io/).
-
-This addons has several configurable options :
-- allowing to mount local external drive, or smb share from the addon
-- [alternative webUI](https://github.com/qbittorrent/qBittorrent/wiki/List-of-known-alternate-WebUIs)
-- usage of ssl
-- ingress
-- optional openvpn support
-- allow setting specific DNS servers
-
-# Installation
-----------
-The installation of this add-on is pretty straightforward and not different in comparison to installing any other add-on.
-
-1. Add my add-ons repository to your home assistant instance (in supervisor addons store at top right, or click button below if you have configured my HA)
-[](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Falexbelgium%2Fhassio-addons)
-1. Install this add-on.
-1. Click the `Save` button to store your configuration.
-1. Set the add-on options to your preferences
-1. Start the add-on.
-1. Check the logs of the add-on to see if everything went well.
-1. Open the webUI and adapt the software options
-
-# Configuration
---------------
-Webui can be found at , or in your sidebar using Ingress.
-The default username/password : described in the startup log.
-Configurations can be done through the app webUI, except for the following options
-
-Network disk is mounted to /mnt/share name
-
-```yaml
-GUID: user
-GPID: user
-ssl: true/false
-certfile: fullchain.pem #ssl certificate
-keyfile: privkey.pem #sslkeyfile
-whitelist: "localhost,192.168.0.0/16" # list ip subnets that won't need a password (optional)
-Username: "admin" #username to access webui. Please change it as the default is admin for all installations.
-customUI: selection from list # alternative webUI can be set here. Latest version set at each addon start.
-DNS_servers : 8.8.8.8,1.1.1.1 # Keep blank to use router’s DNS, or set custom DNS to avoid spamming in case of local DNS ad-remover
-SavePath: "/share/qbittorrent" # Define the download directory
-networkdisks: "//SERVER/SHARE" # optional, list of smb servers to mount, separated by commas
-cifsusername: "username" # optional, smb username, same for all smb shares
-cifspassword: "password" # optional, smb password
-cifsdomain: "domain" # optional, allow setting the domain for the smb share
-password, same for all smb shares
-openvpn_enabled: true/false # is openvpn required to start qbittorrent
-openvpn_alternative_mode: true/false # if enabled, will tunnel only qbittorrent and not webui through vpn. Allows webui connection from external networks, but risk of decreased stability.
-openvpn_config": For example "config.ovpn" # name of the file located in /config/openvpn.
-openvpn_username": USERNAME
-openvpn_password: YOURPASSWORD
-```
-# Integration with HA
-Use the [qBittorrent integration](https://www.home-assistant.io/integrations/qbittorrent/)
-
-## Support
-Create an issue on github, or ask on the [home assistant thread](https://community.home-assistant.io/t/home-assistant-addon-qbittorrent/279247)
-
-# Illustration (vuetorrent webui)
---------------
-
-
-[repository]: https://github.com/alexbelgium/hassio-addons
-[smb-shield]: https://img.shields.io/badge/smb-yes-green.svg
-[openvpn-shield]: https://img.shields.io/badge/openvpn-yes-green.svg
-[ingress-shield]: https://img.shields.io/badge/ingress-yes-green.svg
-[ssl-shield]: https://img.shields.io/badge/ssl-yes-green.svg
-[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
-[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
-[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
-[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
-
diff --git a/qbittorrent/apparmor.txt b/qbittorrent/apparmor.txt
deleted file mode 100644
index b494bb4..0000000
--- a/qbittorrent/apparmor.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-#include
-
-profile db21ed7f_qbittorrent flags=(attach_disconnected,mediate_deleted) {
- #include
-
- capability,
- file,
- mount,
- umount,
- remount,
-
- capability setgid,
- capability chown,
- capability setuid,
- capability sys_admin,
- capability dac_read_search,
- capability net_admin,
- capability dac_override,
- capability net_bind_service,
- capability net_broadcast,
- capability sys_rawio,
-
-# S6-Overlay
- /bin/** ix,
- /usr/bin/** ix,
- /usr/lib/bashio/** ix,
- /etc/s6/** rix,
- /run/s6/** rix,
- /etc/services.d/** rwix,
- /etc/cont-init.d/** rwix,
- /etc/cont-finish.d/** rwix,
- /init rix,
- /var/run/** mrwkl,
- /var/run/ mrwkl,
- /dev/i2c-1 mrwkl,
- # Files required
- /dev/sda1 mrwkl,
- /dev/sdb1 mrwkl,
- /dev/mmcblk0p1 mrwkl,
- /dev/* mrwkl,
- /tmp/** mrkwl,
- /dev/net/tun mrwkl,
-
- # Data access
- /data/** rw,
-
- # suppress ptrace denials when using 'docker ps' or using 'ps' inside a container
- ptrace (trace,read) peer=docker-default,
-
- # docker daemon confinement requires explict allow rule for signal
- signal (receive) set=(kill,term) peer=/usr/bin/docker,
-
-}
diff --git a/qbittorrent/build.json b/qbittorrent/build.json
deleted file mode 100644
index cee55e7..0000000
--- a/qbittorrent/build.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "build_from": {
- "armv7": "linuxserver/qbittorrent:arm32v7-latest",
- "armhf": "linuxserver/qbittorrent:arm32v7-latest",
- "aarch64": "linuxserver/qbittorrent:arm64v8-latest",
- "amd64": "linuxserver/qbittorrent:amd64-latest"
- }
-}
diff --git a/qbittorrent/config.json b/qbittorrent/config.json
deleted file mode 100644
index 871012c..0000000
--- a/qbittorrent/config.json
+++ /dev/null
@@ -1,88 +0,0 @@
-{
- "name": "Qbittorrent",
- "version": "14.3.7.99202108230857-7410-fefce0337ubuntu20.04.1-ls151",
- "upstream": "14.3.7.99202108230857-7410-fefce0337ubuntu20.04.1-ls151",
- "slug": "qbittorrent",
- "description": "qBittorrent is a bittorrent client",
- "url": "https://github.com/alexbelgium/hassio-addons",
- "arch": [
- "aarch64",
- "amd64",
- "armv7",
- "armhf"
- ],
- "ingress": true,
- "ingress_port": 8099,
- "panel_icon": "mdi:progress-download",
- "hassio_api": true,
- "hassio_role": "homeassistant",
- "homeassistant_api": true,
- "ports": {
- "8080/tcp": 8081,
- "6881/tcp": 6881,
- "6881/udp": 6881
- },
- "ports_description": {
- "8080/tcp": "Web UI port (nor required for Ingress)",
- "6881/tcp": "Peer port",
- "6881/udp": "Peer port"
- },
- "map": [
- "media:rw",
- "config:rw",
- "share:rw",
- "ssl"
- ],
- "apparmor": true,
- "host_network": false,
- "privileged": [
- "SYS_ADMIN",
- "DAC_READ_SEARCH",
- "NET_ADMIN"
- ],
- "devices": [
- "/dev/net/tun"
- ],
- "webui": "[PROTO:ssl]://[HOST]:[PORT:8080]",
- "boot": "auto",
- "environment": {
- "WEBUI_PORT": "8080",
- "PUID": "0",
- "PGID": "0"
- },
- "options": {
- "ssl": false,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem",
- "whitelist": "localhost,127.0.0.1,172.30.0.0/16,192.168.0.0/16",
- "customUI": "vuetorrent",
- "SavePath": "/share/qBittorrent",
- "Username": "admin",
- "DNS_server": "8.8.8.8,1.1.1.1",
- "PUID": "0",
- "PGID": "0"
- },
- "schema": {
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str",
- "whitelist": "str?",
- "PUID": "int?",
- "PGID": "int?",
- "SavePath": "str?",
- "Username": "str?",
- "customUI": "list(|vuetorrent|qbit-matUI|qb-web)?",
- "DNS_server": "str?",
- "networkdisks": "str?",
- "smbv1": "bool?",
- "cifsusername": "str?",
- "cifspassword": "str?",
- "cifsdomain": "str?",
- "openvpn_enabled": "bool?",
- "openvpn_alternative_mode": "bool?",
- "openvpn_config": "str?",
- "openvpn_username": "str?",
- "openvpn_password": "str?",
- "TZ": "str?"
- }
-}
diff --git a/qbittorrent/icon.png b/qbittorrent/icon.png
deleted file mode 100644
index 6087a9e..0000000
Binary files a/qbittorrent/icon.png and /dev/null differ
diff --git a/qbittorrent/illustration.png b/qbittorrent/illustration.png
deleted file mode 100644
index 5a0a7a3..0000000
Binary files a/qbittorrent/illustration.png and /dev/null differ
diff --git a/qbittorrent/logo.png b/qbittorrent/logo.png
deleted file mode 100644
index 6087a9e..0000000
Binary files a/qbittorrent/logo.png and /dev/null differ
diff --git a/qbittorrent/rootfs/etc/cont-init.d/00-banner.sh b/qbittorrent/rootfs/etc/cont-init.d/00-banner.sh
deleted file mode 100644
index 71b1a4e..0000000
--- a/qbittorrent/rootfs/etc/cont-init.d/00-banner.sh
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/with-contenv bashio
-# ==============================================================================
-# Home Assistant Community Add-on: Base Images
-# Displays a simple add-on banner on startup
-# ==============================================================================
-if bashio::supervisor.ping; then
- bashio::log.blue \
- '-----------------------------------------------------------'
- bashio::log.blue " Add-on: $(bashio::addon.name)"
- bashio::log.blue " $(bashio::addon.description)"
- bashio::log.blue \
- '-----------------------------------------------------------'
-
- bashio::log.blue " Add-on version: $(bashio::addon.version)"
- if bashio::var.true "$(bashio::addon.update_available)"; then
- bashio::log.magenta ' There is an update available for this add-on!'
- bashio::log.magenta \
- " Latest add-on version: $(bashio::addon.version_latest)"
- bashio::log.magenta ' Please consider upgrading as soon as possible.'
- else
- bashio::log.green ' You are running the latest version of this add-on.'
- fi
-
- bashio::log.blue " System: $(bashio::info.operating_system)" \
- " ($(bashio::info.arch) / $(bashio::info.machine))"
- bashio::log.blue " Home Assistant Core: $(bashio::info.homeassistant)"
- bashio::log.blue " Home Assistant Supervisor: $(bashio::info.supervisor)"
-
- bashio::log.blue \
- '-----------------------------------------------------------'
- bashio::log.blue \
- ' Please, share the above information when looking for help'
- bashio::log.blue \
- ' or support in, e.g., GitHub, forums or the Discord chat.'
- bashio::log.green \
- ' https://github.com/alexbelgium/hassio-addons'
- bashio::log.blue \
- '-----------------------------------------------------------'
-fi
diff --git a/qbittorrent/rootfs/etc/cont-init.d/30-nginx.sh b/qbittorrent/rootfs/etc/cont-init.d/30-nginx.sh
deleted file mode 100644
index 598887c..0000000
--- a/qbittorrent/rootfs/etc/cont-init.d/30-nginx.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-#################
-# NGINX SETTING #
-#################
-
-declare admin_port
-declare qbittorrent_protocol=http
-
-# Generate Ingress configuration
-if bashio::config.true 'ssl'; then
-qbittorrent_protocol=https
-fi
-
-bashio::var.json \
- interface "$(bashio::addon.ip_address)" \
- port "^$(bashio::addon.ingress_port)" \
- protocol "${qbittorrent_protocol}" \
- certfile "$(bashio::config 'certfile')" \
- keyfile "$(bashio::config 'keyfile')" \
- ssl "^$(bashio::config 'ssl')" \
- | tempio \
- -template /etc/nginx/templates/ingress.gtpl \
- -out /etc/nginx/servers/ingress.conf
-
-######################
-# VUETORRENT INSTALL #
-######################
-
-LATEST_RELEASE=$(curl -s -L https://api.github.com/repos/wdaan/vuetorrent/releases/latest \
- | grep "browser_download_url.*zip" \
- | cut -d : -f 2,3 \
- | tr -d \" \
- | xargs)
-
-curl -s -S -O -J -L $LATEST_RELEASE
-unzip -o vuetorrent.zip -d / >/dev/null
-rm /vuetorrent.zip >/dev/null
diff --git a/qbittorrent/rootfs/etc/cont-init.d/90-dns_set_1.1.sh b/qbittorrent/rootfs/etc/cont-init.d/90-dns_set_1.1.sh
deleted file mode 100644
index dd80ef4..0000000
--- a/qbittorrent/rootfs/etc/cont-init.d/90-dns_set_1.1.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-###############
-# DNS SETTING #
-###############
-
-# Avoid usage of local dns such as adguard home or pihole\n"
-
-if bashio::config.has_value 'DNS_server'; then
- # Define variables
- DNSSERVER=$(bashio::config 'DNS_server')
- DNS=""
- DNSLIST=""
-
- # Get DNS servers
- for server in ${DNSSERVER//,/ } # Separate comma separated values
- do
- DNS="${DNS}nameserver $server\n"
- DNSLIST="$server $DNSLIST"
- done
-
- # Write resolv.conf
- printf "${DNS}" > /etc/resolv.conf
- chmod 644 /etc/resolv.conf
- bashio::log.info "DNS SERVERS set to $DNSLIST"
-else
- bashio::log.info "DNS Servers option empty. Using default router (or HA) dns servers."
-fi
diff --git a/qbittorrent/rootfs/etc/cont-init.d/91-qbittorrent_configuration.sh b/qbittorrent/rootfs/etc/cont-init.d/91-qbittorrent_configuration.sh
deleted file mode 100644
index 9ce1ade..0000000
--- a/qbittorrent/rootfs/etc/cont-init.d/91-qbittorrent_configuration.sh
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-##########
-# INIT #
-##########
-
-# Define preferences line
-cd /config/qBittorrent/
-LINE=$(sed -n '/Preferences/=' qBittorrent.conf)
-LINE=$((LINE + 1))
-
-##################
-# Default folder #
-##################
-
-if bashio::config.has_value 'SavePath'; then
- DOWNLOADS=$(bashio::config 'SavePath')
- sed -i '/SavePath/d' qBittorrent.conf
- sed -i "$LINE i\Downloads\\\SavePath=$DOWNLOADS" qBittorrent.conf
- mkdir -p $DOWNLOADS || true
- chown -R abc:abc $DOWNLOADS || bashio::log.info "Error, please check default save folder configuration in addon"
- bashio::log.info "Downloads can be found in $DOWNLOADS"
-
-else
- mkdir -p /share/qBittorrent || true
- chown -R abc:abc /share/qBittorrent
-
-fi
-
-################
-# Correct Port #
-################
-
-# sed -i '/PortRangeMin/d' qBittorrent.conf
-# sed -i "$LINE i\Connection\\\PortRangeMin=6881" qBittorrent.conf
-
-################
-# SSL CONFIG #
-################
-
-# Clean data
-sed -i '/HTTPS/d' qBittorrent.conf
-
-bashio::config.require.ssl
-if bashio::config.true 'ssl'; then
- bashio::log.info "ssl enabled. If webui don't work, disable ssl or check your certificate paths"
- #set variables
- CERTFILE=$(bashio::config 'certfile')
- KEYFILE=$(bashio::config 'keyfile')
- sed -i "$LINE i\WebUI\\\HTTPS\\\Enabled=True" qBittorrent.conf
- sed -i "$LINE i\WebUI\\\HTTPS\\\CertificatePath=/ssl/$CERTFILE" qBittorrent.conf
- sed -i "$LINE i\WebUI\\\HTTPS\\\KeyPath=/ssl/$KEYFILE" qBittorrent.conf
-fi
-
-################
-# WHITELIST #
-################
-
-cd /config/qBittorrent/
-if bashio::config.has_value 'whitelist'; then
- WHITELIST=$(bashio::config 'whitelist')
- #clean data
- sed -i '/AuthSubnetWhitelist/d' qBittorrent.conf
- sed -i "$LINE i\WebUI\\\AuthSubnetWhitelistEnabled=true" qBittorrent.conf
- sed -i "$LINE i\WebUI\\\AuthSubnetWhitelist=$WHITELIST" qBittorrent.conf
- bashio::log.info "Whitelisted subsets will not require a password : $WHITELIST"
-fi
-
-###############
-# USERNAME #
-###############
-
-cd /config/qBittorrent/
-if bashio::config.has_value 'Username'; then
- USERNAME=$(bashio::config 'Username')
- #clean data
- sed -i '/WebUI\\\Username/d' qBittorrent.conf
- #add data
- sed -i "$LINE i\WebUI\\\Username=$USERNAME" qBittorrent.conf
- bashio::log.info "WEBUI username set to $USERNAME"
-fi
-
-################
-# Alternate UI #
-################
-
-# Clean data
-sed -i '/AlternativeUIEnabled/d' qBittorrent.conf
-sed -i '/RootFolder/d' qBittorrent.conf
-rm -f -r /webui
-mkdir -p /webui
-chown abc:abc /webui
-
-if bashio::config.has_value 'customUI'; then
- ### Variables
- CUSTOMUI=$(bashio::config 'customUI')
- bashio::log.info "Alternate UI enabled : $CUSTOMUI. If webui don't work, disable this option"
-
- ### Download WebUI
- case $CUSTOMUI in
- "vuetorrent")
- curl -s -S -J -L -o /webui/release.zip $(curl -s https://api.github.com/repos/WDaan/VueTorrent/releases/latest | grep -o "http.*vuetorrent.zip") >/dev/null
- ;;
-
- "qbit-matUI")
- curl -s -S -J -L -o /webui/release.zip $(curl -s https://api.github.com/repos/bill-ahmed/qbit-matUI/releases/latest | grep -o "http.*Unix.*.zip") >/dev/null
- ;;
-
- "qb-web")
- curl -s -S -J -L -o /webui/release.zip $(curl -s https://api.github.com/repos/CzBiX/qb-web/releases | grep -o "http.*qb-web-.*zip") >/dev/null
- ;;
- esac
-
- ### Install WebUI
- mkdir -p /webui/$CUSTOMUI
- unzip -q /webui/release.zip -d /webui/$CUSTOMUI
- rm /webui/*.zip
- CUSTOMUIDIR="$(dirname "$(find /webui/$CUSTOMUI -iname "public" -type d)")"
- sed -i "$LINE i\WebUI\\\AlternativeUIEnabled=true" /config/qBittorrent/qBittorrent.conf
- sed -i "$LINE i\WebUI\\\RootFolder=$CUSTOMUIDIR" /config/qBittorrent/qBittorrent.conf
-fi
-
-##########
-# CLOSE #
-##########
-
-bashio::log.info "Default username/password : admin/adminadmin"
-bashio::log.info "Configuration can be found in /config/qBittorrent"
diff --git a/qbittorrent/rootfs/etc/cont-init.d/92-smb_mounts_v1.4.sh b/qbittorrent/rootfs/etc/cont-init.d/92-smb_mounts_v1.4.sh
deleted file mode 100644
index c9008b2..0000000
--- a/qbittorrent/rootfs/etc/cont-init.d/92-smb_mounts_v1.4.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-####################
-# MOUNT SMB SHARES #
-####################
-if bashio::config.has_value 'networkdisks'; then
- # Mount CIFS Share if configured and if Protection Mode is active
- bashio::log.info 'Mounting smb share(s)...'
-
- # Define variables
- MOREDISKS=$(bashio::config 'networkdisks')
- CIFS_USERNAME=$(bashio::config 'cifsusername')
- CIFS_PASSWORD=$(bashio::config 'cifspassword')
- MOUNTED=false
- SMBVERS=""
- SECVERS=""
-
- if bashio::config.has_value 'cifsdomain'; then
- DOMAIN=",domain=$(bashio::config 'cifsdomain')"
- else
- DOMAIN=""
- fi
-
- # Mounting disks
- for disk in ${MOREDISKS//,/ } # Separate comma separated values
- do
- # Clean name of network share
- disk=$(echo $disk | sed "s,/$,,") # Remove / at end of name
- diskname=${disk//\\//} #replace \ with /
- diskname=${diskname##*/} # Get only last part of the name
- # Prepare mount point
- mkdir -p /mnt/$diskname
- chown -R root:root /mnt/$diskname
-
- #Tries to mount with default options
- mount -t cifs -o rw,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$DOMAIN $disk /mnt/$diskname 2>ERRORCODE && MOUNTED=true || MOUNTED=false
-
- # if Fail test different smb and sec versions
- if [ $MOUNTED = false ]; then
- for SMBVERS in ",vers=3" ",vers=1.0" ",vers=2.1" ",vers=3.0" ",nodfs" ",uid=0,gid=0,forceuid,forcegid" ",noforceuid,noforcegid" ",${DOMAIN}"
- do
- mount -t cifs -o rw,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS $disk /mnt/$diskname 2>/dev/null && MOUNTED=true && break || MOUNTED=false
- for SECVERS in ",sec=ntlmi" ",sec=ntlmv2" ",sec=ntlmv2i" ",sec=ntlmssp" ",sec=ntlmsspi" ",sec=ntlm" ",sec=krb5i" ",sec=krb5" ",iocharset=utf8"
- do
- mount -t cifs -o rw,file_mode=0777,dir_mode=0777,username=$CIFS_USERNAME,password=${CIFS_PASSWORD}$SMBVERS$SECVERS $disk /mnt/$disk name 2>/dev/null && MOUNTED=true && break 2 && break || MOUNTED=false
- done
- done
- fi
-
- # Test smbclient if not mounted yet
- if [ $MOUNTED = false ]; then
- smbclient -L $disk -U $CIFS_USERNAME%$CIFS_PASSWORD --option="client min protocol"="NT1" && \
- bashio::log.info "Mounted with smbclient"
- fi
-
- # Messages
- if [ $MOUNTED = true ]; then
- #Test write permissions
- touch /mnt/$diskname/testaze && rm /mnt/$diskname/testaze && bashio::log.info "... $disk successfully mounted to /mnt/$diskname with options $SMBVERS$SECVERS" || bashio::log.fatal "Disk is mounted, however unable to write in the shared disk. Please check UID/GID for permissions, and if the share is rw"
- else
- # message if still fail
- bashio::log.fatal "Unable to mount $disk to /mnt/$diskname with username $CIFS_USERNAME, $CIFS_PASSWORD. Please check your remote share path, username, password, domain, try putting 0 in UID and GID" # Mount share
- bashio::log.fatal "Error read : $( /etc/openvpn/credentials
- openvpn_password=$(bashio::config 'openvpn_password')
- echo "${openvpn_password}" >> /etc/openvpn/credentials
- sed -i 's/auth-user-pass.*/auth-user-pass \/etc\/openvpn\/credentials/g' /etc/openvpn/config.ovpn
-
- # Permissions
- chmod 600 /etc/openvpn/credentials
- chmod 755 /etc/openvpn/up.sh
- chmod 755 /etc/openvpn/down.sh
- chmod 755 /etc/openvpn/up-qbittorrent.sh
- chmod +x /etc/openvpn/up.sh
- chmod +x /etc/openvpn/up-qbittorrent.sh
-
- bashio::log.info "openvpn correctly set, qbittorrent will run tunnelled through openvpn"
-
- #########################
- # CONFIGURE QBITTORRENT #
- #########################
-
- QBT_CONFIG_FILE="/config/qBittorrent/qBittorrent.conf"
- # Define preferences line
- cd /config/qBittorrent/
- LINE=$(sed -n '/Preferences/=' qBittorrent.conf)
- LINE=$((LINE + 1))
-
- # If qBittorrent.conf exists
- if [ -f "$QBT_CONFIG_FILE" ]; then
- # Remove previous line and bind tun0
- sed -i '/Interface/d' qBittorrent.conf
- # sed -i '/PortRangeMin/d' qBittorrent.conf
- # Bind tun0
- # sed -i "$LINE i\Connection\\\Interface=tun0" qBittorrent.conf
- # sed -i "$LINE i\Connection\\\InterfaceName=tun0" qBittorrent.conf
- else
- bashio::log.error "qBittorrent config file doesn't exist, openvpn must be added manually to qbittorrent options "
- exit 1
- fi
-
- #####################
- # ALTERNATIVE MODE #
- #####################
-
- if bashio::config.true 'openvpn_alternative_mode'; then
- # Remove previous line and bind tun0
- sed -i '/Interface/d' qBittorrent.conf
- # Bind tun0
- sed -i "$LINE i\Connection\\\Interface=tun0" qBittorrent.conf
- sed -i "$LINE i\Connection\\\InterfaceName=tun0" qBittorrent.conf
- # Modify ovpn config
- echo "route-nopull" >> /etc/openvpn/config.ovpn
- fi
-
-else
-
- ##################
- # REMOVE OPENVPN #
- ##################
- # Ensure no redirection by removing the direction tag
- cd /config/qBittorrent/
- sed -i '/Interface/d' qBittorrent.conf
- bashio::log.info "Direct connection without VPN enabled"
-
-fi
diff --git a/qbittorrent/rootfs/etc/nginx/includes/mime.types b/qbittorrent/rootfs/etc/nginx/includes/mime.types
deleted file mode 100644
index 7c7cdef..0000000
--- a/qbittorrent/rootfs/etc/nginx/includes/mime.types
+++ /dev/null
@@ -1,96 +0,0 @@
-types {
- text/html html htm shtml;
- text/css css;
- text/xml xml;
- image/gif gif;
- image/jpeg jpeg jpg;
- application/javascript js;
- application/atom+xml atom;
- application/rss+xml rss;
-
- text/mathml mml;
- text/plain txt;
- text/vnd.sun.j2me.app-descriptor jad;
- text/vnd.wap.wml wml;
- text/x-component htc;
-
- image/png png;
- image/svg+xml svg svgz;
- image/tiff tif tiff;
- image/vnd.wap.wbmp wbmp;
- image/webp webp;
- image/x-icon ico;
- image/x-jng jng;
- image/x-ms-bmp bmp;
-
- font/woff woff;
- font/woff2 woff2;
-
- application/java-archive jar war ear;
- application/json json;
- application/mac-binhex40 hqx;
- application/msword doc;
- application/pdf pdf;
- application/postscript ps eps ai;
- application/rtf rtf;
- application/vnd.apple.mpegurl m3u8;
- application/vnd.google-earth.kml+xml kml;
- application/vnd.google-earth.kmz kmz;
- application/vnd.ms-excel xls;
- application/vnd.ms-fontobject eot;
- application/vnd.ms-powerpoint ppt;
- application/vnd.oasis.opendocument.graphics odg;
- application/vnd.oasis.opendocument.presentation odp;
- application/vnd.oasis.opendocument.spreadsheet ods;
- application/vnd.oasis.opendocument.text odt;
- application/vnd.openxmlformats-officedocument.presentationml.presentation
- pptx;
- application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
- xlsx;
- application/vnd.openxmlformats-officedocument.wordprocessingml.document
- docx;
- application/vnd.wap.wmlc wmlc;
- application/x-7z-compressed 7z;
- application/x-cocoa cco;
- application/x-java-archive-diff jardiff;
- application/x-java-jnlp-file jnlp;
- application/x-makeself run;
- application/x-perl pl pm;
- application/x-pilot prc pdb;
- application/x-rar-compressed rar;
- application/x-redhat-package-manager rpm;
- application/x-sea sea;
- application/x-shockwave-flash swf;
- application/x-stuffit sit;
- application/x-tcl tcl tk;
- application/x-x509-ca-cert der pem crt;
- application/x-xpinstall xpi;
- application/xhtml+xml xhtml;
- application/xspf+xml xspf;
- application/zip zip;
-
- application/octet-stream bin exe dll;
- application/octet-stream deb;
- application/octet-stream dmg;
- application/octet-stream iso img;
- application/octet-stream msi msp msm;
-
- audio/midi mid midi kar;
- audio/mpeg mp3;
- audio/ogg ogg;
- audio/x-m4a m4a;
- audio/x-realaudio ra;
-
- video/3gpp 3gpp 3gp;
- video/mp2t ts;
- video/mp4 mp4;
- video/mpeg mpeg mpg;
- video/quicktime mov;
- video/webm webm;
- video/x-flv flv;
- video/x-m4v m4v;
- video/x-mng mng;
- video/x-ms-asf asx asf;
- video/x-ms-wmv wmv;
- video/x-msvideo avi;
-}
diff --git a/qbittorrent/rootfs/etc/nginx/includes/proxy_params.conf b/qbittorrent/rootfs/etc/nginx/includes/proxy_params.conf
deleted file mode 100644
index 1990d49..0000000
--- a/qbittorrent/rootfs/etc/nginx/includes/proxy_params.conf
+++ /dev/null
@@ -1,15 +0,0 @@
-proxy_http_version 1.1;
-proxy_ignore_client_abort off;
-proxy_read_timeout 86400s;
-proxy_redirect off;
-proxy_send_timeout 86400s;
-proxy_max_temp_file_size 0;
-
-proxy_set_header Accept-Encoding "";
-proxy_set_header Connection $connection_upgrade;
-proxy_set_header Host $http_host;
-proxy_set_header Upgrade $http_upgrade;
-proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-proxy_set_header X-Forwarded-Proto $scheme;
-proxy_set_header X-NginX-Proxy true;
-proxy_set_header X-Real-IP $remote_addr;
diff --git a/qbittorrent/rootfs/etc/nginx/includes/resolver.conf b/qbittorrent/rootfs/etc/nginx/includes/resolver.conf
deleted file mode 100644
index 6485af1..0000000
--- a/qbittorrent/rootfs/etc/nginx/includes/resolver.conf
+++ /dev/null
@@ -1 +0,0 @@
-resolver 127.0.0.11;
diff --git a/qbittorrent/rootfs/etc/nginx/includes/server_params.conf b/qbittorrent/rootfs/etc/nginx/includes/server_params.conf
deleted file mode 100644
index 09c0654..0000000
--- a/qbittorrent/rootfs/etc/nginx/includes/server_params.conf
+++ /dev/null
@@ -1,6 +0,0 @@
-root /dev/null;
-server_name $hostname;
-
-add_header X-Content-Type-Options nosniff;
-add_header X-XSS-Protection "1; mode=block";
-add_header X-Robots-Tag none;
diff --git a/qbittorrent/rootfs/etc/nginx/includes/ssl_params.conf b/qbittorrent/rootfs/etc/nginx/includes/ssl_params.conf
deleted file mode 100644
index 6f15005..0000000
--- a/qbittorrent/rootfs/etc/nginx/includes/ssl_params.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-ssl_protocols TLSv1.2;
-ssl_prefer_server_ciphers on;
-ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
-ssl_ecdh_curve secp384r1;
-ssl_session_timeout 10m;
-ssl_session_cache shared:SSL:10m;
-ssl_session_tickets off;
-ssl_stapling on;
-ssl_stapling_verify on;
diff --git a/qbittorrent/rootfs/etc/nginx/includes/upstream.conf b/qbittorrent/rootfs/etc/nginx/includes/upstream.conf
deleted file mode 100644
index b292326..0000000
--- a/qbittorrent/rootfs/etc/nginx/includes/upstream.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-upstream backend {
- server 127.0.0.1:8080;
-}
diff --git a/qbittorrent/rootfs/etc/nginx/nginx.conf b/qbittorrent/rootfs/etc/nginx/nginx.conf
deleted file mode 100644
index 7e5bc6f..0000000
--- a/qbittorrent/rootfs/etc/nginx/nginx.conf
+++ /dev/null
@@ -1,56 +0,0 @@
-# Run nginx in foreground.
-daemon off;
-
-# This is run inside Docker.
-user root;
-
-# Pid storage location.
-pid /var/run/nginx.pid;
-
-# Set number of worker processes.
-worker_processes 1;
-
-# Enables the use of JIT for regular expressions to speed-up their processing.
-pcre_jit on;
-
-# Write error log to Hass.io add-on log.
-error_log /proc/1/fd/1 error;
-
-# Load allowed environment vars
-env HASSIO_TOKEN;
-
-# Load dynamic modules.
-include /etc/nginx/modules/*.conf;
-
-# Max num of simultaneous connections by a worker process.
-events {
- worker_connections 512;
-}
-
-http {
- include /etc/nginx/includes/mime.types;
-
- log_format hassio '[$time_local] $status '
- '$http_x_forwarded_for($remote_addr) '
- '$request ($http_user_agent)';
-
- access_log /proc/1/fd/1 hassio;
- client_max_body_size 4G;
- default_type application/octet-stream;
- gzip on;
- keepalive_timeout 65;
- sendfile on;
- server_tokens off;
- tcp_nodelay on;
- tcp_nopush on;
-
- map $http_upgrade $connection_upgrade {
- default upgrade;
- '' close;
- }
-
- include /etc/nginx/includes/resolver.conf;
- include /etc/nginx/includes/upstream.conf;
-
- include /etc/nginx/servers/*.conf;
-}
diff --git a/qbittorrent/rootfs/etc/nginx/servers/.gitkeep b/qbittorrent/rootfs/etc/nginx/servers/.gitkeep
deleted file mode 100644
index 85ad51b..0000000
--- a/qbittorrent/rootfs/etc/nginx/servers/.gitkeep
+++ /dev/null
@@ -1 +0,0 @@
-Without requirements or design, programming is the art of adding bugs to an empty text file. (Louis Srygley)
diff --git a/qbittorrent/rootfs/etc/nginx/templates/ingress.gtpl b/qbittorrent/rootfs/etc/nginx/templates/ingress.gtpl
deleted file mode 100644
index f7dc63c..0000000
--- a/qbittorrent/rootfs/etc/nginx/templates/ingress.gtpl
+++ /dev/null
@@ -1,17 +0,0 @@
-server {
- listen {{ .interface }}:{{ .port }} default_server;
- server_name vue.torrent;
- include /etc/nginx/includes/server_params.conf;
- include /etc/nginx/includes/proxy_params.conf;
-
- location / {
- root /vuetorrent/public/;
- }
-
- location /api {
- proxy_pass {{ .protocol }}://backend;
- http2_push_preload on;
- client_max_body_size 10M;
- }
-
-}
diff --git a/qbittorrent/rootfs/etc/openvpn/down.sh b/qbittorrent/rootfs/etc/openvpn/down.sh
deleted file mode 100644
index 50d463f..0000000
--- a/qbittorrent/rootfs/etc/openvpn/down.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-# Copyright (c) 2006-2007 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# Contributed by Roy Marples (uberlord@gentoo.org)
-
-# If we have a service specific script, run this now
-if [ -x /etc/openvpn/"${RC_SVCNAME}"-down.sh ] ; then
- /etc/openvpn/"${RC_SVCNAME}"-down.sh "$@"
-fi
-
-# Restore resolv.conf to how it was
-if [ "${PEER_DNS}" != "no" ]; then
- if [ -x /sbin/resolvconf ] ; then
- /sbin/resolvconf -d "${dev}"
- elif [ -e /etc/resolv.conf-"${dev}".sv ] ; then
- # Important that we cat instead of move incase resolv.conf is
- # a symlink and not an actual file
- cat /etc/resolv.conf-"${dev}".sv > /etc/resolv.conf
- rm -f /etc/resolv.conf-"${dev}".sv
- fi
-fi
-
-if [ -n "${RC_SVCNAME}" ]; then
- # Re-enter the init script to start any dependant services
- if /etc/init.d/"${RC_SVCNAME}" --quiet status ; then
- export IN_BACKGROUND=true
- /etc/init.d/"${RC_SVCNAME}" --quiet stop
- fi
-fi
-
-exit 0
-
-# vim: ts=4 :
diff --git a/qbittorrent/rootfs/etc/openvpn/up-qbittorrent.sh b/qbittorrent/rootfs/etc/openvpn/up-qbittorrent.sh
deleted file mode 100644
index 0462645..0000000
--- a/qbittorrent/rootfs/etc/openvpn/up-qbittorrent.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-WEBUI_PORT=${WEBUI_PORT:-8080}
-
-exec s6-setuidgid abc /usr/bin/qbittorrent-nox --webui-port="${WEBUI_PORT}"
diff --git a/qbittorrent/rootfs/etc/openvpn/up.sh b/qbittorrent/rootfs/etc/openvpn/up.sh
deleted file mode 100644
index 82a9bae..0000000
--- a/qbittorrent/rootfs/etc/openvpn/up.sh
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/sh
-
-# launch qbittorrent
-/etc/openvpn/up-qbittorrent.sh "${4}" &
-
-# Copyright (c) 2006-2007 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# Contributed by Roy Marples (uberlord@gentoo.org)
-
-# Setup our resolv.conf
-# Vitally important that we use the domain entry in resolv.conf so we
-# can setup the nameservers are for the domain ONLY in resolvconf if
-# we're using a decent dns cache/forwarder like dnsmasq and NOT nscd/libc.
-# nscd/libc users will get the VPN nameservers before their other ones
-# and will use the first one that responds - maybe the LAN ones?
-# non resolvconf users just the the VPN resolv.conf
-
-# FIXME:- if we have >1 domain, then we have to use search :/
-# We need to add a flag to resolvconf to say
-# "these nameservers should only be used for the listed search domains
-# if other global nameservers are present on other interfaces"
-# This however, will break compatibility with Debians resolvconf
-# A possible workaround would be to just list multiple domain lines
-# and try and let resolvconf handle it
-
-if [ "${PEER_DNS}" != "no" ]; then
- NS=
- DOMAIN=
- SEARCH=
- i=1
- while true ; do
- eval opt=\$foreign_option_${i}
- [ -z "${opt}" ] && break
- if [ "${opt}" != "${opt#dhcp-option DOMAIN *}" ] ; then
- if [ -z "${DOMAIN}" ] ; then
- DOMAIN="${opt#dhcp-option DOMAIN *}"
- else
- SEARCH="${SEARCH}${SEARCH:+ }${opt#dhcp-option DOMAIN *}"
- fi
- elif [ "${opt}" != "${opt#dhcp-option DNS *}" ] ; then
- NS="${NS}nameserver ${opt#dhcp-option DNS *}\n"
- fi
- i=$((${i} + 1))
- done
-
- if [ -n "${NS}" ] ; then
- DNS="# Generated by openvpn for interface ${dev}\n"
- if [ -n "${SEARCH}" ] ; then
- DNS="${DNS}search ${DOMAIN} ${SEARCH}\n"
- elif [ -n "${DOMAIN}" ]; then
- DNS="${DNS}domain ${DOMAIN}\n"
- fi
- DNS="${DNS}${NS}"
- if [ -x /sbin/resolvconf ] ; then
- printf "${DNS}" | /sbin/resolvconf -a "${dev}"
- else
- # Preserve the existing resolv.conf
- if [ -e /etc/resolv.conf ] ; then
- cp /etc/resolv.conf /etc/resolv.conf-"${dev}".sv
- fi
- printf "${DNS}" > /etc/resolv.conf
- chmod 644 /etc/resolv.conf
- fi
- fi
-fi
-
-# Below section is Gentoo specific
-# Quick summary - our init scripts are re-entrant and set the RC_SVCNAME env var
-# as we could have >1 openvpn service
-
-if [ -n "${RC_SVCNAME}" ]; then
- # If we have a service specific script, run this now
- if [ -x /etc/openvpn/"${RC_SVCNAME}"-up.sh ] ; then
- /etc/openvpn/"${RC_SVCNAME}"-up.sh "$@"
- fi
-
- # Re-enter the init script to start any dependant services
- if ! /etc/init.d/"${RC_SVCNAME}" --quiet status ; then
- export IN_BACKGROUND=true
- /etc/init.d/${RC_SVCNAME} --quiet start
- fi
-fi
-
-###############
-# ALLOW WEBUI #
-###############
-
-/usr/sbin/ip route add 10.0.0.0/8 via 172.30.32.1
-/usr/sbin/ip route add 192.168.0.0/16 via 172.30.32.1
-/usr/sbin/ip route add 172.16.0.0/12 via 172.30.32.1
-
-exit 0
-
-# vim: ts=4 :
diff --git a/qbittorrent/rootfs/etc/services.d/nginx/finish b/qbittorrent/rootfs/etc/services.d/nginx/finish
deleted file mode 100644
index 4442401..0000000
--- a/qbittorrent/rootfs/etc/services.d/nginx/finish
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/execlineb -S0
-# ==============================================================================
-# Take down the S6 supervision tree when Nginx fails
-# ==============================================================================
-if { s6-test ${1} -ne 0 }
-if { s6-test ${1} -ne 256 }
-
-s6-svscanctl -t /var/run/s6/services
diff --git a/qbittorrent/rootfs/etc/services.d/nginx/run b/qbittorrent/rootfs/etc/services.d/nginx/run
deleted file mode 100644
index daf56fe..0000000
--- a/qbittorrent/rootfs/etc/services.d/nginx/run
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/with-contenv bashio
-# ==============================================================================
-
-# Wait for transmission to become available
-bashio::net.wait_for 8080 localhost 900
-
-bashio::log.info "Starting NGinx..."
-
-exec nginx
diff --git a/qbittorrent/rootfs/etc/services.d/qbittorrent/finish b/qbittorrent/rootfs/etc/services.d/qbittorrent/finish
deleted file mode 100644
index 4e4e802..0000000
--- a/qbittorrent/rootfs/etc/services.d/qbittorrent/finish
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/execlineb -S0
-# ==============================================================================
-# Take down the S6 supervision tree when the server fails
-# ==============================================================================
-if -n { s6-test $# -ne 0 }
-if -n { s6-test ${1} -eq 256 }
-
-s6-svscanctl -t /var/run/s6/services
diff --git a/qbittorrent/rootfs/etc/services.d/qbittorrent/run b/qbittorrent/rootfs/etc/services.d/qbittorrent/run
deleted file mode 100644
index 777edec..0000000
--- a/qbittorrent/rootfs/etc/services.d/qbittorrent/run
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/with-contenv bashio
-
-WEBUI_PORT=${WEBUI_PORT:-8080}
-
-if bashio::config.true 'openvpn_enabled'; then
- exec /usr/sbin/openvpn --config /etc/openvpn/config.ovpn --script-security 2 --up /etc/openvpn/up.sh --down /etc/openvpn/down.sh
-else
- exec s6-setuidgid abc /usr/bin/qbittorrent-nox --webui-port="${WEBUI_PORT}"
-fi
diff --git a/radarr/Dockerfile b/radarr/Dockerfile
deleted file mode 100755
index da2d1bd..0000000
--- a/radarr/Dockerfile
+++ /dev/null
@@ -1,6 +0,0 @@
-FROM linuxserver/radarr
-
-# MOFIFY DATA PATH
-RUN sed -i "s|config|data|g" /etc/services.d/radarr/run
-
-VOLUME [ "/data" ]
\ No newline at end of file
diff --git a/radarr/README.md b/radarr/README.md
deleted file mode 100644
index 3be8872..0000000
--- a/radarr/README.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# Marcelveldt's Hassio Add-ons: Radarr
-
-## About
-
-Radarr add-on based on the prebuilt docker image from linuxserver
-Radarr - A fork of Sonarr to work with movies à la Couchpotato.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Hass.io add-on.
-
-1. [Add my Hass.io add-ons repository][repository] to your Hass.io instance.
-1. Install this add-on.
-1. Click the `Save` button to store your configuration.
-1. Start the add-on.
-1. Check the logs of the add-on to see if everything went well.
-1. Carefully configure the add-on to your preferences, see the official documentation for for that.
-
-
-## Configuration
-
-Webui can be found at :7878
-
-By default hassio folders backup, share and ssl are available within the addon.
-You can use the share folder to access/store your media files.
-
-Documentation for Radarr: https://github.com/Radarr/Radarr
-
-
-
-[repository]: https://github.com/marcelveldt/hassio-addons-repo
\ No newline at end of file
diff --git a/radarr/config.json b/radarr/config.json
deleted file mode 100644
index 803121e..0000000
--- a/radarr/config.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "Radarr",
- "version": "latest",
- "slug": "radarr_docker",
- "description": "Radarr add-on based on the prebuilt docker image from linuxserver",
- "url": "https://github.com/marcelveldt/hassio-addons-repo/radarr",
- "startup": "services",
- "arch": [
- "aarch64",
- "amd64",
- "armhf"
- ],
- "ports": {
- "7878/tcp": 7878
- },
- "map": [
- "backup:rw",
- "share:rw",
- "ssl"
- ],
- "webui": "http://[HOST]:[PORT:7878]",
- "boot": "auto",
- "environment": {
- "PUID": "0",
- "PGID": "0"
- },
- "options": {},
- "schema": {}
-}
\ No newline at end of file
diff --git a/radarr/icon.png b/radarr/icon.png
deleted file mode 100644
index 5e143b5..0000000
Binary files a/radarr/icon.png and /dev/null differ
diff --git a/radarr/logo.png b/radarr/logo.png
deleted file mode 100644
index 5e143b5..0000000
Binary files a/radarr/logo.png and /dev/null differ
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index f2aa1dd..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-mkdocs==1.2.1
-mkdocs-material==7.1.9
diff --git a/rsync-local/CHANGELOG.md b/rsync-local/CHANGELOG.md
deleted file mode 100644
index 134210b..0000000
--- a/rsync-local/CHANGELOG.md
+++ /dev/null
@@ -1,20 +0,0 @@
-## 1.3.0 - 2021-04-02
-
-* 🔨 Use ghcr.io/home-assistant for base images
-
-
-## 1.2.0 - 2021-02-27
-
-* 🔼 Update rsync to `3.2.3-r1`
-* 🔼 Update alpine to `3.13`
-* 🔼 Update coreutils to `8.32-r2`
-
-
-## 1.0.1 - 2021-02-09
-
-* 🔨 Migrate to new `devices` option format. Thanks @LiJu09
-
-
-## 1.0.0 - 2019-10-28
-
-* ➕ Introduced local rsync addon
diff --git a/rsync-local/DOCS.md b/rsync-local/DOCS.md
deleted file mode 100644
index 1d0f1e1..0000000
--- a/rsync-local/DOCS.md
+++ /dev/null
@@ -1,45 +0,0 @@
-## Security
-
-In order to mount your external device the integrated AppArmor feature is disabled.
-This addon has access to the devices with the path from the available `external_device` config option!
-
-## Config
-
-Example config:
-
-```yaml
-folders:
- - /config
-external_folder: backup
-external_device: ''
-```
-
-### `folders`
-
-The list of folders you want to sync with the remote machine. Those locations are getting synced recursively.
-
-When a folder is specified with a slash at the end the content are directly copied inside the remote_folder.
-Without it a folder with the content is created.
-
-For example:
-
-* `- /config` would result into `/home/user/config`
-* `- /config/` would put the content of config into `/home/user`
-
-### `external_folder`
-
-The base folder on the external usb drive or usb stick for syncing the folders. Sub-folders with the folders from above will be created there.
-This path should not start with `/`.
-
-### `external_device`
-
-If you need to pin down a specific device to make your backup too, here is the option. Per default the device is `/dev/sda1`.
-Make sure to adjust it when for example running Home Assistant from a external drive. The `sda1` will be a partition of the Home Assistant drive.
-
-If no device is specified all available devices will be displayed in the log. No sync takes place without device.
-
-Available options: `/dev/sda1`, `/dev/sda2`, `/dev/sdb1`, `/dev/sdb2`
-
-### `options` (optional)
-
-Use your own options for rsync. This string is replacing the default one and get directly to rsync. The default is `-archive --recursive --compress --delete --prune-empty-dirs`.
diff --git a/rsync-local/Dockerfile b/rsync-local/Dockerfile
deleted file mode 100644
index eca34cf..0000000
--- a/rsync-local/Dockerfile
+++ /dev/null
@@ -1,12 +0,0 @@
-ARG BUILD_FROM
-FROM $BUILD_FROM AS RUNNING
-
-RUN apk update && \
- apk add --no-cache \
- 'rsync=3.2.3-r1' \
- 'coreutils=8.32-r2'
-
-COPY run.sh /
-RUN chmod a+x /run.sh
-ENTRYPOINT [ "/run.sh" ]
-
diff --git a/rsync-local/README.md b/rsync-local/README.md
deleted file mode 100644
index 6e66858..0000000
--- a/rsync-local/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# rsync local (Home Assistant Addon)
-
-Sync folders to a external usb drive with rsync.
-
-![Addon Stage][stage-badge]
-![Supports aarch64 Architecture][aarch64-badge]
-![Supports amd64 Architecture][amd64-badge]
-![Supports armhf Architecture][armhf-badge]
-![Supports armv7 Architecture][armv7-badge]
-![Supports i386 Architecture][i386-badge]
-
-[![Install on my Home Assistant][install-badge]][install-url]
-[![Donate][donation-badge]][donation-url]
-
-[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
-[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
-[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
-[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
-[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
-[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_rsync-local
-[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
-
-[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
-[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
-[donation-url]: https://www.buymeacoffee.com/Poeschl
diff --git a/rsync-local/build.json b/rsync-local/build.json
deleted file mode 100644
index 4ceab93..0000000
--- a/rsync-local/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "armhf": "ghcr.io/home-assistant/armhf-base:3.13",
- "armv7": "ghcr.io/home-assistant/armv7-base:3.13",
- "aarch64": "ghcr.io/home-assistant/aarch64-base:3.13",
- "amd64": "ghcr.io/home-assistant/amd64-base:3.13",
- "i386": "ghcr.io/home-assistant/i386-base:3.13"
- }
-}
diff --git a/rsync-local/config.json b/rsync-local/config.json
deleted file mode 100644
index c7e1414..0000000
--- a/rsync-local/config.json
+++ /dev/null
@@ -1,48 +0,0 @@
-
-{
- "name": "rsync local",
- "version": "1.3.0",
- "slug": "rsync-local",
- "description": "Sync folders to a external usb drive with rsync.",
- "url": "https://github.com/Poeschl/Hassio-Addons/tree/master/rsync-local",
- "arch": [
- "armhf",
- "armv7",
- "aarch64",
- "amd64",
- "i386"
- ],
- "homeassistant": "0.115.0",
- "startup": "application",
- "boot": "manual",
- "init":false,
- "image": "ghcr.io/poeschl/ha-rsync-local-{arch}",
- "ports": {},
- "map": [
- "share:rw",
- "config:rw",
- "backup:rw",
- "addons:rw",
- "ssl:rw",
- "media:rw"
- ],
- "devices":[
- "/dev/sda1",
- "/dev/sda2",
- "/dev/sdb1",
- "/dev/sdb2"
- ],
- "privileged":["SYS_ADMIN"],
- "apparmor": false,
- "schema": {
- "folders":["str"],
- "external_folder":"match(^[^/].+)",
- "external_device":"match(^(/dev/sd[a|b][1|2])?)",
- "options":"str?"
- },
- "options": {
- "folders":["/config"],
- "external_folder":"backup",
- "external_device":""
- }
-}
diff --git a/rsync-local/icon.png b/rsync-local/icon.png
deleted file mode 100644
index 066dc71..0000000
Binary files a/rsync-local/icon.png and /dev/null differ
diff --git a/rsync-local/logo.png b/rsync-local/logo.png
deleted file mode 100644
index e047ad3..0000000
Binary files a/rsync-local/logo.png and /dev/null differ
diff --git a/rsync-local/run.sh b/rsync-local/run.sh
deleted file mode 100644
index 09c66fb..0000000
--- a/rsync-local/run.sh
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/env bashio
-# shellcheck shell=bash
-set -e
-
-FOLDERS=$(bashio::config 'folders')
-EXTERNAL_FOLDER=$(bashio::config 'external_folder')
-
-if ! bashio::config.has_value 'external_device'; then
- bashio::log.info "Detected devices..."
- ls -h1 /dev/sd*
-
- bashio::log.info "Select your device and insert it in the 'external_device' addon option."
- bashio::log.info "For example: \"External_device: /dev/sda1\""
- bashio::log.info "Then restart the addon for the first sync."
-
-else
- bashio::log.info "Starting sync..."
- EXTERNAL_DEVICE=$(bashio::config 'external_device')
-
- if bashio::config.has_value 'options'; then
- OPTIONS=$(bashio::config 'options')
- bashio::log.info "Use options $OPTIONS"
- else
- OPTIONS='-archive --recursive --compress --delete --prune-empty-dirs'
- fi
-
- bashio::log.info "Mounting device ${EXTERNAL_DEVICE}"
- mkdir -p /external
- mount "${EXTERNAL_DEVICE}" /external
-
- for folder in $FOLDERS; do
-
- bashio::log.info "Sync $folder -> ${EXTERNAL_DEVICE}/${EXTERNAL_FOLDER}"
- # shellcheck disable=SC2086
- rsync ${OPTIONS} \
- "$folder" "/external/${EXTERNAL_FOLDER}"
- done
-
- umount /external
- bashio::log.info "Synced all folders"
-fi
diff --git a/rsync/CHANGELOG.md b/rsync/CHANGELOG.md
deleted file mode 100644
index 311749e..0000000
--- a/rsync/CHANGELOG.md
+++ /dev/null
@@ -1,28 +0,0 @@
-## 1.3.0 - 2021-04-02
-
-* 🔨 Use ghcr.io/home-assistant for base images
-* 🔼 Update openssh-client to `8.4_p1-r3`
-
-
-## 1.2.0 - 2021-02-27
-
-* 🔼 Update rsync to `3.2.3-r1`
-* 🔼 Update alpine to `3.13`
-* 🔼 Update coreutils to `8.32-r2`
-* 🔼 Update openssh-client to `8.4_p1-r2`
-
-
-## 1.1.1 - 2020-10-22
-
-* 🔨 Disable S6-Overlay Init
-
-
-## 1.1.0 - 2019-10-12
-
-* ➕ Introduced option for own rsync flags.
-* 🔨 Updated Docs for folders
-
-
-## 1.0.0 - 2019-10-10
-
-* ➕ Introduced rsync addon
diff --git a/rsync/DOCS.md b/rsync/DOCS.md
deleted file mode 100644
index 5f866f2..0000000
--- a/rsync/DOCS.md
+++ /dev/null
@@ -1,58 +0,0 @@
-## Precondition
-
-Make sure to have `rsync` installed on the remote machine. In case the addon gives you an `bash: rsync: command not found` in the logs `rsync` is missing there.
-
-## Key files
-
-The addon generates its own key files when no file is found at the specified location. If you use your own key make sure it is passwordless.
-
-## Config
-
-Example config:
-
-```yaml
-private_key_file: /ssl/rsync/id_rsa
-username: user
-folders:
- - /config
-remote_host: ''
-remote_folder: /home/user
-
-```
-
-### `private_key_file`
-
-The private key for the authentification on the remote machine. It specifies also the location of the generated key-pair if no key file is found.
-The location of the file is fixed to the `/ssl` volume.
-
-### `username`
-
-The username for the user on the remote machine the key is accepted.
-
-### `folders`
-
-The list of folders you want to sync with the remote machine. Those locations are getting synced recursively.
-
-When a folder is specified with a slash at the end the content are directly copied inside the remote_folder.
-Without it a folder with the content is created.
-
-For example:
-
-* `- /config` would result into `/home/user/config`
-* `- /config/` would put the content of config into `/home/user`
-
-### `remote_host`
-
-The ip or host of the remote machine you want to connect to.
-
-### `remote_port` (optional)
-
-The ssh port on the remote machine. If not set the default `22` is assumed.
-
-### `remote_folder`
-
-The base folder on the remote machine for syncing the folders. Sub-folders with the folders from above will be created there
-
-### `options` (optional)
-
-Use your own options for rsync. This string is replacing the default one and get directly to rsync. The default is `-archive --recursive --compress --delete --prune-empty-dirs`.
diff --git a/rsync/Dockerfile b/rsync/Dockerfile
deleted file mode 100644
index 64f6ce5..0000000
--- a/rsync/Dockerfile
+++ /dev/null
@@ -1,13 +0,0 @@
- ARG BUILD_FROM
-FROM $BUILD_FROM AS RUNNING
-
-RUN apk update && \
- apk add --no-cache \
- 'rsync=3.2.3-r1' \
- 'openssh-client=8.4_p1-r3' \
- 'coreutils=8.32-r2'
-
-COPY run.sh /
-RUN chmod a+x /run.sh
-ENTRYPOINT [ "/run.sh" ]
-
diff --git a/rsync/README.md b/rsync/README.md
deleted file mode 100644
index 64abfa3..0000000
--- a/rsync/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# rsync (Home Assistant Addon)
-
-Sync folders to a remote machine via ssh and rsync.
-
-![Addon Stage][stage-badge]
-![Supports aarch64 Architecture][aarch64-badge]
-![Supports amd64 Architecture][amd64-badge]
-![Supports armhf Architecture][armhf-badge]
-![Supports armv7 Architecture][armv7-badge]
-![Supports i386 Architecture][i386-badge]
-
-[![Install on my Home Assistant][install-badge]][install-url]
-[![Donate][donation-badge]][donation-url]
-
-
-[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
-[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
-[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
-[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
-[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
-[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_rsync
-[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
-
-[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
-[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
-[donation-url]: https://www.buymeacoffee.com/Poeschl
diff --git a/rsync/build.json b/rsync/build.json
deleted file mode 100644
index 4ceab93..0000000
--- a/rsync/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "armhf": "ghcr.io/home-assistant/armhf-base:3.13",
- "armv7": "ghcr.io/home-assistant/armv7-base:3.13",
- "aarch64": "ghcr.io/home-assistant/aarch64-base:3.13",
- "amd64": "ghcr.io/home-assistant/amd64-base:3.13",
- "i386": "ghcr.io/home-assistant/i386-base:3.13"
- }
-}
diff --git a/rsync/config.json b/rsync/config.json
deleted file mode 100644
index e11ef88..0000000
--- a/rsync/config.json
+++ /dev/null
@@ -1,45 +0,0 @@
-
-{
- "name": "rsync",
- "version": "1.3.0",
- "slug": "rsync",
- "description": "Sync folders to a remote machine via ssh and rsync.",
- "url": "https://github.com/Poeschl/Hassio-Addons/tree/master/rsync",
- "arch": [
- "armhf",
- "armv7",
- "aarch64",
- "amd64",
- "i386"
- ],
- "homeassistant": "0.115.0",
- "startup": "application",
- "boot": "manual",
- "init":false,
- "image": "ghcr.io/poeschl/ha-rsync-{arch}",
- "ports": {},
- "map": [
- "share:rw",
- "config:rw",
- "backup:rw",
- "addons:rw",
- "ssl:rw",
- "media:rw"
- ],
- "schema": {
- "private_key_file":"match(^/ssl/.+)",
- "username":"str",
- "folders":["str"],
- "remote_host":"str",
- "remote_port":"port?",
- "remote_folder":"str",
- "options":"str?"
- },
- "options": {
- "private_key_file":"/ssl/rsync/id_rsa",
- "username":"user",
- "folders":["/config"],
- "remote_host":"",
- "remote_folder":"/home/user"
- }
-}
diff --git a/rsync/icon.png b/rsync/icon.png
deleted file mode 100644
index 066dc71..0000000
Binary files a/rsync/icon.png and /dev/null differ
diff --git a/rsync/logo.png b/rsync/logo.png
deleted file mode 100644
index 8e2fd83..0000000
Binary files a/rsync/logo.png and /dev/null differ
diff --git a/rsync/run.sh b/rsync/run.sh
deleted file mode 100644
index 7594b21..0000000
--- a/rsync/run.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/usr/bin/env bashio
-# shellcheck shell=bash
-
-set -e
-
-PRIVATE_KEY_FILE=$(bashio::config 'private_key_file')
-if [ ! -f "$PRIVATE_KEY_FILE" ]; then
- bashio::log.info 'Generate keypair'
-
- mkdir -p "$(dirname "$PRIVATE_KEY_FILE")"
- ssh-keygen -t rsa -b 4096 -f "$PRIVATE_KEY_FILE" -N ''
-
- bashio::log.info "Generated key-pair in $PRIVATE_KEY_FILE"
-else
- bashio::log.info "Use private key from $PRIVATE_KEY_FILE"
-fi
-
-HOST=$(bashio::config 'remote_host')
-USERNAME=$(bashio::config 'username')
-FOLDERS=$(bashio::config 'folders')
-REMOTE_FOLDER=$(bashio::config 'remote_folder')
-
-if bashio::config.has_value 'remote_port'; then
- PORT=$(bashio::config 'remote_port')
- bashio::log.info "Use port $PORT"
-else
- PORT=22
-fi
-
-if bashio::config.has_value 'options'; then
- OPTIONS=$(bashio::config 'options')
- bashio::log.info "Use options $OPTIONS"
-else
- OPTIONS='-archive --recursive --compress --delete --prune-empty-dirs'
-fi
-
-for folder in $FOLDERS; do
-
- bashio::log.info "Sync $folder -> ${REMOTE_FOLDER}"
- # shellcheck disable=SC2086
- rsync ${OPTIONS} \
- -e "ssh -p ${PORT} -i ${PRIVATE_KEY_FILE} -oStrictHostKeyChecking=no" \
- "$folder" "${USERNAME}@${HOST}:${REMOTE_FOLDER}"
-done
-
-bashio::log.info "Synced all folders"
\ No newline at end of file
diff --git a/runtime.txt b/runtime.txt
deleted file mode 100644
index 548d713..0000000
--- a/runtime.txt
+++ /dev/null
@@ -1 +0,0 @@
-3.7
\ No newline at end of file
diff --git a/spotify/CHANGELOG.md b/spotify/CHANGELOG.md
deleted file mode 100644
index b96ebf2..0000000
--- a/spotify/CHANGELOG.md
+++ /dev/null
@@ -1,14 +0,0 @@
-[Full Changelog][changelog]
-
-### 🔨 Changes
-
-- ✏️ Fix docs link in README (#53)
-- ⬆ Upgrades cargo to 0.44.1-0ubuntu1~18.04.1
-- ⬆ Upgrades rustc to 1.43.0+dfsg1+llvm-1~exp1ubuntu2~18.04.1
-- ⬆ Upgrades add-on base image to v5.2.2
-
-[changelog]: https://github.com/hassio-addons/addon-spotify-connect/compare/v0.8.1...v0.8.2
-
-Questions? Join our Discord server! https://discord.me/hassioaddons
-Enjoying my add-ons? Consider supporting my work:
-https://github.com/sponsors/frenck or https://patreon.com/frenck
\ No newline at end of file
diff --git a/spotify/DOCS.md b/spotify/DOCS.md
deleted file mode 100644
index 046edaf..0000000
--- a/spotify/DOCS.md
+++ /dev/null
@@ -1,164 +0,0 @@
-# Home Assistant Community Add-on: Spotify Connect
-
-The Home Assistant Spotify Connect add-on allows you to use your device,
-running Home Assistant, to play your Spotify music. This add-on uses the
-Spotify Connect protocol, which makes it a device that can be controlled
-by all the official clients.
-
-For example; Running Home Assistant on a Raspberry Pi with this add-on
-installed will allow you to play your Spotify music on the Pi. So all you'll
-have to do is hook up your sound system to the Pi and start booming!
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "Spotify Connect" add-on in the Supervisor add-on store
- and install it.
-1. Select your audio output device and hit `Save` on that as well.
-1. Start the "Spotify Connect" add-on.
-1. Check the logs of the "Spotify Connect" to see if everything went well.
-1. Ready to go!
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-name: HomeAssistant
-bitrate: 320
-username: frenck@example.com
-password: MySpotifyPassword
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-Setting the `log_level` to `debug` will also turn on debug mode on the
-Spotify service.
-
-### Option: `name`
-
-The name of your device (the Spotify Connect target), as shown on
-the official Spotify clients.
-
-**Note**: _May only contain letters, numbers, hyphens (`-`) and dots (`.`)
-
-### Option: `bitrate`
-
-The bitrate Spotify should use. The higher, the better the sound quality,
-however, the add-on consumes more data.
-
-Valid values: `96`, `160` (default) or `320`.
-
-### Option: `username`
-
-**IMPORTANT**: _This requires a Spotify Premium account!_
-
-The username you use to login to your Spotify Premium account. Setting
-this will bind the add-on to your account exclusively.
-
-This can be helpful when experiencing discovery issues on your network or
-to disallow guests on your network to use the add-on.
-
-### Option: `password`
-
-The password you use to login to your Spotify Premium account.
-
-## Known issues and limitations
-
-- This add-on does support ARM-based devices, nevertheless, they must
- at least be an ARMv7 device. (Raspberry Pi 1 and Zero is not supported).
-- This add-on requires a Spotify Premium account.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality. The format of the log is based on
-[Keep a Changelog][keepchangelog].
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of ``MAJOR.MINOR.PATCH``. In a nutshell, the version will be incremented
-based on the following:
-
-- ``MAJOR``: Incompatible or major changes.
-- ``MINOR``: Backwards-compatible new features and enhancements.
-- ``PATCH``: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2018-2020 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-spotify-connect/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-spotify-connect/61210?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-spotify-connect/issues
-[keepchangelog]: http://keepachangelog.com/en/1.0.0/
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-spotify-connect/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
diff --git a/spotify/README.md b/spotify/README.md
deleted file mode 100644
index 4561aa0..0000000
--- a/spotify/README.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# Home Assistant Community Add-on: Spotify Connect
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Play Spotify music on your Home Assistant device.
-
-## About
-
-The Home Assistant Spotify Connect add-on allows you to use your device
-running Home Assistant to play your Spotify music. This add-on uses the
-Spotify Connect protocol, which makes it show up a device that can be
-controlled by all the official clients.
-
-For example; Running Home Assistant on a Raspberry Pi with this add-on
-installed will allow you to play your Spotify music via the Pi. So all
-you'll have to do is hook up your sound system to the Pi!
-
-![Spotify Connect][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-spotify-connect/61210?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2020.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.8.2-blue.svg
-[release]: https://github.com/hassio-addons/addon-spotify-connect/tree/v0.8.2
-[screenshot]: https://github.com/hassio-addons/addon-spotify-connect/raw/master/images/screenshot.png
\ No newline at end of file
diff --git a/spotify/config.json b/spotify/config.json
deleted file mode 100644
index c47fdda..0000000
--- a/spotify/config.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "Spotify Connect",
- "version": "0.8.2",
- "slug": "spotify",
- "description": "Play Spotify music on your Home Assistant device",
- "url": "https://github.com/hassio-addons/addon-spotify-connect",
- "startup": "services",
- "arch": [
- "aarch64",
- "amd64",
- "armv7",
- "i386"
- ],
- "map": [
- "config"
- ],
- "boot": "auto",
- "hassio_api": true,
- "hassio_role": "default",
- "host_network": true,
- "audio": true,
- "options": {
- "name": "HomeAssistant",
- "bitrate": 160
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "username": "str?",
- "password": "password?",
- "name": "match(^[A-Za-z0-9-.]+$)?",
- "bitrate": "list(96|160|320)"
- },
- "image": "hassioaddons/spotify-{arch}"
-}
\ No newline at end of file
diff --git a/spotify/icon.png b/spotify/icon.png
deleted file mode 100644
index b4f12cb..0000000
Binary files a/spotify/icon.png and /dev/null differ
diff --git a/spotify/logo.png b/spotify/logo.png
deleted file mode 100644
index 5e140a4..0000000
Binary files a/spotify/logo.png and /dev/null differ
diff --git a/syncthing/CHANGELOG.md b/syncthing/CHANGELOG.md
deleted file mode 100644
index 5183350..0000000
--- a/syncthing/CHANGELOG.md
+++ /dev/null
@@ -1,78 +0,0 @@
-## 1.11.0 - 2021-06-03
-
-* 🔼 Update syncthing to `1.17.0-r0`
-
-
-## 1.10.0 - 2021-04-02
-
-* 🔼 Update alpine to `3.13`
-* 🔼 Update syncthing to `1.16.0-r0`
-
-
-## 1.9.0 - 2021-04-02
-
-* 🔨 Use ghcr.io/home-assistant for base images
-
-
-## 1.8.1 - 2021-03-17
-
-* 🐛 Specifiy own S6 entrypoint, don't rely on the base image.
-
-
-## 1.8.0 - 2021-01-30
-
-* 🔼 Update alpine to `3.12`
-* 🔼 Update syncthing to `1.12.1-r0`
-* 🔨 Use Jemalloc for better memory handling
-
-
-## 1.7.0 - 2020-12-11
-
-* 🔼 Update syncthing to `1.12.0-r0` (also for aarch64)
-
-
-## 1.6.2 - 2020-10-22
-
-* 🔨 Use S6-Overlay for execution
-* 🔨 Start as `application` startup type
-
-
-## 1.6.1 - 2020-10-08
-
-* 🔼 Update syncthing to `1.10.0-r1` (aarch64 still`1.5.0-r0`)
-
-
-## 1.6.0 - 2020-10-07
-
-* ➕ Map also `/media` folder inside
-
-
-## 1.5.0 - 2020-10-06
-
-* 🔼 Update syncthing to `1.10.0-r0` (except for aarch64, there its downgraded to `1.5.0-r0`)
-
-
-## 1.4.0 - 2020-08-16
-
-* 🔼 Update syncthing to `1.8.0-r0` (except for aarch64, there its `1.7.1-r1`)
-* ➕ Map also `/ssl` folder inside
-
-## 1.3.0 - 2020-06-15
-
-* 🔼 Update syncthing to `1.6.1-r0`
-* 🔼 Update alpine to `3.12`
-
-## 1.2.0 - 2020-05-22
-
-* 🔨 Updated Changelog to new format
-* 🔼 Update syncthing to `1.5.0-r0`
-
-
-## 1.1.0 - 2020-04-16
-
-* 🔼 Update syncthing to `1.4.2-r0`
-
-
-## 1.0.0 - 2020-03-19
-
-* ➕ Started with syncthing version `1.4`
diff --git a/syncthing/Dockerfile b/syncthing/Dockerfile
deleted file mode 100644
index a19e350..0000000
--- a/syncthing/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-ARG BUILD_FROM
-FROM $BUILD_FROM
-
-RUN apk add --no-cache --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community \
- "syncthing=1.17.0-r0"
-
-ENTRYPOINT [ "/init" ]
-CMD []
-COPY root /
diff --git a/syncthing/README.md b/syncthing/README.md
deleted file mode 100644
index caccbc1..0000000
--- a/syncthing/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Syncthing Addon
-
-[Syncthing](https://syncthing.net/) wrapped inside a Homeassistant supervisor addon.
-
-Syncthing is a continuous file synchronization program. It synchronizes files between two or more computers in real time, safely protected from prying eyes. Your data is your data alone and you deserve to choose where it is stored, whether it is shared with some third party, and how it's transmitted over the internet.
-
-![Addon Stage][stage-badge]
-![Supports aarch64 Architecture][aarch64-badge]
-![Supports amd64 Architecture][amd64-badge]
-![Supports armhf Architecture][armhf-badge]
-![Supports armv7 Architecture][armv7-badge]
-![Supports i386 Architecture][i386-badge]
-
-[![Install on my Home Assistant][install-badge]][install-url]
-[![Donate][donation-badge]][donation-url]
-
-# Folders available
-
-When using this addon to permanently hold your data, put the synced folder inside `/data`. Otherwise it will be deleted on container restart.
-
-Also the `/share`, `/confg`, `/backup`, `/addons` and `/ssl` folders is mapped inside. Your can use them as persistant storage, too.
-They can also be used to backup the Home Assistant backups. 😉
-
-# Configuration
-
-The configuration is done via the web ui. Start the addon and configure it there.
-
-
-[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
-[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
-[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
-[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
-[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
-[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_syncthing
-[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
-
-[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
-[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
-[donation-url]: https://www.buymeacoffee.com/Poeschl
diff --git a/syncthing/build.json b/syncthing/build.json
deleted file mode 100644
index 4ceab93..0000000
--- a/syncthing/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "armhf": "ghcr.io/home-assistant/armhf-base:3.13",
- "armv7": "ghcr.io/home-assistant/armv7-base:3.13",
- "aarch64": "ghcr.io/home-assistant/aarch64-base:3.13",
- "amd64": "ghcr.io/home-assistant/amd64-base:3.13",
- "i386": "ghcr.io/home-assistant/i386-base:3.13"
- }
-}
diff --git a/syncthing/config.json b/syncthing/config.json
deleted file mode 100644
index 1dec68c..0000000
--- a/syncthing/config.json
+++ /dev/null
@@ -1,39 +0,0 @@
-
-{
- "name": "Syncthing",
- "version": "1.11.0",
- "slug": "syncthing",
- "description": "Syncthing is a continuous file synchronization program in a de-centralized way. ",
- "url": "https://github.com/Poeschl/Hassio-Addons/tree/master/syncthing",
- "arch": [
- "armhf",
- "armv7",
- "aarch64",
- "amd64",
- "i386"
- ],
- "homeassistant": "0.115.0",
- "image": "ghcr.io/poeschl/ha-syncthing-{arch}",
- "ports": {
- "8384/tcp": null,
- "22000/tcp": 22000,
- "21027/udp": 21027
- },
- "ports_description": {
- "8384/tcp": "Web frontend (not needed with Ingress)",
- "22000/tcp": "Sync protocol",
- "21027/udp": "Discovery broadcast"
- },
- "ingress": true,
- "ingress_port": 8384,
- "panel_title": "Syncthing",
- "panel_icon": "mdi:sync",
- "map": [
- "share:rw",
- "config:rw",
- "backup:rw",
- "addons:rw",
- "ssl:rw",
- "media:rw"
- ]
-}
diff --git a/syncthing/icon.png b/syncthing/icon.png
deleted file mode 100644
index 0ef31cb..0000000
Binary files a/syncthing/icon.png and /dev/null differ
diff --git a/syncthing/logo.png b/syncthing/logo.png
deleted file mode 100644
index c01ec06..0000000
Binary files a/syncthing/logo.png and /dev/null differ
diff --git a/syncthing/root/etc/cont-init.d/setup-config b/syncthing/root/etc/cont-init.d/setup-config
deleted file mode 100644
index 153978b..0000000
--- a/syncthing/root/etc/cont-init.d/setup-config
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-bashio::log.info 'Setup config'
-mkdir -p /data/config
\ No newline at end of file
diff --git a/syncthing/root/etc/services.d/syncthing/run b/syncthing/root/etc/services.d/syncthing/run
deleted file mode 100644
index 95359c4..0000000
--- a/syncthing/root/etc/services.d/syncthing/run
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-# Enable Jemalloc for better memory handling
-export LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
-
-export STNOUPGRADE=1
-
-bashio::log.info 'Start syncthing'
-syncthing -no-browser -no-restart -home=/data/config -gui-address=0.0.0.0:8384
diff --git a/tor/CHANGELOG.md b/tor/CHANGELOG.md
deleted file mode 100644
index 08be745..0000000
--- a/tor/CHANGELOG.md
+++ /dev/null
@@ -1,14 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump brpaz/hadolint-action from v1.4.0 to v1.5.0 @dependabot (#67)
-- ⬆️ Bump frenck/action-addon-linter from 2 to 2.1 @dependabot (#68)
-- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#69)
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#70)
-- ⬆️ Bump micnncim/action-label-syncer from 1.2.0 to 1.3.0 @dependabot (#71)
-- ⬆️ Bump docker/build-push-action from 2.4.0 to 2.5.0 @dependabot (#72)
-- ⬆️ Bump docker/setup-qemu-action from 1.1.0 to 1.2.0 @dependabot (#73)
-- ⬆️ Bump actions/cache from 2.1.5 to 2.1.6 @dependabot (#74)
-- ⬆️ Bump frenck/action-addon-information from 1.1 to 1.2.2 @dependabot (#76)
-- ⬆️ Upgrades add-on base image to v9.2.2 @frenck (#77)
diff --git a/tor/DOCS.md b/tor/DOCS.md
deleted file mode 100644
index f4124fd..0000000
--- a/tor/DOCS.md
+++ /dev/null
@@ -1,256 +0,0 @@
-# Home Assistant Community Add-on: Tor
-
-This Tor add-on allows you to access you Home Assistant instance as an Onion site,
-trough [Tor's Hidden Service][tor-hidden-service] feature. With this feature
-enabled, you do not need to open your firewall ports or setup HTTPS to enable
-secure remote access.
-
-This is useful if you want to have:
-
-- Access your Home Assistant instance remotely without opening a firewall port
- or setting up a VPN.
-- Don’t want to or know how to get an SSL/TLS certificate and HTTPS
- configuration setup.
-- Want to block attackers from even being able to access/scan your port and
- server at all.
-- Want to block anyone from knowing your home IP address and seeing your
- traffic to your Home Assistant.
-
-The add-on also offers the possibility to open a Sock proxy into the
-Tor network. Allowing you to access Tor from any of your (SOCKS supporting)
-applications through your Home Assistant installation.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "Tor" add-on in the Supervisor add-on store and install it.
-1. Start the "Tor" add-on
-1. Check the logs of the "Tor" add-on to see if everything went well. The log
- will also display your Tor .onion address.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-socks: true
-hidden_services: true
-stealth: true
-client_names:
- - haremote1
- - haremote2
-ports:
- - 8123
-```
-
-**Note**: _This is just an example, don't copy and past it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-These log level also affects the log levels of the Tor program.
-
-### Option: `socks`
-
-Setting this option to `true` opens port `9050` to listen for connections from
-SOCKS-speaking applications. Enabling this feature allows you to use other
-applications on your network to use the Tor network.
-
-**Note**: _The SOCKS protocol is unencrypted and (as we use it) unauthenticated,
-so exposing it in this way could leak your information to anybody watching your
-network, and allow anybody to use your computer as an open proxy._
-
-### Option: `hidden_services`
-
-The `hidden_services` options allows you to enable
-[Tor's Hidden Service][tor-hidden-service] feature in this add-on. You can offer
-a web server, SSH server, etc., without revealing your IP address to its users.
-In fact, because you don not use any public address, you can run a hidden
-service from behind your firewall.
-
-### Option: `stealth`
-
-The “stealth” entry above ensures traffic to and from your Home Assistant
-instance over Tor is hidden even from other nodes on the Tor network.
-
-Using a traditional Hidden Service, a hidden server publishes in the Tor network
-how to begin communication with it (not its real location). Tor uses a complex
-middle nodes link setup for bidirectional route anonymization; the server and
-client knows nothing about end point's location. A client asks the network how
-to reach a Hidden Service with this info.
-
-This option put the Tor Hidden Service in the authorize client mode. The
-hidden server publishes encrypted instructions on how to begin the
-communication, a client with the right key can decipher this info.
-If you are an authorized client, you only can locate the Hidden Service path
-and then try to establish a connection if you have this key.
-
-Enabling `stealth` can prevent a DDOS because if the client does not have the
-key, it can not find the path to the server. It does, however, require
-configuration of the client as well.
-
-### Option: `client_names`
-
-This option is required as soon as you enable the `stealth` option.
-
-Only clients that are listed here are authorized to access the hidden service.
-Valid client names are 1 to 16 characters long and only use characters in
-`A-Za-z0-9+-_` (no spaces). If this option is set, the hidden service is not
-accessible for clients without authorization anymore.
-
-Clients need to put this authorization data in their configuration file using
-HidServAuth.
-
-### Option: `ports`
-
-Configures hosts and ports to publish via a Tor Hidden Service.
-You can list multiple hosts and ports to publish.
-
-For example:
-
-```yaml
-ports:
- - "homeassistant:8123:80"
- - 22
-```
-
-The accepted syntaxs of this configuration is:
-
-- hostname:local_port:published_port `"homeassistant:8123:8080"`
-- local_ip:local_port:published_port `"192.168.1.60:8123:8080"`
-- hostname:local_port `"homeassistant:8123"`
-- local_port:published_port `"8123:8080"`
-- local_port `"8123"`
-
-If you do not define a published port, the local port will be used.
-If you do not define a hostname or IP adress `homeassistant` will be used.
-
-## Tor client access setup
-
-Using this add-on, you can access your Home Assistant instance over Tor from
-your laptop or mobile device, using Tor Browser and other software.
-
-However, with the `stealth` option enabled, the client would need extra
-configuration to be able to connect.
-
-Add the authentication cookie to your `torrc` client configuration on your
-laptop or mobile device. It would look like this:
-
-```bash
-HidServAuth abcdef1234567890.onion adEG02FAsdq/GAFeNSeLvc haremote1
-```
-
-For Tor Browser on Windows, Mac or Linux, you can find the torrc file here:
-`/Browser/TorBrowser/tor/ssl/torrc`
-
-Once you have added the entry, restart the browser, and then browse to the
-"dot onion" site address to connect to your Home Assistant instance.
-
-For [Orbot: Tor on Android][orbot], add it in **Orbot** -> **Menu**
--> **Settings** to the "Torrc Custom Config" entry. Restart Orbot, and then
-use the [Orfox browser app][orfox], and browse to the "dot onion" site name to
-access your Home Assistant instance. You can also use Orbot's VPN mode,
-to enable Tor access from any application on your device,
-such as Tasker or Owntracks.
-
-To our knowledge, there are currently no iOS apps available supporting the
-stealth feature.
-
-You can use the standard FireFox browser to access .onion domains, but you need
-to enable this in FireFix settings. In FireFox, type "about:config" in the
-address bar and click 'I accept the risk' to open the advanced settings.
-Search for "onion" to find the setting "network.dns.blockDotOnion" and toggle
-the setting so that it is set to "false". Now you should be able to access
-.onion sites.
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2017-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-tor/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-tor/33822?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-tor/issues
-[orbot]: https://guardianproject.info/apps/orbot
-[orfox]: https://guardianproject.info/apps/orfox
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-tor/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
-[tor-hidden-service]: https://www.torproject.org/docs/hidden-services.html.en
diff --git a/tor/README.md b/tor/README.md
deleted file mode 100644
index 7d46eee..0000000
--- a/tor/README.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Home Assistant Community Add-on: Tor
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Protect your privacy and access Home Assistant via Tor.
-
-## About
-
-This Tor add-on allows you to access you Home Assistant instance as an Onion site,
-trough [Tor's Hidden Service][tor-hidden-service] feature. With this feature
-enabled, you do not need to open your firewall ports or setup HTTPS to enable
-secure remote access.
-
-This is useful if you want to have:
-
-- Access your Home Assistant instance remotely without opening a firewall port
- or setting up a VPN.
-- Don’t want to or know how to get an SSL/TLS certificate and HTTPS
- configuration setup.
-- Want to block attackers from even being able to access/scan your port and
- server at all.
-- Want to block anyone from knowing your home IP address and seeing your
- traffic to your Home Assistant.
-
-The add-on also offers the possibility to open a Sock proxy into the
-Tor network. Allowing you to access Tor from any of your (SOCKS supporting)
-applications through your Home Assistant installation.
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-tor/33822?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
-[release-shield]: https://img.shields.io/badge/version-v3.0.5-blue.svg
-[release]: https://github.com/hassio-addons/addon-tor/tree/v3.0.5
-[tor-hidden-service]: https://www.torproject.org/docs/hidden-services.html.en
\ No newline at end of file
diff --git a/tor/config.json b/tor/config.json
deleted file mode 100644
index b178082..0000000
--- a/tor/config.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "Tor",
- "version": "3.0.5",
- "slug": "tor",
- "description": "Protect your privacy and access Home Assistant via Tor.",
- "url": "https://github.com/hassio-addons/addon-tor",
- "startup": "services",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "init": false,
- "ports": {
- "9050/tcp": 9050
- },
- "ports_description": {
- "9050/tcp": "Tor SOCKS proxy port"
- },
- "map": [
- "ssl:rw"
- ],
- "options": {
- "socks": false,
- "hidden_services": true,
- "stealth": false,
- "client_names": [],
- "ports": [
- "8123"
- ]
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "socks": "bool",
- "hidden_services": "bool",
- "stealth": "bool",
- "client_names": [
- "match(^[A-Za-z0-9+-_]{1,16}$)"
- ],
- "ports": [
- "match(^(.*:)?(?:[0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])?$)"
- ]
- },
- "image": "ghcr.io/hassio-addons/tor/{arch}"
-}
\ No newline at end of file
diff --git a/tor/icon.png b/tor/icon.png
deleted file mode 100644
index 444f31b..0000000
Binary files a/tor/icon.png and /dev/null differ
diff --git a/tor/logo.png b/tor/logo.png
deleted file mode 100644
index 148007e..0000000
Binary files a/tor/logo.png and /dev/null differ
diff --git a/traccar/CHANGELOG.md b/traccar/CHANGELOG.md
deleted file mode 100644
index 30c3693..0000000
--- a/traccar/CHANGELOG.md
+++ /dev/null
@@ -1,15 +0,0 @@
-## What’s changed
-
-## ✨ New features
-
-- Add add-on translation support @frenck (#90)
-
-## 🧰 Maintenance
-
-- Apply updated repository structure & CI workflow @frenck (#89)
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump actions/cache from v2.1.4 to v2.1.5 @dependabot (#86)
-- ⬆️ Bump brpaz/hadolint-action from v1.3.1 to v1.4.0 @dependabot (#87)
-- Upgrades add-on base image to v9.2.0 @frenck (#88)
diff --git a/traccar/DOCS.md b/traccar/DOCS.md
deleted file mode 100644
index 19b6b87..0000000
--- a/traccar/DOCS.md
+++ /dev/null
@@ -1,182 +0,0 @@
-# Home Assistant Community Add-on: Traccar
-
-[Traccar][traccar] is a modern GPS Tracking Platform, which is now available
-as an Hass.io add-on and allows you to run your GPS Tracking software
-without any cloud.
-
-Traccar supports more protocols and device models than any other GPS tracking
-system on the market, straight from your Hass.io instance. You can select GPS
-trackers from a variety of vendors from low-cost Chinese models to high-end
-quality brands.
-
-Traccar also has native mobile apps available for Android and iOS platforms
-so that you can track those as well. AND! With the Home Assistant `traccar`
-integration (introduced in 0.83) the data in Traccar will be sent back into
-your Home Assistant instance as well.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Ensure you have the official "MariaDB" add-on installed and running!
-1. Search for the "Traccar" add-on in the Supervisor add-on store
- and install it.
-1. Start the "Traccar" add-on
-1. Check the logs of the "Traccar" add-on to see if everything went well.
-1. Click the "OPEN WEB UI" button and log in using `admin`/`admin`.
-1. Be sure to change the username, email, and password!
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-ssl: true
-certfile: fullchain.pem
-keyfile: privkey.pem
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `ssl`
-
-Enables/Disables SSL (HTTPS) on the web interface.
-Set it `true` to enable it, `false` otherwise.
-
-### Option: `certfile`
-
-The certificate file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-### Option: `keyfile`
-
-The private key file to use for SSL.
-
-**Note**: _The file MUST be stored in `/ssl/`, which is the default_
-
-## Integrating into Home Assistant
-
-The `traccar` integration of Home Assistant makes it possible to transfer all
-assets tracked by Traccar to appear in Home Assistant as a tracked device.
-
-Add the following snippet to your Home Assistant `configuration.yaml` file.
-
-```yaml
-device_tracker:
- - platform: traccar
- host: localhost
- port: 18682
- username: TRACCAR_EMAIL_ADDRESS
- password: TRACCAR_PASSWORD
-```
-
-Restart Home Assistant.
-
-## Enabling more protocols
-
-By default, this add-on has disabled most of the GPS protocols. This has
-been done to reduce the number of open ports the add-on would create.
-
-By default, only the OsmAnd protocol (used by the Traccar Apps) and the API
-are enabled. If you want more protocols, you can do so, by adding entries
-to your `/config/traccar.xml` file.
-
-A list if all entries can be found here:
-
-
-
-To find out which protocol your device uses, please refer to the Traccar
-website:
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2018-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-traccar/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-traccar/81407?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-traccar/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-traccar/releases
-[semver]: http://semver.org/spec/v2.0.0.htm
-[traccar]: https://www.traccar.org
diff --git a/traccar/README.md b/traccar/README.md
deleted file mode 100644
index a8943da..0000000
--- a/traccar/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Home Assistant Community Add-on: Traccar
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Modern GPS Tracking Platform.
-
-![Traccar in the Home Assistant Frontend][screenshot]
-
-## About
-
-[Traccar][traccar] is a modern GPS Tracking Platform, which is now available
-as an Hass.io add-on and allows you to run your GPS Tracking software without
-any cloud.
-
-Traccar supports more protocols and device models than any other GPS tracking
-system on the market, straight from your Hass.io instance. You can select GPS
-trackers from a variety of vendors from low-cost Chinese models to high-end
-quality brands.
-
-Traccar also has native mobile apps available for Android and iOS platforms
-so that you can track those as well. AND! With the Home Assistant `traccar`
-integration (introduced in 0.83) the data in Traccar will be sent back into
-your Home Assistant instance as well.
-
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-traccar/81407?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-experimental-yellow.svg
-[release-shield]: https://img.shields.io/badge/version-v0.12.0-blue.svg
-[release]: https://github.com/hassio-addons/addon-traccar/tree/v0.12.0
-[screenshot]: https://github.com/hassio-addons/addon-traccar/raw/main/images/screenshot.png
-[traccar]: https://www.traccar.org
\ No newline at end of file
diff --git a/traccar/config.json b/traccar/config.json
deleted file mode 100644
index 5a48544..0000000
--- a/traccar/config.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "Traccar",
- "version": "0.12.0",
- "slug": "traccar",
- "description": "Modern GPS Tracking Platform",
- "url": "https://github.com/hassio-addons/addon-traccar",
- "ingress": true,
- "ingress_port": 0,
- "panel_icon": "mdi:car-connected",
- "startup": "services",
- "arch": [
- "aarch64",
- "amd64",
- "armhf",
- "armv7",
- "i386"
- ],
- "init": false,
- "host_network": true,
- "ports": {
- "80/tcp": null
- },
- "ports_description": {
- "80/tcp": "Web interface (Not required for Ingress)"
- },
- "map": [
- "config:rw",
- "ssl"
- ],
- "services": [
- "mysql:want"
- ],
- "options": {
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem"
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str"
- },
- "image": "ghcr.io/hassio-addons/traccar/{arch}"
-}
\ No newline at end of file
diff --git a/traccar/icon.png b/traccar/icon.png
deleted file mode 100644
index 8d597f7..0000000
Binary files a/traccar/icon.png and /dev/null differ
diff --git a/traccar/logo.png b/traccar/logo.png
deleted file mode 100644
index 1de13ec..0000000
Binary files a/traccar/logo.png and /dev/null differ
diff --git a/traccar/translations/de.yaml b/traccar/translations/de.yaml
deleted file mode 100644
index 503f1d7..0000000
--- a/traccar/translations/de.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-configuration:
- certfile:
- description: 'The certificate file to use for SSL. Note that this file must exist in the /ssl/ folder.'
- name: 'Certificate file'
- keyfile:
- description: 'The private key file to use for SSL. Note that this file must exist in the /ssl/ folder.'
- name: 'Private key file'
- log_level:
- description: 'Controls the level of log details the add-on provides.'
- name: 'Log level'
- ssl:
- description: 'Enables/Disables SSL (HTTPS) on the web interface.'
- name: SSL
-network:
- 80/tcp: 'Web interface (Not required for Ingress)'
diff --git a/traccar/translations/en.yaml b/traccar/translations/en.yaml
deleted file mode 100644
index e1b01f1..0000000
--- a/traccar/translations/en.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
----
-configuration:
- log_level:
- name: Log level
- description: >-
- Controls the level of log details the add-on provides.
- ssl:
- name: SSL
- description: >-
- Enables/Disables SSL (HTTPS) on the web interface.
- certfile:
- name: Certificate file
- description: >-
- The certificate file to use for SSL. Note that this file must
- exist in the /ssl/ folder.
- keyfile:
- name: Private key file
- description: >-
- The private key file to use for SSL. Note that this file must
- exist in the /ssl/ folder.
-network:
- 80/tcp: Web interface (Not required for Ingress)
diff --git a/traccar/translations/nl.yaml b/traccar/translations/nl.yaml
deleted file mode 100644
index 7db387e..0000000
--- a/traccar/translations/nl.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
-configuration:
- certfile:
- description: 'The certificate file to use for SSL. Note that this file must exist in the /ssl/ folder.'
- name: 'Certificate file'
- keyfile:
- description: 'The private key file to use for SSL. Note that this file must exist in the /ssl/ folder.'
- name: 'Private key file'
- log_level:
- description: 'Controls the level of log details the add-on provides.'
- name: 'Log niveau'
- ssl:
- description: 'Enables/Disables SSL (HTTPS) on the web interface.'
- name: SSL
-network:
- 80/tcp: 'Webinterface (niet vereist voor Ingress)'
diff --git a/vnc-viewer/CHANGELOG.md b/vnc-viewer/CHANGELOG.md
deleted file mode 100644
index 62e2c47..0000000
--- a/vnc-viewer/CHANGELOG.md
+++ /dev/null
@@ -1,30 +0,0 @@
-## 1.3.0 - 2021-04-02
-
-* 🔨 Use ghcr.io/home-assistant for base images
-
-
-## 1.2.1 - 2021-03-17
-
-* 🐛 Specifiy own S6 entrypoint, don't rely on the base image
-
-
-## 1.2.0 - 2012-01-10
-
-* ➕ Add password option, for not retyping the password every time
-* 🔨 Use noVNC icons since the addon is based on noVNC
-
-
-## 1.1.1 - 2021-01-05
-
-* 🔨 Use rounded icons, thanks @LiJu09
-* 🔨 Fixed addon github link, thanks @LiJu09
-
-
-## 1.1.0 - 2020-12-31
-
-* 🐛 Fix websocket url to connect to the included websockify
-
-
-## 1.0.0 - 2020-12-27
-
-* ➕ Add noVNC version `1.3.0-r8`
diff --git a/vnc-viewer/DOCS.md b/vnc-viewer/DOCS.md
deleted file mode 100644
index c69fc22..0000000
--- a/vnc-viewer/DOCS.md
+++ /dev/null
@@ -1,19 +0,0 @@
-## Config
-
-Example config:
-
-```yaml
-vnc_server_host: 192.168.0.23
-```
-
-### `vnc_server_host`
-
-The hostname or ip address of the VNC server the addon should connect to.
-
-### `vnc_server_port` (Optional)
-
-The remote port of the VNC server. (Default: `5900`)
-
-### `vnc_server_password` (Optional)
-
-The password of the the VNC server. When not set and the connection requires a password, it is asked at connection time.
diff --git a/vnc-viewer/Dockerfile b/vnc-viewer/Dockerfile
deleted file mode 100644
index 3dfbe8b..0000000
--- a/vnc-viewer/Dockerfile
+++ /dev/null
@@ -1,43 +0,0 @@
-ARG BUILD_FROM
-FROM $BUILD_FROM AS NO_VNC
-
-RUN apt-get update && apt-get -y --no-install-recommends install \
- git=1:2.20.1-2+deb10u3
-
-RUN git config --global advice.detachedHead false && \
- git clone https://github.com/novnc/noVNC.git -b v1.2.0 /noVNC
-
-FROM $BUILD_FROM AS WEBSOCKIFY
-
-RUN apt-get update && apt-get -y --no-install-recommends install \
- git=1:2.20.1-2+deb10u3 \
- python3=3.7.3-1 \
- python3-setuptools=40.8.0-1 \
- python3-numpy=1:1.16.2-1 \
- python3-pip=18.1-5
-
-RUN pip3 install --no-cache-dir Cython==0.29.21
-
-# hadolint ignore=DL3003
-RUN git config --global advice.detachedHead false && \
- git clone https://github.com/novnc/websockify -b v0.9.0 /websockify && \
- cd /websockify && python3 setup.py install
-
-FROM $BUILD_FROM AS RUNNING
-
-RUN apt-get update && apt-get -y --no-install-recommends install \
- git=1:2.20.1-2+deb10u3 \
- python3=3.7.3-1 \
- python3-setuptools=40.8.0-1 \
- python3-numpy=1:1.16.2-1 \
- procps=2:3.3.15-2 \
- && apt-get clean \
- && rm -rf /var/lib/apt/lists/*
-
-COPY --from=NO_VNC /noVNC /noVNC
-COPY --from=WEBSOCKIFY /usr/local/lib/python3.7/dist-packages/ /usr/local/lib/python3.7/dist-packages/
-COPY --from=WEBSOCKIFY /usr/local/bin/websockify /usr/local/bin/websockify
-
-ENTRYPOINT [ "/init" ]
-CMD []
-COPY root /
diff --git a/vnc-viewer/README.md b/vnc-viewer/README.md
deleted file mode 100644
index 6979b29..0000000
--- a/vnc-viewer/README.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# VNC Viewer
-
-Bundles the noVNC application inside an Home Assistant Addon. This allows the integration of any VNC server into Home Assistant.
-
-![Addon Stage][stage-badge]
-![Supports aarch64 Architecture][aarch64-badge]
-![Supports amd64 Architecture][amd64-badge]
-![Supports armhf Architecture][armhf-badge]
-![Supports armv7 Architecture][armv7-badge]
-![Supports i386 Architecture][i386-badge]
-
-[![Install on my Home Assistant][install-badge]][install-url]
-[![Donate][donation-badge]][donation-url]
-
-## Note
-
-Currently only one connection is possible, if more are needed create or join the thread in the repository discussions.
-
-
-[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
-[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
-[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
-[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
-[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
-[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_vnc
-[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
-
-[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
-[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
-[donation-url]: https://www.buymeacoffee.com/Poeschl
diff --git a/vnc-viewer/build.json b/vnc-viewer/build.json
deleted file mode 100644
index c937c1e..0000000
--- a/vnc-viewer/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "armhf": "ghcr.io/home-assistant/armhf-base-debian:buster",
- "armv7": "ghcr.io/home-assistant/armv7-base-debian:buster",
- "aarch64": "ghcr.io/home-assistant/aarch64-base-debian:buster",
- "amd64": "ghcr.io/home-assistant/amd64-base-debian:buster",
- "i386": "ghcr.io/home-assistant/i386-base-debian:buster"
- }
-}
diff --git a/vnc-viewer/config.json b/vnc-viewer/config.json
deleted file mode 100644
index 3d580da..0000000
--- a/vnc-viewer/config.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "name": "VNC Viewer",
- "version": "1.3.0",
- "slug": "vnc",
- "panel_icon": "mdi:remote-desktop",
- "description": "A noVNC client integrated in Home Assistant",
- "url": "https://github.com/Poeschl/Hassio-Addons/tree/master/vnc-viewer",
- "ingress": true,
- "ingress_port": 6080,
- "ingress_entry":"vnc.html?autoconnect=true",
- "arch": [
- "armv7",
- "armhf",
- "aarch64",
- "amd64",
- "i386"
- ],
- "startup": "application",
- "boot": "manual",
- "hassio_api": true,
- "image": "ghcr.io/poeschl/ha-vnc-{arch}",
- "options": {
- "vnc_server_host": "localhost"
- },
- "schema": {
- "vnc_server_host": "str",
- "vnc_server_port": "int?",
- "vnc_server_password":"str?"
- }
-}
diff --git a/vnc-viewer/icon.png b/vnc-viewer/icon.png
deleted file mode 100755
index 40823ef..0000000
Binary files a/vnc-viewer/icon.png and /dev/null differ
diff --git a/vnc-viewer/logo.png b/vnc-viewer/logo.png
deleted file mode 100755
index 496ebd2..0000000
Binary files a/vnc-viewer/logo.png and /dev/null differ
diff --git a/vnc-viewer/root/etc/cont-init.d/setup-defaults b/vnc-viewer/root/etc/cont-init.d/setup-defaults
deleted file mode 100644
index ee19f16..0000000
--- a/vnc-viewer/root/etc/cont-init.d/setup-defaults
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-bashio::log.info 'Set some defaults'
-
-sed -i "/UI.initSetting('show_dot'/ s/false/true/; /UI.initSetting('resize'/ s/off/scale/" /noVNC/app/ui.js
\ No newline at end of file
diff --git a/vnc-viewer/root/etc/cont-init.d/setup-novnc-ingress b/vnc-viewer/root/etc/cont-init.d/setup-novnc-ingress
deleted file mode 100644
index 02d6fa3..0000000
--- a/vnc-viewer/root/etc/cont-init.d/setup-novnc-ingress
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-bashio::log.info 'Prepare noVNC for Home Assistant ingress'
-
-host_port=$(bashio::core.port)
-ingress_url=$(bashio::addon.ingress_entry)
-
-sed -i "/UI.initSetting/ s@'websockify'@'${ingress_url:1}/websockify'@; /UI.initSetting/ s/ port/ ${host_port}/" /noVNC/app/ui.js
\ No newline at end of file
diff --git a/vnc-viewer/root/etc/services.d/noVNC/run b/vnc-viewer/root/etc/services.d/noVNC/run
deleted file mode 100644
index 2ddcf2d..0000000
--- a/vnc-viewer/root/etc/services.d/noVNC/run
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-if bashio::config.has_value 'vnc_server_password'; then
- bashio::log.info 'Inject vnc connection password'
- password=$(bashio::config 'vnc_server_password')
- sed -i "s/WebUtil.getConfigVar('password');/'${password}';/" /noVNC/app/ui.js
-fi
-
-server_host=$(bashio::config 'vnc_server_host')
-server_port=5900
-if bashio::config.has_value 'vnc_server_port'; then
- server_port=$(bashio::config 'vnc_server_port')
-fi
-
-server="${server_host}:${server_port}"
-
-bashio::log.info 'Start noVNC'
-bashio::log.info "Connecting to VNC $server"
-/noVNC/utils/launch.sh --listen 6080 --vnc $server
diff --git a/vscode/CHANGELOG.md b/vscode/CHANGELOG.md
deleted file mode 100644
index d68d050..0000000
--- a/vscode/CHANGELOG.md
+++ /dev/null
@@ -1,10 +0,0 @@
-## What’s changed
-
-## ⬆️ Dependency updates
-
-- ⬆️ Bump actions/stale from 3.0.18 to 3.0.19 @dependabot (#257)
-- ⬆️ Upgrades Home Assistant CLI to v4.12.2 @frenck (#260)
-- ⬆️ Upgrades code-server to 3.10.1 @frenck (#261)
-- ⬆️ Bump frenck/action-addon-information from 1.0.0 to 1.1 @dependabot (#262)
-- ⬆️ Upgrades code-server to 3.10.2 @frenck (#263)
-- ⬆️ Upgrades keesschollaart.vscode-home-assistant to 1.18.0 @frenck (#264)
diff --git a/vscode/DOCS.md b/vscode/DOCS.md
deleted file mode 100644
index 2fbe7c3..0000000
--- a/vscode/DOCS.md
+++ /dev/null
@@ -1,220 +0,0 @@
-# Home Assistant Community Add-on: Visual Studio Code
-
-This add-on runs Visual Studio Code, allowing you to edit your Home Assistant
-configuration directly from your web browser and can be embedded straight
-into the Home Assistant frontend UI.
-
-Visual Studio Code runs as a remote server using `code-server`, and is a
-fully fledged VSCode experience.
-
-The add-on has the Home Assistant, MDI icons and YAML extensions pre-installed
-and pre-configured right out of the box. This means that auto-completion works
-instantly, without the need for configuring anything.
-
-## Installation
-
-The installation of this add-on is pretty straightforward and not different in
-comparison to installing any other Home Assistant add-on.
-
-1. Search for the "Visual Studio Code" add-on in the Supervisor add-on store
- and install it.
-1. Start the "Visual Studio Code" add-on.
-1. Check the logs of the "Visual Studio Code" add-on to see if everything went
- well.
-1. Click the "OPEN WEB UI" button to open Visual Studio Code.
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-log_level: info
-config_path: /share/my_path
-packages:
- - mariadb-client
-init_commands:
- - ls -la
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `log_level`
-
-The `log_level` option controls the level of log output by the addon and can
-be changed to be more or less verbose, which might be useful when you are
-dealing with an unknown issue. Possible values are:
-
-- `trace`: Show every detail, like all called internal functions.
-- `debug`: Shows detailed debug information.
-- `info`: Normal (usually) interesting events.
-- `warning`: Exceptional occurrences that are not errors.
-- `error`: Runtime errors that do not require immediate action.
-- `fatal`: Something went terribly wrong. Add-on becomes unusable.
-
-Please note that each level automatically includes log messages from a
-more severe level, e.g., `debug` also shows `info` messages. By default,
-the `log_level` is set to `info`, which is the recommended setting unless
-you are troubleshooting.
-
-### Option: `config_path`
-
-This option allows you to override the default path the add-on will open
-when accessing the web interface. For example, use a different
-configuration directory like `/share/myconfig` instead of `/config`. If set
-to `/root` then all the common folders of HA such as `/config`, `/ssl`,
-`/share`, etc. will appear as subfolders for each access.
-
-When not configured, the addon will automatically use the default: `/config`
-
-### Option: `packages`
-
-Allows you to specify additional [Ubuntu packages][ubuntu-packages] to be
-installed in your shell environment (e.g., Python, PHP, Go).
-
-**Note**: _Adding many packages will result in a longer start-up
-time for the add-on._
-
-### Option: `init_commands`
-
-Customize your VSCode environment even more with the `init_commands` option.
-Add one or more shell commands to the list, and they will be executed every
-single time this add-on starts.
-
-## Resetting your VSCode settings to the add-on defaults
-
-The add-on updates your settings to be optimized for use with Home Assistant.
-As soon as you change a setting, the add-on will stop doing that since it
-might be destructive. However, in case you changed some things, but want to
-return to the defaults as delivered by this add-on, do the following:
-
-1. Open the Visual Studio Code editor.
-1. Click on `Terminal` in the top menu bar and clik on `New Terminal`.
-1. Execute the following command in the terminal window: `reset-settings`.
-1. Done!
-
-## Using with ESPHome
-
-The add-on has support for ESPHome (and its vscode extension), built-in!
-It has been installed and pre-configured for you, however, it might need
-an adjustment to your ESPHome add-on in order to function.
-
-1. Go to the ESPHome add-on configuration in your Supervisor panel.
-1. Add the `leave_front_door_open` option, since the vscode extension of
- ESPHome does not support authentication yet. The ESPHome add-on
- configuration would look like this:
-
- ```yaml
- leave_front_door_open: true
- ```
-
-1. Save the add-on configuration.
-1. Enable direct access to the ESPHome add-on, by enabling the network port.
- This option can be found on the ESPHome add-on settings page, in the
- "Network" section. In the "Host" field (that is now showing disabled),
- enter `6052` and hit save.
-1. Restart the ESPHome add-on.
-
-And you're set!
-
-No changes to the vscode add-on are needed, since it has been pre-configured.
-
-**Please note!** This opens up ESPHome for access within your network
-without authentication! Currently, this is how ESPHome advises how to
-set up your system, but it surely has security risks. We hope ESPHome
-will come up with a better solution for this soon.
-
-## Known issues and limitations
-
-- Can this add-on run on a Raspberry Pi? Yes, but only if you run a 64 bits
- operating system. Also, see point below.
-- This add-on currently only supports AMD64 and aarch64/ARM64 machines.
- Although we support ARM devices, please be aware, that this add-on is quite
- heavy to run, and requires quite a bit of RAM. We do not recommended to run
- it on devices with less than 4Gb of memory.
-- If you get a blank screen (and it worked before), it could be that you changed
- your workspace. Reinstalling the add-on will not help since it keeps the data
- in your browser. To remove it (in Chrome) open up developer tools (F12),
- then go to the application tab and click "clear storage".
- Now refresh the page and you're back in action.
-- "Visual Studio Code is unable to watch for file changes in this large
- workspace" (error ENOSPC)
-
- This issue is caused by your system not having enough file handles,
- which causes VSCode to be unable to watch all your files. For HassOS,
- currently the only option is to click on the little cog when the
- notification appears and tell it to not show again. In case you have
- a generic Linux setup (e.g., Ubuntu), follow this guide by Microsoft:
-
-
-
-## Changelog & Releases
-
-This repository keeps a change log using [GitHub's releases][releases]
-functionality.
-
-Releases are based on [Semantic Versioning][semver], and use the format
-of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
-based on the following:
-
-- `MAJOR`: Incompatible or major changes.
-- `MINOR`: Backwards-compatible new features and enhancements.
-- `PATCH`: Backwards-compatible bugfixes and package updates.
-
-## Support
-
-Got questions?
-
-You have several options to get them answered:
-
-- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on
- support and feature requests.
-- The [Home Assistant Discord chat server][discord-ha] for general Home
- Assistant discussions and questions.
-- The Home Assistant [Community Forum][forum].
-- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit]
-
-You could also [open an issue here][issue] GitHub.
-
-## Authors & contributors
-
-The original setup of this repository is by [Franck Nijhof][frenck].
-
-For a full list of all authors and contributors,
-check [the contributor's page][contributors].
-
-## License
-
-MIT License
-
-Copyright (c) 2019-2021 Franck Nijhof
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[contributors]: https://github.com/hassio-addons/addon-vscode/graphs/contributors
-[discord-ha]: https://discord.gg/c5DvZ4e
-[discord]: https://discord.me/hassioaddons
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-visual-studio-code/107863?u=frenck
-[frenck]: https://github.com/frenck
-[issue]: https://github.com/hassio-addons/addon-vscode/issues
-[reddit]: https://reddit.com/r/homeassistant
-[releases]: https://github.com/hassio-addons/addon-vscode/releases
-[semver]: http://semver.org/spec/v2.0.0
-[ubuntu-packages]: https://packages.ubuntu.com
diff --git a/vscode/README.md b/vscode/README.md
deleted file mode 100644
index 235553c..0000000
--- a/vscode/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Home Assistant Community Add-on: Visual Studio Code
-
-[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield]
-
-[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum]
-
-[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors]
-
-[![Support Frenck on Patreon][patreon-shield]][patreon]
-
-Visual Studio Code, accessible through the browser.
-
-## About
-
-This add-on runs Visual Studio Code, allowing you to edit your Home Assistant
-configuration straight from the web browser and can be embedded straight
-into the Home Assistant frontend UI.
-
-Visual Studio Code runs as a remote server using `code-server`, and is a
-fully fledged VSCode experience.
-
-The add-on has the Home Assistant, MDI icons and YAML extensions pre-installed
-and pre-configured right out of the box. This means that auto-completion works
-instantly, without the need for configuring anything.
-
-![Visual Studio Code in the Home Assistant Frontend][screenshot]
-
-[discord-shield]: https://img.shields.io/discord/478094546522079232.svg
-[discord]: https://discord.me/hassioaddons
-[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg
-[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-visual-studio-code/107863?u=frenck
-[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png
-[github-sponsors]: https://github.com/sponsors/frenck
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png
-[patreon]: https://www.patreon.com/frenck
-[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg
-[release-shield]: https://img.shields.io/badge/version-v3.4.1-blue.svg
-[release]: https://github.com/hassio-addons/addon-vscode/tree/v3.4.1
-[screenshot]: https://github.com/hassio-addons/addon-vscode/raw/main/images/screenshot.png
\ No newline at end of file
diff --git a/vscode/config.json b/vscode/config.json
deleted file mode 100644
index 218d0a9..0000000
--- a/vscode/config.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "Visual Studio Code",
- "version": "3.4.1",
- "slug": "vscode",
- "description": "Fully featured VSCode experience, to edit your HA config in the browser, including auto-completion!",
- "url": "https://github.com/hassio-addons/addon-vscode",
- "ingress": true,
- "ingress_port": 1337,
- "panel_icon": "mdi:microsoft-visual-studio-code",
- "startup": "services",
- "init": false,
- "arch": [
- "aarch64",
- "amd64"
- ],
- "uart": true,
- "hassio_api": true,
- "hassio_role": "manager",
- "homeassistant_api": true,
- "map": [
- "config:rw",
- "ssl:rw",
- "addons:rw",
- "media:rw",
- "share:rw",
- "backup:rw"
- ],
- "services": [
- "mysql:want",
- "mqtt:want"
- ],
- "options": {
- "packages": [],
- "init_commands": []
- },
- "schema": {
- "log_level": "list(trace|debug|info|notice|warning|error|fatal)?",
- "config_path": "str?",
- "packages": [
- "str"
- ],
- "init_commands": [
- "str"
- ]
- },
- "image": "ghcr.io/hassio-addons/vscode/{arch}"
-}
\ No newline at end of file
diff --git a/vscode/icon.png b/vscode/icon.png
deleted file mode 100644
index b3225e4..0000000
Binary files a/vscode/icon.png and /dev/null differ
diff --git a/vscode/logo.png b/vscode/logo.png
deleted file mode 100644
index 57a2ca2..0000000
Binary files a/vscode/logo.png and /dev/null differ
diff --git a/wiki.js/CHANGELOG.md b/wiki.js/CHANGELOG.md
deleted file mode 100644
index 197021e..0000000
--- a/wiki.js/CHANGELOG.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Changelog
-
-## 1.1.1
-- bump hassio-addon-base to V10.0.1
-
-## 1.1.0
-- bump hassio-addon-base to V10.0.0
-- Update Wiki.JS to 2.5.201
-
-## 1.0.1
-- Update Wiki.JS to 2.5.191
-
-## 1.0.0
-- Initial release
diff --git a/wiki.js/Dockerfile b/wiki.js/Dockerfile
deleted file mode 100644
index fb7f579..0000000
--- a/wiki.js/Dockerfile
+++ /dev/null
@@ -1,18 +0,0 @@
-ARG BUILD_FROM=ghcr.io/hassio-addons/base/amd64:10.0.1
-# hadolint ignore=DL3006
-FROM ${BUILD_FROM}
-
-RUN apk --no-cache add nodejs wget tar mariadb-client
-
-WORKDIR /wiki
-RUN wget https://github.com/Requarks/wiki/releases/download/2.5.201/wiki-js.tar.gz
-
-RUN tar xzf wiki-js.tar.gz -C /wiki
-RUN rm wiki-js.tar.gz
-RUN rm /wiki/config.sample.yml
-
-# Copy data for add-on
-COPY run.sh /
-#COPY config.yml /wiki/
-RUN chmod a+x /run.sh
-CMD [ "/run.sh" ]
diff --git a/wiki.js/README.md b/wiki.js/README.md
deleted file mode 100644
index c6c8abb..0000000
--- a/wiki.js/README.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Home Assistant Community Add-on: Wiki.js
-![Supports aarch64 Architecture][aarch64-shield] ![Supports amd64 Architecture][amd64-shield] ![Supports armhf Architecture][armhf-shield] ![Supports armv7 Architecture][armv7-shield]
-![Project Maintenance][maintenance-shield]
-
-Wiki.js for Homeassistant OS
-
-## About
-
-The most powerful and extensible open source Wiki software.
-Make documentation a joy to write using Wiki.js's beautiful and intuitive interface!
-
-## Installation
-
-[](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2FFaserF%2Fhassio-addons)
-
-The installation of this add-on is pretty straightforward and not different in comparison to installing any other custom Home Assistant add-on.
-Just click the link above or add my repo to the hassio addons repositorys: https://github.com/FaserF/hassio-addons
-
-Please ensure that the MariaDB Addon is installed!
-
-## Configuration
-
-**Note**: _Remember to restart the add-on when the configuration is changed._
-
-Example add-on configuration:
-
-```yaml
-ssl: true
-certfile: fullchain.pem
-keyfile: privkey.pem
-```
-
-**Note**: _This is just an example, don't copy and paste it! Create your own!_
-
-### Option: `ssl`
-
-Enables/Disables SSL (HTTPS) on the web interface. Set it `true` to enable it, `false` otherwise.
-
-If you need a self-signed certificate, have a look at my openssl addon: https://github.com/FaserF/hassio-addons/tree/master/openssl
-
-**Note**: _The files MUST be stored in `/ssl/`, which is the default_
-
-## Ingress
-
-This addon currently does not fully support ingress! Hopefully that will come soon.
-
-## Support
-
-Got questions or problems?
-
-You can [open an issue here][issue] GitHub.
-Please keep in mind, that this software is only tested on armv7 running on a Raspberry Pi 4.
-
-## Authors & contributors
-
-The original program is from the Requarks Team [NGPixel][NGPixel]. For more informations, please visit this page: https://github.com/Requarks/wiki
-The hassio addon is brought to you by [FaserF].
-
-## License
-
-MIT License
-
-Copyright (c) 2021 FaserF & Requarks
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
-[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg
-[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
-[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
-[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
-[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
-[FaserF]: https://github.com/FaserF/
-[issue]: https://github.com/FaserF/hassio-addons/issues
-[repository]: https://github.com/FaserF/hassio-addons/wiki.js
-[NGPixel]: https://github.com/NGPixel
\ No newline at end of file
diff --git a/wiki.js/build.json b/wiki.js/build.json
deleted file mode 100644
index 407e3ee..0000000
--- a/wiki.js/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "aarch64": "ghcr.io/hassio-addons/base/aarch64:10.0.1",
- "amd64": "ghcr.io/hassio-addons/base/amd64:10.0.1",
- "armhf": "ghcr.io/hassio-addons/base/armhf:10.0.1",
- "armv7": "ghcr.io/hassio-addons/base/armv7:10.0.1",
- "i386": "ghcr.io/hassio-addons/base/i386:10.0.1"
- }
-}
diff --git a/wiki.js/config.json b/wiki.js/config.json
deleted file mode 100644
index 6b30eac..0000000
--- a/wiki.js/config.json
+++ /dev/null
@@ -1,35 +0,0 @@
- {
- "name": "Wiki.JS",
- "version": "1.1.1",
- "slug": "wikijs",
- "description": "The most powerful and extensible open source Wiki software",
- "url": "https://github.com/FaserF/hassio-addons/tree/master/wiki.js",
- "arch": ["armhf", "armv7", "aarch64", "amd64"],
- "services": ["mysql:need"],
- "startup": "application",
- "boot": "auto",
- "webui": "[PROTO:ssl]://[HOST]:[PORT:3000]",
- "ingress": true,
- "panel_icon": "mdi:wikipedia",
- "options": {
- "ssl": true,
- "certfile": "fullchain.pem",
- "keyfile": "privkey.pem",
- "log_level": "info"
- },
- "schema": {
- "ssl": "bool",
- "certfile": "str",
- "keyfile": "str",
- "log_level": "list(error|warn|info|verbose|debug|silly)?",
- "reset_database": "bool?"
- },
- "ports": {
- "3000/tcp": 3000,
- "3443/tcp": 3443
- },
- "ports_description": {
- "3000/tcp": "HTTP Entrance port",
- "3443/tcp": "HTTPS/SSL Entrance port"
- }
- }
diff --git a/wiki.js/icon.png b/wiki.js/icon.png
deleted file mode 100644
index 5ff8951..0000000
Binary files a/wiki.js/icon.png and /dev/null differ
diff --git a/wiki.js/run.sh b/wiki.js/run.sh
deleted file mode 100644
index faca35e..0000000
--- a/wiki.js/run.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/usr/bin/with-contenv bashio
-ssl=$(bashio::config 'ssl')
-certfile=$(bashio::config 'certfile')
-keyfile=$(bashio::config 'keyfile')
-log_level=$(bashio::config 'log_level')
-
-declare host
-declare password
-declare port
-declare username
-
-# Require MySQL service to be available
-#if ! bashio::services.available "mysql"; then
-# bashio::log.error \
-# "This add-on requires the MariaDB core add-on 2.0 or newer!"
-# bashio::exit.nok \
-# "Make sure the MariaDB add-on is installed and running"
-#fi
-
-echo "This add-on requires the MariaDB core add-on 2.0 or newer!"
-
-host=$(bashio::services "mysql" "host")
-password=$(bashio::services "mysql" "password")
-port=$(bashio::services "mysql" "port")
-username=$(bashio::services "mysql" "username")
-
-#Drop database based on config flag
-if bashio::config.true 'reset_database'; then
- bashio::log.warning 'Recreating database'
- echo "DROP DATABASE IF EXISTS wiki;" \
- | mysql -h "${host}" -P "${port}" -u "${username}" -p"${password}"
-
- #Remove reset_database option
- bashio::addon.option 'reset_database'
-fi
-
-#Create Config file
-echo "port: 3000" > /wiki/config.yml
-echo "db:" >> /wiki/config.yml
-echo " type: mariadb" >> /wiki/config.yml
-echo " host: ${host}" >> /wiki/config.yml
-echo " port: ${port}" >> /wiki/config.yml
-echo " user: ${username}" >> /wiki/config.yml
-echo " pass: ${password}" >> /wiki/config.yml
-echo " db: wiki" >> /wiki/config.yml
-echo "ssl:" >> /wiki/config.yml
-echo " enabled: $ssl" >> /wiki/config.yml
-echo " port: 3443" >> /wiki/config.yml
-echo " provider: custom" >> /wiki/config.yml
-echo " format: pem" >> /wiki/config.yml
-echo " key: $keyfile" >> /wiki/config.yml
-echo " cert: $certfile" >> /wiki/config.yml
-echo "pool:" >> /wiki/config.yml
-echo "bindIP: 0.0.0.0" >> /wiki/config.yml
-echo "logLevel: $log_level" >> /wiki/config.yml
-echo "offline: false" >> /wiki/config.yml
-echo "ha: false" >> /wiki/config.yml
-echo "dataPath: ./data" >> /wiki/config.yml
-
-# Create database if not exists
-echo "CREATE DATABASE IF NOT EXISTS wiki;" \
- | mysql -h "${host}" -P "${port}" -u "${username}" -p"${password}"
-
-echo "Starting Wiki.JS"
-node server
\ No newline at end of file
diff --git a/ympd/CHANGELOG.md b/ympd/CHANGELOG.md
deleted file mode 100644
index cbafeb3..0000000
--- a/ympd/CHANGELOG.md
+++ /dev/null
@@ -1,34 +0,0 @@
-## 1.3.0 - 2021-04-02
-
-* 🔨 Use ghcr.io/home-assistant for base images
-
-
-## 1.2.1 - 2021-03-17
-
-* 🐛 Specifiy own S6 entrypoint, don't rely on the base image
-
-
-## 1.2.0 - 2021-01-30
-
-* 🔼 Update alpine to `3.13`
-* 🔨 Use Jemalloc for better memory handling
-
-
-## 1.1.0 - 2020-10-22
-
-* 🔼 Update alpine to `3.12`
-* 🔼 Update ympd to `1.3.0-r9`
-* 🔨 Use S6-Overlay for execution
-* 🔨 Start ympd as `application` startup
-
-
-## 1.0.1 - 2020-05-22
-
-* 🔨 Updated Changelog to new format
-
-
-## 1.0.0 - 2020-02-12
-
-### Added
-
-* ➕ Add ympd version `1.3.0-r8`
diff --git a/ympd/Dockerfile b/ympd/Dockerfile
deleted file mode 100644
index 2191318..0000000
--- a/ympd/Dockerfile
+++ /dev/null
@@ -1,8 +0,0 @@
-ARG BUILD_FROM
-FROM $BUILD_FROM
-
-RUN apk add --no-cache ympd=1.3.0-r9
-
-ENTRYPOINT [ "/init" ]
-CMD []
-COPY root /
diff --git a/ympd/README.md b/ympd/README.md
deleted file mode 100644
index 525ee11..0000000
--- a/ympd/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# ympd
-
-[ympd](https://ympd.org/) is a lightweight MPD (Music Player Daemon) web client that runs without a dedicated webserver or interpreters like PHP, NodeJS or Ruby. It's tuned for minimal resource usage and requires only very litte dependencies.
-
-![Addon Stage][stage-badge]
-![Supports aarch64 Architecture][aarch64-badge]
-![Supports amd64 Architecture][amd64-badge]
-![Supports armhf Architecture][armhf-badge]
-![Supports armv7 Architecture][armv7-badge]
-![Supports i386 Architecture][i386-badge]
-
-[![Install on my Home Assistant][install-badge]][install-url]
-[![Donate][donation-badge]][donation-url]
-
-
-[aarch64-badge]: https://img.shields.io/badge/aarch64-yes-green.svg?style=for-the-badge
-[amd64-badge]: https://img.shields.io/badge/amd64-yes-green.svg?style=for-the-badge
-[armhf-badge]: https://img.shields.io/badge/armhf-yes-green.svg?style=for-the-badge
-[armv7-badge]: https://img.shields.io/badge/armv7-yes-green.svg?style=for-the-badge
-[i386-badge]: https://img.shields.io/badge/i386-yes-green.svg?style=for-the-badge
-[install-url]: https://my.home-assistant.io/redirect/supervisor_addon?addon=243ffc37_ympd
-[stage-badge]: https://img.shields.io/badge/Addon%20stage-stable-green.svg?style=for-the-badge
-
-[install-badge]: https://img.shields.io/badge/Install%20on%20my-Home%20Assistant-41BDF5?logo=home-assistant&style=for-the-badge
-[donation-badge]: https://img.shields.io/badge/Buy%20me%20a%20coffee-%23d32f2f?logo=buy-me-a-coffee&style=for-the-badge&logoColor=white
-[donation-url]: https://www.buymeacoffee.com/Poeschl
diff --git a/ympd/build.json b/ympd/build.json
deleted file mode 100644
index c63bb53..0000000
--- a/ympd/build.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "build_from": {
- "armhf": "ghcr.io/home-assistant/armhf-base:3.13",
- "armv7": "ghcr.io/home-assistant/armv7-base:3.13",
- "aarch64": "ghcr.io/home-assistant/aarch64-base:3.13",
- "amd64": "ghcr.io/home-assistant/amd64-base:3.13",
- "i386": "ghcr.io/home-assistant/i386-base:3.13"
- }
-}
diff --git a/ympd/config.json b/ympd/config.json
deleted file mode 100644
index 50ebece..0000000
--- a/ympd/config.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "name": "ympd",
- "version": "1.3.0",
- "slug": "ympd",
- "panel_icon": "mdi:play-circle-outline",
- "description": "A simple webfrontend for any mpd compatible music player.",
- "url": "https://github.com/Poeschl/Hassio-Addons/tree/master/ympd",
- "ingress": true,
- "ingress_port": 6680,
- "arch": [
- "armv7",
- "armhf",
- "aarch64",
- "amd64",
- "i386"
- ],
- "startup": "application",
- "boot": "auto",
- "image": "ghcr.io/poeschl/ha-ympd-{arch}",
- "ports": {
- "6680/tcp": null
- },
- "ports_description": {
- "6680/tcp": "Web Frontend (Not needed with ingress feature)"
- },
- "options": {
- "host": "localhost",
- "port": "6600"
- },
- "schema": {
- "host": "str",
- "port": "port"
- }
-}
diff --git a/ympd/icon.png b/ympd/icon.png
deleted file mode 100644
index 2efde69..0000000
Binary files a/ympd/icon.png and /dev/null differ
diff --git a/ympd/logo.png b/ympd/logo.png
deleted file mode 100644
index 9268be1..0000000
Binary files a/ympd/logo.png and /dev/null differ
diff --git a/ympd/root/etc/services.d/ympd/run b/ympd/root/etc/services.d/ympd/run
deleted file mode 100644
index 0ed3891..0000000
--- a/ympd/root/etc/services.d/ympd/run
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/with-contenv bashio
-set -e
-
-# Enable Jemalloc for better memory handling
-export LD_PRELOAD="/usr/local/lib/libjemalloc.so.2"
-
-host=$(bashio::config 'host')
-port=$(bashio::config 'port')
-
-bashio::log.info 'Start ympd'
-ympd -w 6680 -h "$host" -p "$port"