diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 9f20426f..44bc1759 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -3,4 +3,10 @@ FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:${VARIANT}
RUN npm install -g pnpm
+RUN apt-get update \
+ && apt-get -y install --no-install-recommends \
+ python3-pip \
+ && apt-get clean -y \
+ && rm -rf /var/lib/apt/lists/*
+
ENV PATH="${PATH}:./node_modules/.bin"
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 15d1b9f3..06e7f6ee 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,27 +1,26 @@
{
- "name": "homepage",
- "build": {
- "dockerfile": "Dockerfile",
- "args": {
- "VARIANT": "18-bullseye"
- }
- },
- "customizations": {
- "vscode": {
- "extensions": [
- "dbaeumer.vscode-eslint",
- "mhutchie.git-graph",
- "streetsidesoftware.code-spell-checker",
- ],
- "settings": {
- "eslint.format.enable": true,
- "eslint.lintTask.enable": true,
- "eslint.packageManager": "pnpm"
- }
- }
- },
- "postCreateCommand": ".devcontainer/setup.sh",
- "forwardPorts": [
- 3000
- ]
+ "name": "homepage",
+ "build": {
+ "dockerfile": "Dockerfile",
+ "args": {
+ "VARIANT": "18-bullseye",
+ },
+ },
+ "customizations": {
+ "vscode": {
+ "extensions": [
+ "dbaeumer.vscode-eslint",
+ "mhutchie.git-graph",
+ "streetsidesoftware.code-spell-checker",
+ "esbenp.prettier-vscode",
+ ],
+ "settings": {
+ "eslint.format.enable": true,
+ "eslint.lintTask.enable": true,
+ "eslint.packageManager": "pnpm",
+ },
+ },
+ },
+ "postCreateCommand": ".devcontainer/setup.sh",
+ "forwardPorts": [3000],
}
diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh
index 70bf96cf..ea5d2fe9 100755
--- a/.devcontainer/setup.sh
+++ b/.devcontainer/setup.sh
@@ -3,6 +3,8 @@
# Install Node packages
pnpm install
+python3 -m pip install -r requirements.txt
+
# Copy in skeleton configuration if there is no existing configuration
if [ ! -d "config/" ]; then
echo "Adding skeleton config"
diff --git a/.editorconfig b/.editorconfig
index a481ff77..7037b0f6 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -11,3 +11,6 @@ charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/.eslintrc.json b/.eslintrc.json
index 6c1da17d..70ba41d1 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -13,6 +13,12 @@
{
"newlines-between": "always"
}
+ ],
+ "no-else-return": [
+ "error",
+ {
+ "allowElseIf": true
+ }
]
},
"settings": {
diff --git a/.github/DISCUSSION_TEMPLATE/support.yml b/.github/DISCUSSION_TEMPLATE/support.yml
new file mode 100644
index 00000000..2493df22
--- /dev/null
+++ b/.github/DISCUSSION_TEMPLATE/support.yml
@@ -0,0 +1,56 @@
+body:
+ - type: markdown
+ attributes:
+ value: |
+ ### โ ๏ธ Before opening a discussion:
+
+ - [Check the troubleshooting guide](https://gethomepage.dev/troubleshooting/).
+ - [Search existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) [and discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions) (including closed ones!).
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: A clear and concise description of the issue or question. If applicable, add screenshots to help explain your problem.
+ validations:
+ required: true
+ - type: input
+ id: version
+ attributes:
+ label: homepage version
+ placeholder: e.g. v0.4.18 (4ea2798)
+ validations:
+ required: true
+ - type: dropdown
+ id: install-method
+ attributes:
+ label: Installation method
+ options:
+ - Docker
+ - Unraid
+ - Source
+ - Other (please describe above)
+ validations:
+ required: true
+ - type: textarea
+ id: config
+ attributes:
+ label: Configuration
+ description: Please provide any relevant service, widget or otherwise related configuration here
+ render: yaml
+ - type: textarea
+ id: container-logs
+ attributes:
+ label: Container Logs
+ description: Please review and provide any logs from the container, if relevant
+ - type: textarea
+ id: browser-logs
+ attributes:
+ label: Browser Logs
+ description: Please review and provide any logs from the browser, if relevant
+ - type: textarea
+ id: troubleshooting
+ attributes:
+ label: Troubleshooting
+ description: Please include output from your [troubleshooting tests](https://gethomepage.dev/more/troubleshooting/#service-widget-errors), if relevant.
+ validations:
+ required: true
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
index 3e283d69..39bfee33 100644
--- a/.github/FUNDING.yml
+++ b/.github/FUNDING.yml
@@ -1,3 +1,3 @@
-github: benphelps
-ko_fi: benphelps
-custom: ["https://paypal.me/phelpsben"]
+github: [gethomepage]
+open_collective: homepage
+patreon: gethomepage
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index e9d4ee40..b799d3e4 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,99 +1,33 @@
-name: Bug report
-description: Create a report to help us improve
-title: "[Bug] Concise description of the issue"
-labels: ["bug, unconfirmed"]
+name: ๐ Bug report
+description: Please only raise an issue if you've been advised to do so in a GitHub discussion. Thanks! ๐
+labels: ["bug"]
body:
- type: markdown
attributes:
value: |
- ## โ ๏ธ Please remember: issues are for *bugs*
- That is, something you believe affects every single homepage user, not just you. Otherwise, start with one of the other options below.
- - type: markdown
- attributes:
- value: |
- Have a question? ๐ [Start a new discussion](https://github.com/gethomepage/homepage/discussions/new) or [ask in chat](https://discord.gg/SaPGSzrEZC).
-
- Before opening an issue, please double check:
-
- - [The troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/).
- - [The homepage documentation](https://gethomepage.dev/)
- - [Existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
- - type: textarea
- id: description
- attributes:
- label: Description
- description: A clear and concise description of what the bug is. If applicable, add screenshots to help explain your problem.
- placeholder: |
- Currently homepage does not work when...
-
- [Screenshot if applicable]
- validations:
- required: true
- - type: textarea
- id: reproduction
- attributes:
- label: Steps to reproduce
- description: Steps to reproduce the behavior.
- placeholder: |
- 1. Go to '...'
- 2. Click on '....'
- 3. See error
- validations:
- required: true
- - type: input
- id: version
- attributes:
- label: homepage version
- placeholder: e.g. v0.4.18 (4ea2798)
- validations:
- required: true
- - type: dropdown
- id: install-method
- attributes:
- label: Installation method
- options:
- - Docker
- - Unraid
- - Source
- - Other (please describe above)
- validations:
- required: true
- - type: textarea
- id: config
- attributes:
- label: Configuration
- description: Please provide any relevant service, widget or otherwise related configuration here
- render: yaml
- - type: textarea
- id: container-logs
- attributes:
- label: Container Logs
- description: Please review and provide any logs from the container, if relevant
- - type: textarea
- id: browser-logs
- attributes:
- label: Browser Logs
- description: Please review and provide any logs from the browser, if relevant
- - type: textarea
- id: troubleshooting
- attributes:
- label: Troubleshooting
- description: Please include output from your [troubleshooting tests](https://gethomepage.dev/latest/more/troubleshooting/#service-widget-errors). If this is a service widget issue and you do not include any information here your issue will be closed. If it is not, indicate e.g. 'n/a'
- validations:
- required: true
- - type: textarea
- id: other
- attributes:
- label: Other
- description: Include any other relevant details. E.g. service version or API version, docker version, etc.
+ ## โ ๏ธ Please note
+ The starting point for a bug report should always be a [GitHub discussion](https://github.com/gethomepage/homepage/discussions/new?category=support)
+ Thank you for contributing to homepage! โ
- type: checkboxes
id: pre-flight
attributes:
- label: Before submitting, I have made sure to
+ label: Before submitting, please confirm the following
options:
- - label: Check [the documentation](https://gethomepage.dev/)
+ - label: I confirm this was discussed, and the maintainers asked that I open an issue.
required: true
- - label: Follow [the troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/) (please include output above if applicable).
- required: true
- - label: Search [existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
+ - label: I am aware that if I create this issue without a discussion, it will be removed without a response.
required: true
+ - type: input
+ id: discussion
+ attributes:
+ label: Discussion Link
+ description: |
+ Please link to the GitHub discussion that led to this issue.
+ validations:
+ required: true
+ - type: textarea
+ id: additional
+ attributes:
+ label: Additional context
+ description: Optional
+ render: Text
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index e3f14d07..22d29ff5 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -2,7 +2,7 @@ blank_issues_enabled: false
contact_links:
- name: ๐ค Questions and Help
url: https://github.com/gethomepage/homepage/discussions
- about: This issue tracker is for bugs only, not general support questions. Please refer to our Discussions.
+ about: For support, possible bug reports or general questions.
- name: ๐ฌ Chat
url: https://discord.gg/k4ruYNrudu
about: Want to discuss homepage with others? Check out our chat.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 1cad352a..1d9e6243 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,12 +1,12 @@
## Proposed change
Closes # (issue)
@@ -26,6 +26,6 @@ What type of change does your PR introduce to Homepage?
## Checklist:
- [ ] If applicable, I have added corresponding documentation changes.
-- [ ] If applicable, I have reviewed the [feature](https://gethomepage.dev/latest/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/latest/more/development/#service-widget-guidelines).
-- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/latest/more/development/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/latest/more/development/#code-linting).
+- [ ] If applicable, I have reviewed the [feature](https://gethomepage.dev/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/more/development/#service-widget-guidelines).
+- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/more/development/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/more/development/#code-linting).
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index c36b6fe8..ba1b1fb0 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -5,7 +5,11 @@
version: 2
updates:
- - package-ecosystem: "github-actions" # Maintain dependencies for GitHub Actions
+ - package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
+ - package-ecosystem: "npm"
+ directory: "/"
+ schedule:
+ interval: "monthly"
diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml
index e7e473eb..f3c90cf3 100644
--- a/.github/workflows/crowdin.yml
+++ b/.github/workflows/crowdin.yml
@@ -8,7 +8,7 @@ on:
paths: [
'/public/locales/en/**',
]
- branches: [ main ]
+ branches: [ dev ]
jobs:
synchronize-with-crowdin:
@@ -19,12 +19,12 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: crowdin action
- uses: crowdin/github-action@v1
+ uses: crowdin/github-action@v2
with:
upload_translations: false
download_translations: true
- crowdin_branch_name: main
- localization_branch_name: l10n_main
+ crowdin_branch_name: dev
+ localization_branch_name: l10n_dev
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml
index 3bea5512..2ac8b3e8 100644
--- a/.github/workflows/docker-publish.yml
+++ b/.github/workflows/docker-publish.yml
@@ -12,21 +12,20 @@ on:
branches:
- main
- feature/**
+ - dev
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
pull_request:
- branches: [ "main" ]
+ branches: [ "dev" ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
merge_group:
env:
- # Use docker.io for Docker Hub if empty
- REGISTRY: ghcr.io
# github.repository as
-
+
+Homepage builds are kindly powered by DigitalOcean. +
+ # Features With features like quick search, bookmarks, weather support, a wide range of integrations and widgets, an elegant and modern design, and a focus on performance, Homepage is your ideal start to the day and a handy companion throughout it. @@ -41,37 +48,40 @@ With features like quick search, bookmarks, weather support, a wide range of int ## Docker Integration -Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker](https://gethomepage.dev/latest/installation/docker/) page for more information. +Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker Service Discovery](https://gethomepage.dev/configs/docker/#automatic-service-discovery) page for more information. ## Service Widgets -Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/latest/widgets/) page for more information. +Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/widgets/) page for more information. ## Information Widgets -Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/latest/widgets/) page for more information. +Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/widgets/) page for more information. ## Customization -Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the [Settings](https://gethomepage.dev/latest/configs/settings/) page for more information. +Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the [Settings](https://gethomepage.dev/configs/settings/) page for more information. # Getting Started For configuration options, examples and more, [please check out the homepage documentation](http://gethomepage.dev). +## Security Notice ๐ + +Please note that when using features such as widgets, Homepage can access personal information (for example from your home automation system) and Homepage currently does not (and is not planned to) include any authentication layer itself. Thus, we recommend homepage be deployed behind a reverse proxy including authentication, SSL etc, and / or behind a VPN. + ## With Docker Using docker compose: ```yaml -version: "3.3" services: homepage: image: ghcr.io/gethomepage/homepage:latest container_name: homepage environment: - PUID: 1000 -- optional, your user id - PGID: 1000 -- optional, your group id + PUID: 1000 # optional, your user id + PGID: 1000 # optional, your group id ports: - 3000:3000 volumes: @@ -93,7 +103,7 @@ docker run --name homepage \ ghcr.io/gethomepage/homepage:latest ``` -## With Node +## From Source First, clone the repository: @@ -116,15 +126,9 @@ Finally, run the server in production mode: pnpm start ``` -or development mode: - -```bash -pnpm dev -``` - # Configuration -Please refer to the [homepage documentation](https://gethomepage.dev/) website for more information. Everything you need to know about configuring Homepage is there. Please read everything carefully before asking for help, as most questions are answered there or are simple YAML configuration issues. +Please refer to the [homepage documentation website](https://gethomepage.dev/) for more information. Everything you need to know about configuring Homepage is there. Please read everything carefully before asking for help, as most questions are answered there or are simple YAML configuration issues. # Development @@ -164,7 +168,9 @@ mkdocs serve # or build, to build the static site If you have any questions, suggestions, or general issues, please start a discussion on the [Discussions](https://github.com/gethomepage/homepage/discussions) page. -For bug reports, please open an issue on the [Issues](https://github.com/gethomepage/homepage/issues) page. +## Troubleshooting + +In addition to the docs, the [troubleshooting guide](https://gethomepage.dev/troubleshooting/) can help reveal many basic config or network issues. If you're having a problem, it's a good place to start. ## Contributing & Contributors diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 00000000..d9efae21 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +gethomepage.dev diff --git a/docs/assets/banner_dark@2x.webp b/docs/assets/banner_dark@2x.webp new file mode 100644 index 00000000..651fd078 Binary files /dev/null and b/docs/assets/banner_dark@2x.webp differ diff --git a/docs/assets/banner_light@2x.webp b/docs/assets/banner_light@2x.webp new file mode 100644 index 00000000..00b258eb Binary files /dev/null and b/docs/assets/banner_light@2x.webp differ diff --git a/docs/assets/blossom_valley.jpg b/docs/assets/blossom_valley.jpg new file mode 100644 index 00000000..39445902 Binary files /dev/null and b/docs/assets/blossom_valley.jpg differ diff --git a/docs/assets/blossom_valley_blur.jpg b/docs/assets/blossom_valley_blur.jpg new file mode 100644 index 00000000..54bb9bae Binary files /dev/null and b/docs/assets/blossom_valley_blur.jpg differ diff --git a/docs/assets/homepage_demo.webp b/docs/assets/homepage_demo.webp new file mode 100644 index 00000000..e6c47041 Binary files /dev/null and b/docs/assets/homepage_demo.webp differ diff --git a/docs/assets/homepage_demo_clip.png b/docs/assets/homepage_demo_clip.png new file mode 100644 index 00000000..8ac16f35 Binary files /dev/null and b/docs/assets/homepage_demo_clip.png differ diff --git a/docs/assets/homepage_demo_clip.webp b/docs/assets/homepage_demo_clip.webp new file mode 100644 index 00000000..169998e9 Binary files /dev/null and b/docs/assets/homepage_demo_clip.webp differ diff --git a/docs/assets/light_squircle@2x.webp b/docs/assets/light_squircle@2x.webp new file mode 100644 index 00000000..fc1a1613 Binary files /dev/null and b/docs/assets/light_squircle@2x.webp differ diff --git a/docs/assets/sections.png b/docs/assets/sections.png new file mode 100644 index 00000000..d1d68d5a Binary files /dev/null and b/docs/assets/sections.png differ diff --git a/docs/assets/sections.webp b/docs/assets/sections.webp new file mode 100644 index 00000000..2e8f3e35 Binary files /dev/null and b/docs/assets/sections.webp differ diff --git a/docs/assets/widget_stocks_demo.png b/docs/assets/widget_stocks_demo.png new file mode 100644 index 00000000..0d2cde53 Binary files /dev/null and b/docs/assets/widget_stocks_demo.png differ diff --git a/docs/configs/bookmarks.md b/docs/configs/bookmarks.md index 27f6c273..897975e2 100644 --- a/docs/configs/bookmarks.md +++ b/docs/configs/bookmarks.md @@ -3,7 +3,7 @@ title: Bookmarks description: Bookmark Configuration --- -Bookmarks function much the same as [Services](services.md), in how groups and lists work. They're just much simpler, smaller, and contain no extra features other than being a link out. +Bookmarks are configured in the `bookmarks.yaml` file. They function much the same as [Services](services.md), in how groups and lists work. They're just much simpler, smaller, and contain no extra features other than being a link out. The design of homepage expects `abbr` to be 2 letters, but is not otherwise forced. @@ -12,6 +12,7 @@ You can also use an icon for bookmarks similar to the [options for service icons By default, the description will use the hostname of the link, but you can override it with a custom description. ```yaml +--- - Developer: - Github: - abbr: GH @@ -29,4 +30,8 @@ By default, the description will use the hostname of the link, but you can overr href: https://youtube.com/ ``` +which renders to (depending on your theme, etc.): +
+
+The default [bookmarks.yaml](https://github.com/gethomepage/homepage/blob/main/src/skeleton/bookmarks.yaml) is a working example.
diff --git a/docs/configs/docker.md b/docs/configs/docker.md
index 4d3026db..51f6b523 100644
--- a/docs/configs/docker.md
+++ b/docs/configs/docker.md
@@ -203,7 +203,7 @@ In order to detect every service within the Docker swarm it is necessary that se
## Multiple Homepage Instances
-The optional field `instanceName` can be configured in [settings.md](settings.md#instance-name) to differentiate between multiple homepage instances.
+The optional field `instanceName` can be configured in [settings.yaml](settings.md#instance-name) to differentiate between multiple homepage instances.
To limit a label to an instance, insert `.instance.{{instanceName}}` after the `homepage` prefix.
@@ -235,4 +235,4 @@ You can show the docker stats by clicking the status indicator but this can also
showStats: true
```
-Also see the settings for [show docker stats](docker.md#show-docker-stats).
+Also see the settings for [show docker stats](settings.md#show-docker-stats).
diff --git a/docs/configs/index.md b/docs/configs/index.md
index a43977f6..85a1ac90 100644
--- a/docs/configs/index.md
+++ b/docs/configs/index.md
@@ -1,6 +1,7 @@
---
title: Configuration
description: Homepage Configuration
+icon: material/cog
---
Homepage uses YAML for configuration, YAML stands for "YAML Ain't Markup Language.". It's a human-readable data serialization format that's a superset of JSON. Great for config files, easy to read and write. Supports complex data types like lists and objects. **Indentation matters.** If you already use Docker Compose, you already use YAML.
diff --git a/docs/configs/kubernetes.md b/docs/configs/kubernetes.md
index 6ba995c4..29ab6b38 100644
--- a/docs/configs/kubernetes.md
+++ b/docs/configs/kubernetes.md
@@ -36,7 +36,7 @@ Inside of the service you'd like to connect to a pod:
The `app` field is used to create a label selector, in this example case it would match pods with the label: `app.kubernetes.io/name=emby`.
-Sometimes this is insufficient for complex or atypical application deployments. In these cases, the `pod-selector` field can be used. Any field selector can be used with it, so it allows for some very powerful selection capabilities.
+Sometimes this is insufficient for complex or atypical application deployments. In these cases, the `podSelector` field can be used. Any field selector can be used with it, so it allows for some very powerful selection capabilities.
For instance, it can be utilized to roll multiple underlying deployments under one application to see a high-level aggregate:
@@ -47,7 +47,7 @@ For instance, it can be utilized to roll multiple underlying deployments under o
description: Matrix Synapse Powered Chat
app: matrix-element
namespace: comms
- pod-selector: >-
+ podSelector: >-
app.kubernetes.io/instance in (
matrix-element,
matrix-media-repo,
@@ -58,7 +58,7 @@ For instance, it can be utilized to roll multiple underlying deployments under o
!!! note
- A blank string as a pod-selector does not deactivate it, but will actually select all pods in the namespace. This is a useful way to capture the resource usage of a complex application siloed to a single namespace, like Longhorn.
+ A blank string as a podSelector does not deactivate it, but will actually select all pods in the namespace. This is a useful way to capture the resource usage of a complex application siloed to a single namespace, like Longhorn.
## Automatic Service Discovery
@@ -98,6 +98,10 @@ When the Kubernetes cluster connection has been properly configured, this servic
If you are using multiple instances of homepage, an `instance` annotation can be specified to limit services to a specific instance. If no instance is provided, the service will be visible on all instances.
+If you have a single service that needs to be shown on multiple specific instances of homepage (but not on all of them), the service can be annotated by multiple `instance.name` annotations, where `name` can be the names of your specific multiple homepage instances. For example, a service that is annotated with `gethomepage.dev/instance.public: ""` and `gethomepage.dev/instance.internal: ""` will be shown on `public` and `internal` homepage instances.
+
+Use the `gethomepage.dev/pod-selector` selector to specify the pod used for the health check. For example, a service that is annotated with `gethomepage.dev/pod-selector: app.kubernetes.io/name=deployment` would link to a pod with the label `app.kubernetes.io/name: deployment`.
+
### Traefik IngressRoute support
Homepage can also read ingresses defined using the Traefik IngressRoute custom resource definition. Due to the complex nature of Traefik routing rules, it is required for the `gethomepage.dev/href` annotation to be set:
diff --git a/docs/configs/services.md b/docs/configs/services.md
index 010950eb..9cb75177 100644
--- a/docs/configs/services.md
+++ b/docs/configs/services.md
@@ -65,9 +65,13 @@ Services may have descriptions,
Services may have an icon attached to them, you can use icons from [Dashboard Icons](https://github.com/walkxcode/dashboard-icons) automatically, by passing the name of the icon, with, or without `.png` or with `.svg` to use the svg version.
-You can also specify prefixed icons from [Material Design Icons](https://materialdesignicons.com) with `mdi-XX` or [Simple Icons](https://simpleicons.org/) with `si-XX`.
+You can also specify prefixed icons from:
-You can specify a custom color by adding a hex color code as suffix e.g. `mdi-XX-#f0d453` or `si-XX-#a712a2`.
+- [Material Design Icons](https://pictogrammers.com/library/mdi/) with `mdi-XX`
+- [Simple Icons](https://simpleicons.org/) with `si-XX`
+- [selfh.st/icons](https://selfh.st/icons/) with `sh-XX` to use the png version or `sh-XX.svg/png/webp` for a specific version
+
+You can specify a custom color for `mdi` and `si` icons by adding a hex color code as a suffix e.g. `mdi-XX-#f0d453` or `si-XX-#a712a2`.
To use a remote icon, use the absolute URL (e.g. `https://...`).
@@ -101,7 +105,7 @@ To use a local icon, first create a Docker mount to `/app/public/icons` and then
## Ping
-Services may have an optional `ping` property that allows you to monitor the availability of an external host. As of v0.8.0, the ping feature attempts to use a true (ICMP) ping command on the underlying host.
+Services may have an optional `ping` property that allows you to monitor the availability of an external host. As of v0.8.0, the ping feature attempts to use a true (ICMP) ping command on the underlying host. Currently, only IPv4 is supported.
```yaml
- Group A:
@@ -171,7 +175,7 @@ Services may be connected to a Docker container, either running on the local mac
!!! note
- This can also be controlled with `showStats`. See [show docker stats](docker.md#show-docker-stats) for more information
+ This can also be controlled with `showStats`. See [show docker stats](docker.md#show-stats) for more information
- - +
-
+
+
+A modern, fully static, fast, secure fully proxied, highly customizable application dashboard with integrations for over 100 services and translations into multiple languages. Easily configured via YAML files or through docker label discovery.
+ +You have a few options for deploying homepage, depending on your needs. We offer docker images for a majority of platforms. You can also install and run homepage from source if Docker is not your thing. It can even be installed on Kubernetes with Helm.
+!!! warning + + Please note that when using features such as widgets, Homepage can access personal information (for example from your home automation system) and Homepage currently does not (and is not planned to) include any authentication layer itself. Thus, we recommend homepage be deployed behind a reverse proxy including authentication, SSL etc, and / or behind a VPN. ++ DigitalOcean provides the GitHub Actions runner for the project. Dramatically speeding up the CI/CD process. +
+
diff --git a/docs/widgets/info/weather.md b/docs/widgets/info/weather.md
index 6357f0c0..ab13b673 100644
--- a/docs/widgets/info/weather.md
+++ b/docs/widgets/info/weather.md
@@ -15,6 +15,8 @@ The free tier is all that's required, you will need to [register](https://www.we
units: metric # or imperial
apiKey: yourweatherapikey
cache: 5 # Time in minutes to cache API responses, to stay within limits
+ format: # optional, Intl.NumberFormat options
+ maximumFractionDigits: 1
```
You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS).
diff --git a/docs/widgets/services/adguard-home.md b/docs/widgets/services/adguard-home.md
index af922f77..a56d0dd9 100644
--- a/docs/widgets/services/adguard-home.md
+++ b/docs/widgets/services/adguard-home.md
@@ -3,6 +3,8 @@ title: Adguard Home
description: Adguard Home Widget Configuration
---
+Learn more about [Adguard Home](https://github.com/AdguardTeam/AdGuardHome).
+
The username and password are the same as used to login to the web interface.
Allowed fields: `["queries", "blocked", "filtered", "latency"]`.
diff --git a/docs/widgets/services/argocd.md b/docs/widgets/services/argocd.md
new file mode 100644
index 00000000..6a81b8db
--- /dev/null
+++ b/docs/widgets/services/argocd.md
@@ -0,0 +1,33 @@
+---
+title: ArgoCD
+description: ArgoCD Widget Configuration
+---
+
+Learn more about [ArgoCD](https://argo-cd.readthedocs.io/en/stable/).
+
+Allowed fields (limited to a max of 4): `["apps", "synced", "outOfSync", "healthy", "progressing", "degraded", "suspended", "missing"]`
+
+```yaml
+widget:
+ type: argocd
+ url: http://argocd.host.or.ip:port
+ key: argocdapikey
+```
+
+You can generate an API key either by creating a bearer token for an existing account, see [Authorization](https://argo-cd.readthedocs.io/en/latest/developer-guide/api-docs/#authorization) (not recommended) or create a new local user account with limited privileges and generate an authentication token for this account. To do this the steps are:
+
+- [Create a new local user](https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/#create-new-user) and give it the `apiKey` capability
+- Setup [RBAC configuration](https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/#rbac-configuration) for your the user and give it readonly access to your ArgoCD resources, e.g. by giving it the `role:readonly` role.
+- In your ArgoCD project under _Settings / Accounts_ open the newly created account and in the _Tokens_ section click on _Generate New_ to generate an access token, optionally specifying an expiry date.
+
+If you installed ArgoCD via the official Helm chart, the account creation and rbac config can be achived by overriding these helm values:
+
+```yaml
+configs:
+ cm:
+ accounts.readonly: apiKey
+ rbac:
+ policy.csv: "g, readonly, role:readonly"
+```
+
+This creates a new account called `readonly` and attaches the `role:readonly` role to it.
diff --git a/docs/widgets/services/atsumeru.md b/docs/widgets/services/atsumeru.md
index 77432216..ab110c63 100644
--- a/docs/widgets/services/atsumeru.md
+++ b/docs/widgets/services/atsumeru.md
@@ -3,6 +3,8 @@ title: Atsumeru
description: Atsumeru Widget Configuration
---
+Learn more about [Atsumeru](https://github.com/AtsumeruDev/Atsumeru).
+
Define same username and password that is used for login from web or supported apps
Allowed fields: `["series", "archives", "chapters", "categories"]`.
diff --git a/docs/widgets/services/audiobookshelf.md b/docs/widgets/services/audiobookshelf.md
index 10beec24..96a4efce 100644
--- a/docs/widgets/services/audiobookshelf.md
+++ b/docs/widgets/services/audiobookshelf.md
@@ -3,6 +3,8 @@ title: Audiobookshelf
description: Audiobookshelf Widget Configuration
---
+Learn more about [Audiobookshelf](https://github.com/advplyr/audiobookshelf).
+
You can find your API token by logging into the Audiobookshelf web app as an admin, go to the config โ users page, and click on your account.
Allowed fields: `["podcasts", "podcastsDuration", "books", "booksDuration"]`
diff --git a/docs/widgets/services/authentik.md b/docs/widgets/services/authentik.md
index b3f8cdd6..f4dafd40 100644
--- a/docs/widgets/services/authentik.md
+++ b/docs/widgets/services/authentik.md
@@ -3,22 +3,23 @@ title: Authentik
description: Authentik Widget Configuration
---
+Learn more about [Authentik](https://github.com/goauthentik/authentik).
+
This widget reads the number of active users in the system, as well as logins for the last 24 hours.
-You will need to generate an API token for an existing user. To do so follow these steps:
+You will need to generate an API token for an existing user under `Admin Portal` > `Directory` > `Tokens & App passwords`.
+Make sure to set Intent to "API Token".
-1. Navigate to the Authentik Admin Portal
-2. Expand Directory, the click Tokens & App passwords
-3. Click the Create button
-4. Fill out the dialog making sure to set Intent to API Token
-5. Click the Create button on the dialog
-6. Click the copy button on the far right of the newly created API Token
+The account you made the API token for also needs the following **Assigned global permissions** in Authentik:
+
+- authentik Core -> Can view User (Model: User)
+- authentik Events -> Can view Event (Model: Event)
Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`.
```yaml
widget:
type: authentik
- url: http://authentik.host.or.ip:22070
+ url: http://authentik.host.or.ip:port
key: api_token
```
diff --git a/docs/widgets/services/autobrr.md b/docs/widgets/services/autobrr.md
index d41d7c32..4828f385 100644
--- a/docs/widgets/services/autobrr.md
+++ b/docs/widgets/services/autobrr.md
@@ -3,6 +3,8 @@ title: Autobrr
description: Autobrr Widget Configuration
---
+Learn more about [Autobrr](https://github.com/autobrr/autobrr).
+
Find your API key under `Settings > API Keys`.
Allowed fields: `["approvedPushes", "rejectedPushes", "filters", "indexers"]`.
diff --git a/docs/widgets/services/azuredevops.md b/docs/widgets/services/azuredevops.md
index 86ad7418..78846115 100644
--- a/docs/widgets/services/azuredevops.md
+++ b/docs/widgets/services/azuredevops.md
@@ -3,12 +3,14 @@ title: Azure DevOps
description: Azure DevOps Widget Configuration
---
+Learn more about [Azure DevOps](https://azure.microsoft.com/en-us/products/devops).
+
This widget has 2 functions:
-1. Pipelines: checks if the relevant pipeline is running or not, and if not, reports the last status.\
+1. Pipelines: checks if the relevant pipeline is running or not, and if not, reports the last status.
_(Find the Glances information widget [here](../info/glances.md))_
@@ -15,7 +17,11 @@ widget:
url: http://glances.host.or.ip:port
username: user # optional if auth enabled in Glances
password: pass # optional if auth enabled in Glances
+ version: 4 # required only if running glances v4 or higher, defaults to 3
metric: cpu
+ diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk
+ refreshInterval: 5000 # optional - in milliseconds, defaults to 1000 or more, depending on the metric
+ pointsLimit: 15 # optional, defaults to 15
```
_Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achieve the same effect as the examples above, see as an example:_
diff --git a/docs/widgets/services/gluetun.md b/docs/widgets/services/gluetun.md
index 362be0c3..44775b15 100644
--- a/docs/widgets/services/gluetun.md
+++ b/docs/widgets/services/gluetun.md
@@ -3,14 +3,19 @@ title: Gluetun
description: Gluetun Widget Configuration
---
+Learn more about [Gluetun](https://github.com/qdm12/gluetun).
+
!!! note
Requires [HTTP control server options](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md) to be enabled. By default this runs on port `8000`.
Allowed fields: `["public_ip", "region", "country"]`.
+To setup authentication, follow [the official Gluetun documentation](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md#authentication).
+
```yaml
widget:
type: gluetun
url: http://gluetun.host.or.ip:port
+ key: gluetunkey # Not required if /v1/publicip/ip endpoint is configured with `auth = none`
```
diff --git a/docs/widgets/services/gotify.md b/docs/widgets/services/gotify.md
index 871eefaa..785b55a4 100644
--- a/docs/widgets/services/gotify.md
+++ b/docs/widgets/services/gotify.md
@@ -3,6 +3,8 @@ title: Gotify
description: Gotify Widget Configuration
---
+Learn more about [Gotify](https://github.com/gotify/server).
+
Get a Gotify client token from an existing client or create a new one on your Gotify admin page.
Allowed fields: `["apps", "clients", "messages"]`.
diff --git a/docs/widgets/services/grafana.md b/docs/widgets/services/grafana.md
index bfdebb2c..272cc3ba 100644
--- a/docs/widgets/services/grafana.md
+++ b/docs/widgets/services/grafana.md
@@ -3,6 +3,8 @@ title: Grafana
description: Grafana Widget Configuration
---
+Learn more about [Grafana](https://github.com/grafana/grafana).
+
Allowed fields: `["dashboards", "datasources", "totalalerts", "alertstriggered"]`.
```yaml
diff --git a/docs/widgets/services/hdhomerun.md b/docs/widgets/services/hdhomerun.md
index c862200e..261ab046 100644
--- a/docs/widgets/services/hdhomerun.md
+++ b/docs/widgets/services/hdhomerun.md
@@ -3,10 +3,16 @@ title: HDHomerun
description: HDHomerun Widget Configuration
---
-Allowed fields: `["channels", "hd"]`.
+Learn more about [HDHomerun](https://www.silicondust.com/support/downloads/).
+
+Allowed fields: `["channels", "hd", "tunerCount", "channelNumber", "channelNetwork", "signalStrength", "signalQuality", "symbolQuality", "networkRate", "clientIP" ]`.
+
+If more than 4 fields are provided, only the first 4 are displayed.
```yaml
widget:
type: hdhomerun
url: http://hdhomerun.host.or.ip
+ tuner: 0 # optional - defaults to 0, used for tuner-specific fields
+ fields: ["channels", "hd"] # optional - default fields shown
```
diff --git a/docs/widgets/services/headscale.md b/docs/widgets/services/headscale.md
new file mode 100644
index 00000000..c6da54f5
--- /dev/null
+++ b/docs/widgets/services/headscale.md
@@ -0,0 +1,19 @@
+---
+title: Headscale
+description: Headscale Widget Configuration
+---
+
+Learn more about [Headscale](https://headscale.net/).
+
+You will need to generate an API access token from the [command line](https://headscale.net/ref/remote-cli/#create-an-api-key) using `headscale apikeys create` command.
+
+To find your node ID, you can use `headscale nodes list` command.
+
+Allowed fields: `["name", "address", "last_seen", "status"]`.
+
+```yaml
+widget:
+ type: headscale
+ nodeId: nodeid
+ key: headscaleapiaccesstoken
+```
diff --git a/docs/widgets/services/healthchecks.md b/docs/widgets/services/healthchecks.md
index b438e153..136d9fe6 100644
--- a/docs/widgets/services/healthchecks.md
+++ b/docs/widgets/services/healthchecks.md
@@ -3,6 +3,8 @@ title: Health checks
description: Health checks Widget Configuration
---
+Learn more about [Health Checks](https://github.com/healthchecks/healthchecks).
+
Specify a single check by including the `uuid` field or show the total 'up' and 'down' for all
checks by leaving off the `uuid` field.
diff --git a/docs/widgets/services/homeassistant.md b/docs/widgets/services/homeassistant.md
index 8d8b04e9..fc98ed88 100644
--- a/docs/widgets/services/homeassistant.md
+++ b/docs/widgets/services/homeassistant.md
@@ -3,6 +3,8 @@ title: Home Assistant
description: Home Assistant Widget Configuration
---
+Learn more about [Home Assistant](https://www.home-assistant.io/).
+
You will need to generate a long-lived access token for an existing Home Assistant user in its profile.
Allowed fields: `["people_home", "lights_on", "switches_on"]`.
@@ -16,7 +18,7 @@ The `custom` property will have no effect as long as the `fields` property is de
- state labels and values can be user defined and may reference entity attributes in curly brackets
- if no state label is defined it will default to `"{attributes.friendly_name}"`
- if no state value is defined it will default to `"{state} {attributes.unit_of_measurement}"`
-- `template` will query the specified template, see (Home Assistant Templating)[https://www.home-assistant.io/docs/configuration/templating]
+- `template` will query the specified template, see [Home Assistant Templating](https://www.home-assistant.io/docs/configuration/templating)
- if no template label is defined it will be empty
```yaml
diff --git a/docs/widgets/services/homebox.md b/docs/widgets/services/homebox.md
new file mode 100644
index 00000000..af9ebad5
--- /dev/null
+++ b/docs/widgets/services/homebox.md
@@ -0,0 +1,23 @@
+---
+title: Homebox
+description: Homebox Widget Configuration
+---
+
+Learn more about [Homebox](https://github.com/hay-kot/homebox).
+
+Uses the same username and password used to login from the web.
+
+The `totalValue` field will attempt to format using the currency you have configured in Homebox.
+
+Allowed fields: `["items", "totalWithWarranty", "locations", "labels", "users", "totalValue"]`.
+
+If more than 4 fields are provided, only the first 4 are displayed.
+
+```yaml
+widget:
+ type: homebox
+ url: http://homebox.host.or.ip:port
+ username: username
+ password: password
+ fields: ["items", "locations", "totalValue"] # optional - default fields shown
+```
diff --git a/docs/widgets/services/homebridge.md b/docs/widgets/services/homebridge.md
index d71ca93b..1fb64132 100644
--- a/docs/widgets/services/homebridge.md
+++ b/docs/widgets/services/homebridge.md
@@ -3,6 +3,8 @@ title: Homebridge
description: Homebridge
---
+Learn more about [Homebridge](https://github.com/homebridge/homebridge).
+
The Homebridge API is actually provided by the Config UI X plugin that has been included with Homebridge for a while, still it is required to be installed for this widget to work.
Allowed fields: `["updates", "child_bridges"]`.
diff --git a/docs/widgets/services/immich.md b/docs/widgets/services/immich.md
index b6d286c4..4da6e187 100644
--- a/docs/widgets/services/immich.md
+++ b/docs/widgets/services/immich.md
@@ -3,6 +3,13 @@ title: Immich
description: Immich Widget Configuration
---
+Learn more about [Immich](https://github.com/immich-app/immich).
+
+| Immich Version | Homepage Widget Version |
+| -------------- | ----------------------- |
+| < v1.118 | 1 (default) |
+| >= v1.118 | 2 |
+
Find your API key under `Account Settings > API Keys`.
Allowed fields: `["users" ,"photos", "videos", "storage"]`.
@@ -14,4 +21,5 @@ widget:
type: immich
url: http://immich.host.or.ip
key: adminapikeyadminapikeyadminapikey
+ version: 2 # optional, default is 1
```
diff --git a/docs/widgets/services/index.md b/docs/widgets/services/index.md
index b8a41d76..894a31f6 100644
--- a/docs/widgets/services/index.md
+++ b/docs/widgets/services/index.md
@@ -1,4 +1,141 @@
---
title: Service Widgets
description: Homepage service widgets.
+search:
+ exclude: true
---
+
+You can also find a list of all available service widgets in the sidebar navigation.
+
+- [Adguard Home](adguard-home.md)
+- [ArgoCD](argocd.md)
+- [Atsumeru](atsumeru.md)
+- [Audiobookshelf](audiobookshelf.md)
+- [Authentik](authentik.md)
+- [Autobrr](autobrr.md)
+- [Azure DevOps](azuredevops.md)
+- [Bazarr](bazarr.md)
+- [Beszel](beszel.md)
+- [Caddy](caddy.md)
+- [Calendar](calendar.md)
+- [Calibre-Web](calibre-web.md)
+- [ChangeDetection.io](changedetectionio.md)
+- [Channels DVR Server](channelsdvrserver.md)
+- [Cloudflared](cloudflared.md)
+- [Coin Market Cap](coin-market-cap.md)
+- [CrowdSec](crowdsec.md)
+- [Custom API](customapi.md)
+- [Deluge](deluge.md)
+- [DeveLanCacheUI](develancacheui.md)
+- [DiskStation](diskstation.md)
+- [DownloadStation](downloadstation.md)
+- [Emby](emby.md)
+- [ESPHome](esphome.md)
+- [EVCC](evcc.md)
+- [Fileflows](fileflows.md)
+- [Flood](flood.md)
+- [FreshRSS](freshrss.md)
+- [Frigate](frigate.md)
+- [Fritz!Box](fritzbox.md)
+- [GameDig](gamedig.md)
+- [Gatus](gatus.md)
+- [Ghostfolio](ghostfolio.md)
+- [Gitea](gitea.md)
+- [Gitlab](gitlab.md)
+- [Glances](glances.md)
+- [Gluetun](gluetun.md)
+- [Gotify](gotify.md)
+- [Grafana](grafana.md)
+- [HDHomeRun](hdhomerun.md)
+- [Headscale](headscale.md)
+- [Healthchecks](healthchecks.md)
+- [Home Assistant](homeassistant.md)
+- [HomeBox](homebox.md)
+- [Homebridge](homebridge.md)
+- [iFrame](iframe.md)
+- [Immich](immich.md)
+- [Jackett](jackett.md)
+- [JDownloader](jdownloader.md)
+- [Jellyfin](jellyfin.md)
+- [Jellyseerr](jellyseerr.md)
+- [Kavita](kavita.md)
+- [Komga](komga.md)
+- [Kopia](kopia.md)
+- [Lidarr](lidarr.md)
+- [Linkwarden](linkwarden.md)
+- [Lubelogger](lubelogger.md)
+- [Mastodon](mastodon.md)
+- [Mailcow](mailcow.md)
+- [Mealie](mealie.md)
+- [Medusa](medusa.md)
+- [Mikrotik](mikrotik.md)
+- [Minecraft](minecraft.md)
+- [Miniflux](miniflux.md)
+- [MJpeg](mjpeg.md)
+- [Moonraker](moonraker.md)
+- [Mylar](mylar.md)
+- [MySpeed](myspeed.md)
+- [Navidrome](navidrome.md)
+- [NetAlertX](netalertx.md)
+- [Netdata](netdata.md)
+- [Nextcloud](nextcloud.md)
+- [NextDNS](nextdns.md)
+- [NGINX Proxy Manager](nginx-proxy-manager.md)
+- [NZBGet](nzbget.md)
+- [OctoPrint](octoprint.md)
+- [Omada](omada.md)
+- [Ombi](ombi.md)
+- [OpenDTU](opendtu.md)
+- [OpenMediaVault](openmediavault.md)
+- [OpenWRT](openwrt.md)
+- [OPNsense](opnsense.md)
+- [Overseerr](overseerr.md)
+- [PaperlessNGX](paperlessngx.md)
+- [Peanut](peanut.md)
+- [pfSense](pfsense.md)
+- [PhotoPrism](photoprism.md)
+- [Pi-hole](pihole.md)
+- [PlantIt](plantit.md)
+- [Plex & Tautulli](plex-tautulli.md)
+- [Plex](plex.md)
+- [Portainer](portainer.md)
+- [Prometheus](prometheus.md)
+- [Prometheus Metric](prometheusmetric.md)
+- [Prowlarr](prowlarr.md)
+- [Proxmox](proxmox.md)
+- [Proxmox Backup Server](proxmoxbackupserver.md)
+- [Pterodactyl](pterodactyl.md)
+- [PyLoad](pyload.md)
+- [qBittorrent](qbittorrent.md)
+- [QNAP](qnap.md)
+- [Radarr](radarr.md)
+- [Readarr](readarr.md)
+- [ROMM](romm.md)
+- [ruTorrent](rutorrent.md)
+- [SABnzbd](sabnzbd.md)
+- [Scrutiny](scrutiny.md)
+- [Sonarr](sonarr.md)
+- [Speedtest Tracker](speedtest-tracker.md)
+- [Stash](stash.md)
+- [Stocks](stocks.md)
+- [SwagDashboard](swagdashboard.md)
+- [Syncthing Relay Server](syncthing-relay-server.md)
+- [Tailscale](tailscale.md)
+- [Tandoor](tandoor.md)
+- [Technitium DNS](technitium.md)
+- [TDarr](tdarr.md)
+- [Traefik](traefik.md)
+- [Transmission](transmission.md)
+- [TrueNAS](truenas.md)
+- [TubeArchivist](tubearchivist.md)
+- [UniFi Controller](unifi-controller.md)
+- [Unmanic](unmanic.md)
+- [Uptime Kuma](uptime-kuma.md)
+- [UptimeRobot](uptimerobot.md)
+- [UrBackup](urbackup.md)
+- [Vikunja](vikunja.md)
+- [Watchtower](watchtower.md)
+- [WGEasy](wgeasy.md)
+- [WhatsUpDocker](whatsupdocker.md)
+- [xTeVe](xteve.md)
+- [Zabbix](zabbix.md)
diff --git a/docs/widgets/services/jackett.md b/docs/widgets/services/jackett.md
index 91c58b28..e102743b 100644
--- a/docs/widgets/services/jackett.md
+++ b/docs/widgets/services/jackett.md
@@ -3,7 +3,9 @@ title: Jackett
description: Jackett Widget Configuration
---
-Jackett must not have any authentication for the widget to work.
+Learn more about [Jackett](https://github.com/Jackett/Jackett).
+
+If Jackett has an admin password set, you must set the `password` field for the widget to work.
Allowed fields: `["configured", "errored"]`.
@@ -11,4 +13,5 @@ Allowed fields: `["configured", "errored"]`.
widget:
type: jackett
url: http://jackett.host.or.ip
+ password: jackettadminpassword # optional
```
diff --git a/docs/widgets/services/jdownloader.md b/docs/widgets/services/jdownloader.md
index 31469fb9..0b193fc3 100644
--- a/docs/widgets/services/jdownloader.md
+++ b/docs/widgets/services/jdownloader.md
@@ -3,6 +3,8 @@ title: JDownloader
description: NextPVR Widget Configuration
---
+Learn more about [JDownloader](https://jdownloader.org/).
+
Basic widget to show number of items in download queue, along with the queue size and current download speed.
Allowed fields: `["downloadCount", "downloadTotalBytes","downloadBytesRemaining", "downloadSpeed"]`.
diff --git a/docs/widgets/services/jellyfin.md b/docs/widgets/services/jellyfin.md
index cc961789..b6724a15 100644
--- a/docs/widgets/services/jellyfin.md
+++ b/docs/widgets/services/jellyfin.md
@@ -3,6 +3,8 @@ title: Jellyfin
description: Jellyfin Widget Configuration
---
+Learn more about [Jellyfin](https://github.com/jellyfin/jellyfin).
+
You can create an API key from inside Jellyfin at `Settings > Advanced > Api Keys`.
As of v0.6.11 the widget supports fields `["movies", "series", "episodes", "songs"]`. These blocks are disabled by default but can be enabled with the `enableBlocks` option, and the "Now Playing" feature (enabled by default) can be disabled with the `enableNowPlaying` option.
@@ -14,4 +16,7 @@ widget:
key: apikeyapikeyapikeyapikeyapikey
enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true
+ enableUser: true # optional, defaults to false
+ showEpisodeNumber: true # optional, defaults to false
+ expandOneStreamToTwoRows: false # optional, defaults to true
```
diff --git a/docs/widgets/services/jellyseerr.md b/docs/widgets/services/jellyseerr.md
index f6e071d8..ad33ca52 100644
--- a/docs/widgets/services/jellyseerr.md
+++ b/docs/widgets/services/jellyseerr.md
@@ -3,6 +3,8 @@ title: Jellyseerr
description: Jellyseerr Widget Configuration
---
+Learn more about [Jellyseerr](https://github.com/Fallenbagel/jellyseerr).
+
Find your API key under `Settings > General > API Key`.
Allowed fields: `["pending", "approved", "available"]`.
diff --git a/docs/widgets/services/kavita.md b/docs/widgets/services/kavita.md
index 59bc91d4..12d40164 100644
--- a/docs/widgets/services/kavita.md
+++ b/docs/widgets/services/kavita.md
@@ -3,7 +3,9 @@ title: Kavita
description: Kavita Widget Configuration
---
-Uses the same username and password used to login from the web.
+Learn more about [Kavita](https://github.com/Kareadita/Kavita).
+
+Uses the same admin role username and password used to login from the web.
Allowed fields: `["seriesCount", "totalFiles"]`.
diff --git a/docs/widgets/services/komga.md b/docs/widgets/services/komga.md
index a05f67d9..c9edaeb2 100644
--- a/docs/widgets/services/komga.md
+++ b/docs/widgets/services/komga.md
@@ -3,6 +3,8 @@ title: Komga
description: Komga Widget Configuration
---
+Learn more about [Komga](https://github.com/gotson/komga).
+
Uses the same username and password used to login from the web.
Allowed fields: `["libraries", "series", "books"]`.
diff --git a/docs/widgets/services/kopia.md b/docs/widgets/services/kopia.md
index 00f1ff70..bb324b26 100644
--- a/docs/widgets/services/kopia.md
+++ b/docs/widgets/services/kopia.md
@@ -3,6 +3,8 @@ title: Kopia
description: Kopia Widget Configuration
---
+Learn more about [Kopia](https://github.com/kopia/kopia).
+
Allowed fields: `["status", "size", "lastrun", "nextrun"]`.
You may optionally pass values for `snapshotHost` and / or `snapshotPath` to select a specific backup source for the widget.
diff --git a/docs/widgets/services/lidarr.md b/docs/widgets/services/lidarr.md
index b6c1e34b..3a84152a 100644
--- a/docs/widgets/services/lidarr.md
+++ b/docs/widgets/services/lidarr.md
@@ -3,6 +3,8 @@ title: Lidarr
description: Lidarr Widget Configuration
---
+Learn more about [Lidarr](https://github.com/Lidarr/Lidarr).
+
Find your API key under `Settings > General`.
Allowed fields: `["wanted", "queued", "artists"]`.
diff --git a/docs/widgets/services/linkwarden.md b/docs/widgets/services/linkwarden.md
new file mode 100644
index 00000000..bef196a9
--- /dev/null
+++ b/docs/widgets/services/linkwarden.md
@@ -0,0 +1,15 @@
+---
+title: Linkwarden
+description: Linkwarden Widget Configuration
+---
+
+Learn more about [Linkwarden](https://linkwarden.app/).
+
+Allowed fields: `["links", "collections", "tags"]`.
+
+```yaml
+widget:
+ type: linkwarden
+ url: http://linkwarden.host.or.ip
+ key: myApiKeyHere # On your Linkwarden install, go to Settings > Access Tokens. Generate a token.
+```
diff --git a/docs/widgets/services/lubelogger.md b/docs/widgets/services/lubelogger.md
new file mode 100644
index 00000000..cf2b6439
--- /dev/null
+++ b/docs/widgets/services/lubelogger.md
@@ -0,0 +1,20 @@
+---
+title: LubeLogger
+description: LubeLogger Widget Configuration
+---
+
+Learn more about [LubeLogger](https://github.com/hargata/lubelog) (v1.3.7 or higher is required).
+
+The widget comes in two 'flavors', one shows data for all vehicles or for just a specific vehicle with the `vehicleID` parameter.
+
+Allowed fields: `["vehicles", "serviceRecords", "reminders"]`.
+For the single-vehicle version: `["vehicle", "serviceRecords", "reminders", "nextReminder"]`.
+
+```yaml
+widget:
+ type: lubelogger
+ url: https://lubelogger.host.or.ip
+ username: lubeloggerusername
+ password: lubeloggerpassword
+ vehicleID: 1 # optional, changes to single-vehicle version
+```
diff --git a/docs/widgets/services/mailcow.md b/docs/widgets/services/mailcow.md
new file mode 100644
index 00000000..3cb2ac18
--- /dev/null
+++ b/docs/widgets/services/mailcow.md
@@ -0,0 +1,15 @@
+---
+title: Mailcow
+description: Mailcow Widget Configuration
+---
+
+Learn more about [Mailcow](https://github.com/mailcow/mailcow-dockerized).
+
+Allowed fields: `["domains", "mailboxes", "mails", "storage"]`.
+
+```yaml
+widget:
+ type: mailcow
+ url: https://mailcow.host.or.ip
+ key: mailcowapikey
+```
diff --git a/docs/widgets/services/mastodon.md b/docs/widgets/services/mastodon.md
index 5a0ed703..891115da 100644
--- a/docs/widgets/services/mastodon.md
+++ b/docs/widgets/services/mastodon.md
@@ -3,6 +3,8 @@ title: Mastodon
description: Mastodon Widget Configuration
---
+Learn more about [Mastodon](https://github.com/mastodon/mastodon).
+
Use the base URL of the Mastodon instance you'd like to pull stats for. Does not require authentication as the stats are part of the public API endpoints.
Allowed fields: `["user_count", "status_count", "domain_count"]`.
diff --git a/docs/widgets/services/mealie.md b/docs/widgets/services/mealie.md
index cb7b957f..7fb33503 100644
--- a/docs/widgets/services/mealie.md
+++ b/docs/widgets/services/mealie.md
@@ -3,6 +3,8 @@ title: Mealie
description: Mealie Widget Configuration
---
+Learn more about [Mealie](https://github.com/mealie-recipes/mealie).
+
Generate a user API key under `Profile > Manage Your API Tokens > Generate`.
Allowed fields: `["recipes", "users", "categories", "tags"]`.
@@ -12,4 +14,5 @@ widget:
type: mealie
url: http://mealie-frontend.host.or.ip
key: mealieapitoken
+ version: 2 # only required if version > 1, defaults to 1
```
diff --git a/docs/widgets/services/medusa.md b/docs/widgets/services/medusa.md
index d9b37fed..82ec2b53 100644
--- a/docs/widgets/services/medusa.md
+++ b/docs/widgets/services/medusa.md
@@ -3,6 +3,8 @@ title: Medusa
description: Medusa Widget Configuration
---
+Learn more about [Medusa](https://github.com/pymedusa/Medusa).
+
Allowed fields: `["wanted", "queued", "series"]`.
```yaml
diff --git a/docs/widgets/services/miniflux.md b/docs/widgets/services/miniflux.md
index 0b1dfc87..3f2e29e0 100644
--- a/docs/widgets/services/miniflux.md
+++ b/docs/widgets/services/miniflux.md
@@ -3,6 +3,8 @@ title: Miniflux
description: Miniflux Widget Configuration
---
+Learn more about [Miniflux](https://github.com/miniflux/v2).
+
Api key is found under Settings > API keys
Allowed fields: `["unread", "read"]`.
diff --git a/docs/widgets/services/mjpeg.md b/docs/widgets/services/mjpeg.md
index e0e912d0..b0784ff0 100644
--- a/docs/widgets/services/mjpeg.md
+++ b/docs/widgets/services/mjpeg.md
@@ -3,7 +3,7 @@ title: MJPEG
description: MJPEG Stream Widget Configuration
---
-
+
Pass the stream URL from a service like [ยตStreamer](https://github.com/pikvm/ustreamer) or [camera-streamer](https://github.com/ayufan/camera-streamer).
diff --git a/docs/widgets/services/moonraker.md b/docs/widgets/services/moonraker.md
index e3374e60..2ee1a4e2 100644
--- a/docs/widgets/services/moonraker.md
+++ b/docs/widgets/services/moonraker.md
@@ -3,6 +3,8 @@ title: Moonraker (Klipper)
description: Moonraker (Klipper) Widget Configuration
---
+Learn more about [Moonraker](https://github.com/Arksine/moonraker).
+
Allowed fields: `["printer_state", "print_status", "print_progress", "layers"]`.
```yaml
@@ -10,3 +12,12 @@ widget:
type: moonraker
url: http://moonraker.host.or.ip:port
```
+
+If your moonraker instance has an active authorization and your homepage ip isn't whitelisted you need to add your api key ([Authorization Documentation](https://moonraker.readthedocs.io/en/latest/web_api/#authorization)).
+
+```yaml
+widget:
+ type: moonraker
+ url: http://moonraker.host.or.ip:port
+ key: api_keymoonraker
+```
diff --git a/docs/widgets/services/mylar.md b/docs/widgets/services/mylar.md
index 9ec1397f..f15e7b9b 100644
--- a/docs/widgets/services/mylar.md
+++ b/docs/widgets/services/mylar.md
@@ -3,6 +3,8 @@ title: Mylar3
description: Mylar3 Widget Configuration
---
+Learn more about [Mylar3](https://github.com/mylar3/mylar3).
+
API must be enabled in Mylar3 settings.
Allowed fields: `["series", "issues", "wanted"]`.
diff --git a/docs/widgets/services/myspeed.md b/docs/widgets/services/myspeed.md
new file mode 100644
index 00000000..1790c9c1
--- /dev/null
+++ b/docs/widgets/services/myspeed.md
@@ -0,0 +1,15 @@
+---
+title: MySpeed
+description: MySpeed Widget Configuration
+---
+
+Learn more about [MySpeed](https://myspeed.dev/).
+
+Allowed fields: `["ping", "download", "upload"]`.
+
+```yaml
+widget:
+ type: myspeed
+ url: http://myspeed.host.or.ip:port
+ password: password # only required if password is set
+```
diff --git a/docs/widgets/services/navidrome.md b/docs/widgets/services/navidrome.md
index bb57f635..9fd43a0f 100644
--- a/docs/widgets/services/navidrome.md
+++ b/docs/widgets/services/navidrome.md
@@ -3,6 +3,8 @@ title: Navidrome
description: Navidrome Widget Configuration
---
+Learn more about [Navidrome](https://github.com/navidrome/navidrome).
+
For detailed information about how to generate the token see http://www.subsonic.org/pages/api.jsp.
Allowed fields: no configurable fields for this widget.
diff --git a/docs/widgets/services/netalertx.md b/docs/widgets/services/netalertx.md
new file mode 100644
index 00000000..1f618182
--- /dev/null
+++ b/docs/widgets/services/netalertx.md
@@ -0,0 +1,19 @@
+---
+title: NetAlertX
+description: NetAlertX (formerly PiAlert) Widget Configuration
+---
+
+Learn more about [NetAlertX](https://github.com/jokob-sk/NetAlertX).
+
+_Note that the project was renamed from PiAlert to NetAlertX._
+
+Allowed fields: `["total", "connected", "new_devices", "down_alerts"]`.
+
+If you have enabled a password on your NetAlertX instance, you will need to provide the `SYNC_api_token` as the `key` in your config.
+
+```yaml
+widget:
+ type: netalertx
+ url: http://ip:port
+ key: netalertxsyncapitoken # optional, only if password is enabled
+```
diff --git a/docs/widgets/services/netdata.md b/docs/widgets/services/netdata.md
index 70acf490..32b4d677 100644
--- a/docs/widgets/services/netdata.md
+++ b/docs/widgets/services/netdata.md
@@ -3,10 +3,12 @@ title: Netdata
description: Netdata Widget Configuration
---
+Learn more about [Netdata](https://github.com/netdata/netdata).
+
Allowed fields: `["warnings", "criticals"]`.
```yaml
widget:
- type: Netdata
+ type: netdata
url: http://netdata.host.or.ip
```
diff --git a/docs/widgets/services/nextcloud.md b/docs/widgets/services/nextcloud.md
index 1e9d53f9..199098b6 100644
--- a/docs/widgets/services/nextcloud.md
+++ b/docs/widgets/services/nextcloud.md
@@ -3,6 +3,8 @@ title: Nextcloud
description: Nextcloud Widget Configuration
---
+Learn more about [Nextcloud](https://github.com/nextcloud).
+
Use username & password, or the `NC-Token` key. Information about the token can be found under **Settings** > **System**. If both are provided, NC-Token will be used.
Allowed fields: `["cpuload", "memoryusage", "freespace", "activeusers", "numfiles", "numshares"]`.
diff --git a/docs/widgets/services/nextdns.md b/docs/widgets/services/nextdns.md
index b646c11d..4fb5a88b 100644
--- a/docs/widgets/services/nextdns.md
+++ b/docs/widgets/services/nextdns.md
@@ -3,6 +3,8 @@ title: NextDNS
description: NextDNS Widget Configuration
---
+Learn more about [NextDNS](https://nextdns.io/).
+
Api key is found under Account > API, profile ID is found under Setup > Endpoints > ID
```yaml
diff --git a/docs/widgets/services/nginx-proxy-manager.md b/docs/widgets/services/nginx-proxy-manager.md
index dc201627..3b80f8f3 100644
--- a/docs/widgets/services/nginx-proxy-manager.md
+++ b/docs/widgets/services/nginx-proxy-manager.md
@@ -3,6 +3,8 @@ title: Nginx Proxy Manager
description: Nginx Proxy Manager Widget Configuration
---
+Learn more about [Nginx Proxy Manager](https://nginxproxymanager.com/).
+
Login with the same admin username and password used to access the web UI.
Allowed fields: `["enabled", "disabled", "total"]`.
diff --git a/docs/widgets/services/nzbget.md b/docs/widgets/services/nzbget.md
index f069910a..2d7758c9 100644
--- a/docs/widgets/services/nzbget.md
+++ b/docs/widgets/services/nzbget.md
@@ -3,6 +3,8 @@ title: NZBget
description: NZBget Widget Configuration
---
+Learn more about [NZBget](https://github.com/nzbget/nzbget).
+
This widget uses the same authentication method as your browser when logging in (HTTP Basic Auth), and is often referred to as the ControlUsername and ControlPassword inside of Nzbget documentation.
Allowed fields: `["rate", "remaining", "downloaded"]`.
diff --git a/docs/widgets/services/octoprint.md b/docs/widgets/services/octoprint.md
index 7688e13f..c6ddeb07 100644
--- a/docs/widgets/services/octoprint.md
+++ b/docs/widgets/services/octoprint.md
@@ -3,6 +3,8 @@ title: OctoPrint
description: OctoPrintWidget Configuration
---
+Learn more about [OctoPrint](https://octoprint.org/).
+
Allowed fields: `["printer_state", "temp_tool", "temp_bed", "job_completion"]`.
```yaml
diff --git a/docs/widgets/services/ombi.md b/docs/widgets/services/ombi.md
index de2708d0..ab290244 100644
--- a/docs/widgets/services/ombi.md
+++ b/docs/widgets/services/ombi.md
@@ -3,6 +3,8 @@ title: Ombi
description: Ombi Widget Configuration
---
+Learn more about [Ombi](https://github.com/Ombi-app/Ombi).
+
Find your API key under `Settings > Configuration > General`.
Allowed fields: `["pending", "approved", "available"]`.
diff --git a/docs/widgets/services/opendtu.md b/docs/widgets/services/opendtu.md
index 6a6111cc..9a68a8c3 100644
--- a/docs/widgets/services/opendtu.md
+++ b/docs/widgets/services/opendtu.md
@@ -3,6 +3,8 @@ title: OpenDTU
description: OpenDTU Widget
---
+Learn more about [OpenDTU](https://github.com/tbnobody/OpenDTU).
+
Allowed fields: `["yieldDay", "relativePower", "absolutePower", "limit"]`.
```yaml
diff --git a/docs/widgets/services/openmediavault.md b/docs/widgets/services/openmediavault.md
index 43ff2dea..a8a26e1f 100644
--- a/docs/widgets/services/openmediavault.md
+++ b/docs/widgets/services/openmediavault.md
@@ -3,6 +3,8 @@ title: OpenMediaVault
description: OpenMediaVault Widget Configuration
---
+Learn more about [OpenMediaVault](https://www.openmediavault.org/).
+
Provides useful information from your OpenMediaVault
```yaml
diff --git a/docs/widgets/services/openwrt.md b/docs/widgets/services/openwrt.md
new file mode 100644
index 00000000..3759d2b0
--- /dev/null
+++ b/docs/widgets/services/openwrt.md
@@ -0,0 +1,60 @@
+---
+title: OpenWRT
+description: OpenWRT widget configuration
+---
+
+Learn more about [OpenWRT](https://openwrt.org/).
+
+Provides information from OpenWRT
+
+```yaml
+widget:
+ type: openwrt
+ url: http://host.or.ip
+ username: homepage
+ password: pass
+ interfaceName: eth0 # optional
+```
+
+## Interface
+
+Setting `interfaceName` (e.g. eth0) will display information for that particular device, otherwise the widget will display general system info.
+
+## Authorization
+
+In order for homepage to access the OpenWRT RPC endpoints you will need to [create an ACL](https://openwrt.org/docs/techref/ubus#acls) and [new user](https://openwrt.org/docs/techref/ubus#authentication) in OpenWRT.
+
+Create an ACL named `homepage.json` in `/usr/share/rpcd/acl.d/`, the following permissions will suffice:
+
+```json
+{
+ "homepage": {
+ "description": "Homepage widget",
+ "read": {
+ "ubus": {
+ "network.interface.wan": ["status"],
+ "network.interface.lan": ["status"],
+ "network.device": ["status"],
+ "system": ["info"]
+ }
+ }
+ }
+}
+```
+
+Create a `crypt(5)` password hash using the following command in the OpenWRT shell:
+
+```sh
+uhttpd -m "