Compare commits

...

90 Commits

Author SHA1 Message Date
shamoon
8ec488efbd Revert "Fix: subdirectory deployment (#2205)"
This revers commit b8eda91005
2023-10-18 11:44:26 -07:00
shamoon
9e3bc8e64f Update prettier package to v3 2023-10-18 09:49:33 -07:00
shamoon
29827b1c70 Add pre-commit to ci 2023-10-18 09:49:33 -07:00
shamoon
f48cf0dc9f Add instructions to dev docs for pre-commit 2023-10-18 09:49:33 -07:00
shamoon
19c25713c4 Run pre-commit hooks over existing codebase
Co-Authored-By: Ben Phelps <ben@phelps.io>
2023-10-18 09:49:33 -07:00
shamoon
fa50bbad9c Add pre-commit with prettier 2023-10-18 09:49:33 -07:00
Ben Phelps
8e6a169b50 New translations common.json (German) (#2208) 2023-10-18 09:00:58 -07:00
shamoon
4248db7f21 k8s: Support app ingress annotation (#2198) 2023-10-18 08:57:10 -07:00
Isidro Osoria
b8eda91005 Fix: subdirectory deployment (#2205) 2023-10-18 08:49:42 -07:00
Ben Phelps
5f7891d8db New translations common.json (French) (#2206) 2023-10-17 23:29:26 -07:00
Ben Phelps
b14abc2642 New Crowdin updates (#2144)
* New translations common.json (Dutch)

* New translations common.json (Dutch)

* New translations common.json (Polish)

* New translations common.json (Danish)

* New translations common.json (French)

* New translations common.json (German)

* New translations common.json (Chinese Simplified)

* New translations common.json (Chinese Simplified)

* New translations common.json (Dutch)

* New translations common.json (Dutch)

* New translations common.json (German)

* New translations common.json (German)

* New translations common.json (German)

* New translations common.json (Spanish)

* New translations common.json (Danish)

* New translations common.json (Italian)

* New translations common.json (Dutch)

* New translations common.json (Dutch)

* New translations common.json (Japanese)

* New translations common.json (Japanese)
2023-10-17 22:55:01 -07:00
icyleaf
8ea2ccf110 Enhancement: support dot-notated field properties in docker labels (#2195) 2023-10-17 22:54:17 -07:00
shamoon
cbad95bf9c Fix dot status when exited (#2204) 2023-10-17 17:47:51 -07:00
shamoon
47db8be7bb Fix glances network calculation (#2201) 2023-10-17 13:31:02 -07:00
Preetham Kulai
2f4985b977 Enhancement: mjpeg stream widget placeholder image (#2192)
* added placeholder image on stream load error

* updated placeholder image to tv static animation

* Revert "updated placeholder image to tv static animation"

This reverts commit f0efdd8833.

* Inline animated tv static image

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-10-16 13:12:28 -07:00
karpaterna
8d34dc5725 Documentation: add defaultinterval option for coinmarketcap (#2191) 2023-10-15 10:09:48 -07:00
shamoon
31c33f4f32 Specify src in jsconfig 2023-10-14 12:44:37 -07:00
shamoon
ef3e98285e Fix references to podSelector in k8s manifests (#2187) 2023-10-13 19:34:19 -07:00
smoothlystable
e012ea6050 Changedetection.io: Skip checking for diff if watch never had a change (#2186)
* Only check diff in there has ever been a change

* Code style

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-10-13 09:02:36 -07:00
Ado Nishimura
dcc2f3e8f3 Fix: proxmox CPU/MEM NaN when cluster has offline nodes (#2185) 2023-10-13 03:49:16 -07:00
shamoon
94718db22b Fix troubleshooting indentation 2023-10-12 13:12:11 -07:00
shamoon
c591049a1a Fix glances doc image assets 2023-10-12 11:53:15 -07:00
shamoon
fd04e93d68 Update k8s deployment with specific files (#2178) 2023-10-12 08:35:08 -07:00
patopesto
29b7d5756c Fix: possible sonarr widget queue duplicates (#2171) 2023-10-09 21:05:29 -07:00
shamoon
596e5c9b84 Fix glances fs metric for disks with colon (#2170) 2023-10-09 19:43:03 -07:00
shamoon
7ea1d0dd47 Fix calculation for docker container memory usage (#2167) 2023-10-08 10:26:20 -07:00
shamoon
4a04347518 Update README.md 2023-10-08 07:22:43 -07:00
shamoon
7bbb35db13 Update README.md 2023-10-08 06:46:20 -07:00
shamoon
d1d81e5753 Fix: emby / jellyfin isVideoDirect (#2156) 2023-10-07 20:58:05 -07:00
shamoon
4c2ecb9b0e Add hdhomerun 2023-10-06 21:01:37 -07:00
Ben Phelps
1066d17f70 Update translations.md (#2142)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-10-06 13:16:20 +00:00
shamoon
462a8e001f Change weblate links to crowdin 2023-10-06 00:04:51 -07:00
Ben Phelps
0eab49a449 New translations common.json (Yue) (#2132) 2023-10-05 23:56:05 +00:00
shamoon
24121cd5f0 run ci on merge_group 2023-10-05 15:17:05 -07:00
Lavender Shannon
8aeded4774 Update gluetun.md (#2137)
Fixed link to control server documentation
2023-10-05 22:14:37 +00:00
Denis Papec
40522fbb96 Fix: Quicklaunch shows also services without a url (#2136)
* Fix: Quicklaunch show only services with a link

Signed-off-by: Denis Papec <denis.papec@gmail.com>

* Revert "Fix: Quicklaunch show only services with a link"

This reverts commit 30ee825611.

* Filter only bookmarks and services with href

---------

Signed-off-by: Denis Papec <denis.papec@gmail.com>
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-10-05 22:14:25 +00:00
Ben Phelps
76cbb6e2ed Revert "New Crowdin updates (#2124)" (#2131)
This reverts commit b29c0f809c.
2023-10-05 10:02:01 -07:00
Ben Phelps
b29c0f809c New Crowdin updates (#2124) 2023-10-05 09:49:10 -07:00
shamoon
4f41be512c Include tailwind bg-black/white, greedy ping regex, adjust position 2023-10-05 09:28:43 -07:00
shamoon
b765330b4a Fix: dot visibility in some cases, translation strings (#2129) 2023-10-05 07:19:20 -07:00
Ben Phelps
ed3055ae1b Update Crowdin configuration file 2023-10-05 11:19:02 +03:00
Ben Phelps
5460f89cc9 Update Crowdin configuration file 2023-10-05 11:07:44 +03:00
Ben Phelps
29018873f5 Update Crowdin configuration file 2023-10-05 10:37:26 +03:00
Anonymous
11cacfb823 Translated using Weblate (Basque)
Currently translated at 6.2% (34 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eu/
2023-10-05 09:29:21 +02:00
Anonymous
eddec4adc2 Translated using Weblate (Indonesian)
Currently translated at 4.4% (24 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/id/
2023-10-05 09:29:21 +02:00
Anonymous
2faf51b4c0 Translated using Weblate (Slovenian)
Currently translated at 95.9% (521 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sl/
2023-10-05 09:29:21 +02:00
Anonymous
891c387062 Translated using Weblate (Greek)
Currently translated at 33.3% (181 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-10-05 09:29:21 +02:00
Anonymous
3b2b6cc064 Translated using Weblate (Korean)
Currently translated at 31.8% (173 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ko/
2023-10-05 09:29:20 +02:00
Anonymous
83a5d1b17a Translated using Weblate (Slovak)
Currently translated at 23.7% (129 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sk/
2023-10-05 09:29:20 +02:00
Anonymous
29b0240abd Translated using Weblate (Thai)
Currently translated at 8.8% (48 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/th/
2023-10-05 09:29:20 +02:00
Anonymous
8ad1f9f422 Translated using Weblate (Latvian)
Currently translated at 21.7% (118 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/lv/
2023-10-05 09:29:20 +02:00
Anonymous
ea15a1b9e5 Translated using Weblate (Japanese)
Currently translated at 93.1% (506 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ja/
2023-10-05 09:29:20 +02:00
Anonymous
691ed78e75 Translated using Weblate (Ukrainian)
Currently translated at 93.1% (506 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/uk/
2023-10-05 09:29:20 +02:00
Anonymous
5f58cb285d Translated using Weblate (Esperanto)
Currently translated at 26.7% (145 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/eo/
2023-10-05 09:29:20 +02:00
Anonymous
a6696700b7 Translated using Weblate (Hindi)
Currently translated at 1.8% (10 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hi/
2023-10-05 09:29:19 +02:00
Anonymous
985ca4ae84 Translated using Weblate (Malay)
Currently translated at 46.4% (252 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ms/
2023-10-05 09:29:19 +02:00
Anonymous
ebda0f7b70 Translated using Weblate (Danish)
Currently translated at 95.9% (521 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/da/
2023-10-05 09:29:19 +02:00
Anonymous
8e7723b51d Translated using Weblate (Czech)
Currently translated at 81.7% (444 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/cs/
2023-10-05 09:29:19 +02:00
Anonymous
24635268a0 Translated using Weblate (Arabic)
Currently translated at 48.2% (262 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ar/
2023-10-05 09:29:19 +02:00
Anonymous
729c161271 Translated using Weblate (Serbian)
Currently translated at 1.8% (10 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sr/
2023-10-05 09:29:19 +02:00
Anonymous
69af86eebe Translated using Weblate (Turkish)
Currently translated at 72.3% (393 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/tr/
2023-10-05 09:29:18 +02:00
Anonymous
369a996f1f Translated using Weblate (Bulgarian)
Currently translated at 14.9% (81 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/bg/
2023-10-05 09:29:18 +02:00
Anonymous
b7b63abee0 Translated using Weblate (Telugu)
Currently translated at 39.7% (216 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/te/
2023-10-05 09:29:18 +02:00
Anonymous
4ba47c426a Translated using Weblate (Finnish)
Currently translated at 32.5% (177 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fi/
2023-10-05 09:29:17 +02:00
Anonymous
29d54b032c Translated using Weblate (Yue (Traditional))
Currently translated at 21.7% (118 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/yue_Hant/
2023-10-05 09:29:17 +02:00
Anonymous
8791aa8d0d Translated using Weblate (Portuguese (Brazil))
Currently translated at 84.8% (461 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt_BR/
2023-10-05 09:29:17 +02:00
Anonymous
337ada148c Translated using Weblate (Romanian)
Currently translated at 28.7% (156 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ro/
2023-10-05 09:29:17 +02:00
Anonymous
2c8348f5b5 Translated using Weblate (Hebrew)
Currently translated at 18.6% (101 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/he/
2023-10-05 09:29:17 +02:00
Anonymous
0eeaa99fe3 Translated using Weblate (Hungarian)
Currently translated at 86.7% (471 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hu/
2023-10-05 09:29:16 +02:00
Anonymous
38d2cc7bd7 Translated using Weblate (Croatian)
Currently translated at 86.5% (470 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/hr/
2023-10-05 09:29:16 +02:00
Anonymous
759dc9f3d2 Translated using Weblate (Swedish)
Currently translated at 24.3% (132 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/sv/
2023-10-05 09:29:16 +02:00
Anonymous
72d9a614fd Translated using Weblate (Polish)
Currently translated at 68.8% (374 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-10-05 09:29:16 +02:00
Anonymous
3d209bf572 Translated using Weblate (Catalan)
Currently translated at 48.0% (261 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-10-05 09:29:16 +02:00
Anonymous
3268db1298 Translated using Weblate (Chinese (Traditional))
Currently translated at 98.3% (534 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hant/
2023-10-05 09:29:16 +02:00
Anonymous
ab4a28d04a Translated using Weblate (Dutch)
Currently translated at 98.3% (534 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nl/
2023-10-05 09:29:15 +02:00
Anonymous
3c1644e18f Translated using Weblate (Vietnamese)
Currently translated at 8.2% (45 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/vi/
2023-10-05 09:29:15 +02:00
Anonymous
e1f6ddaeab Translated using Weblate (Norwegian Bokmål)
Currently translated at 14.9% (81 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/nb_NO/
2023-10-05 09:29:15 +02:00
Anonymous
826bad8ff4 Translated using Weblate (Italian)
Currently translated at 99.4% (540 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-10-05 09:29:15 +02:00
Anonymous
8aa2bbcdd3 Translated using Weblate (Chinese (Simplified))
Currently translated at 82.8% (450 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/zh_Hans/
2023-10-05 09:29:15 +02:00
Anonymous
aece2954df Translated using Weblate (Russian)
Currently translated at 79.1% (430 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ru/
2023-10-05 09:29:15 +02:00
Anonymous
5fbdbce79c Translated using Weblate (Portuguese)
Currently translated at 76.4% (415 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pt/
2023-10-05 09:29:14 +02:00
Anonymous
ce2bfd9d21 Translated using Weblate (French)
Currently translated at 99.6% (541 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-10-05 09:29:14 +02:00
Anonymous
df4cc6086c Translated using Weblate (Spanish)
Currently translated at 99.6% (541 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-10-05 09:29:14 +02:00
Anonymous
2c632e2b3e Translated using Weblate (German)
Currently translated at 99.0% (538 of 543 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-10-05 09:29:14 +02:00
shamoon
6de20f0ab6 Update homepage-move.md 2023-10-05 00:26:41 -07:00
shamoon
7434d597c9 Update migration docs 2023-10-05 00:22:51 -07:00
shamoon
59dbc79656 Remove deprecated notification 2023-10-04 23:55:03 -07:00
shamoon
b475f89d85 Migrate more URLs 2023-10-04 23:24:59 -07:00
shamoon
7f9ae3d01b Updating more repo URLs 2023-10-04 23:15:59 -07:00
shamoon
b12d27551a Update repo in docs 2023-10-04 23:12:53 -07:00
448 changed files with 9376 additions and 7564 deletions

View File

@@ -11,13 +11,13 @@ body:
- type: markdown - type: markdown
attributes: attributes:
value: | value: |
Have a question? 👉 [Start a new discussion](https://github.com/benphelps/homepage/discussions/new) or [ask in chat](https://discord.gg/SaPGSzrEZC). 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: Before opening an issue, please double check:
- [The troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/). - [The troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/).
- [The homepage documentation](https://gethomepage.dev/) - [The homepage documentation](https://gethomepage.dev/)
- [Existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions). - [Existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
- type: textarea - type: textarea
id: description id: description
attributes: attributes:
@@ -95,5 +95,5 @@ body:
required: true required: true
- label: Follow [the troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/) (please include output above if applicable). - label: Follow [the troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/) (please include output above if applicable).
required: true required: true
- label: Search [existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions). - label: Search [existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
required: true required: true

View File

@@ -1,11 +1,11 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: 🤔 Questions and Help - name: 🤔 Questions and Help
url: https://github.com/benphelps/homepage/discussions 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: This issue tracker is for bugs only, not general support questions. Please refer to our Discussions.
- name: 💬 Chat - name: 💬 Chat
url: https://discord.gg/k4ruYNrudu url: https://discord.gg/k4ruYNrudu
about: Want to discuss homepage with others? Check out our chat. about: Want to discuss homepage with others? Check out our chat.
- name: 🚀 Feature Request - name: 🚀 Feature Request
url: https://github.com/benphelps/homepage/discussions/new?category=feature-requests url: https://github.com/gethomepage/homepage/discussions/new?category=feature-requests
about: Remember to search for existing feature requests and "up-vote" any you like about: Remember to search for existing feature requests and "up-vote" any you like

View File

@@ -27,5 +27,5 @@ What type of change does your PR introduce to Homepage?
- [ ] If adding a service widget or a change that requires it, I have added corresponding documentation changes. - [ ] If adding a service widget or a change that requires it, I have added corresponding documentation changes.
- [ ] If adding a new widget I have reviewed the [guidelines](https://gethomepage.dev/latest/more/development/#service-widget-guidelines). - [ ] If adding a new widget I have reviewed the [guidelines](https://gethomepage.dev/latest/more/development/#service-widget-guidelines).
- [ ] If applicable, I have checked that all tests pass with e.g. `pnpm lint`. - [ ] I have checked that all code style checks pass using pre-commit hooks and linting checks with `pnpm lint` (see development guidelines).
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers. - [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.

View File

@@ -20,6 +20,7 @@ on:
paths-ignore: paths-ignore:
- 'docs/**' - 'docs/**'
- 'mkdocs.yml' - 'mkdocs.yml'
merge_group:
env: env:
# Use docker.io for Docker Hub if empty # Use docker.io for Docker Hub if empty
@@ -29,10 +30,28 @@ env:
jobs: jobs:
pre-commit:
name: Linting Checks
runs-on: ubuntu-22.04
steps:
-
name: Checkout repository
uses: actions/checkout@v4
-
name: Install python
uses: actions/setup-python@v4
with:
python-version: 3.x
-
name: Check files
uses: pre-commit/action@v3.0.0
build: build:
name: Docker Build & Push name: Docker Build & Push
if: github.repository == 'benphelps/homepage' if: github.repository == 'gethomepage/homepage'
runs-on: self-hosted runs-on: self-hosted
needs:
- pre-commit
permissions: permissions:
contents: read contents: read
packages: write packages: write
@@ -47,7 +66,7 @@ jobs:
# Install the cosign tool except on PR # Install the cosign tool except on PR
# https://github.com/sigstore/cosign-installer # https://github.com/sigstore/cosign-installer
- name: Install cosign - name: Install cosign
if: github.event_name != 'pull_request' if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@main uses: sigstore/cosign-installer@main
with: with:
cosign-release: 'v1.13.1' # optional cosign-release: 'v1.13.1' # optional
@@ -56,11 +75,11 @@ jobs:
# https://github.com/marketplace/actions/docker-setup-buildx#with-qemu # https://github.com/marketplace/actions/docker-setup-buildx#with-qemu
- name: Setup QEMU - name: Setup QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3
# Workaround: https://github.com/docker/build-push-action/issues/461 # Workaround: https://github.com/docker/build-push-action/issues/461
- name: Setup Docker buildx - name: Setup Docker buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
# This step is being disabled because the runner is on a self-hosted machine # This step is being disabled because the runner is on a self-hosted machine
# where the cache will stick between runs. # where the cache will stick between runs.
# - name: Cache Docker layers # - name: Cache Docker layers
@@ -105,7 +124,6 @@ jobs:
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }} REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
DEPRECATED_REPO=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.source'] == 'https://github.com/benphelps/homepage' }}
# https://github.com/docker/setup-qemu-action#about # https://github.com/docker/setup-qemu-action#about
# platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6 # platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6

View File

@@ -11,16 +11,35 @@ on:
paths: paths:
- 'docs/**' - 'docs/**'
- 'mkdocs.yml' - 'mkdocs.yml'
merge_group:
workflow_dispatch: workflow_dispatch:
permissions: permissions:
contents: write contents: write
jobs: jobs:
pre-commit:
name: Linting Checks
runs-on: ubuntu-22.04
steps:
-
name: Checkout repository
uses: actions/checkout@v4
-
name: Install python
uses: actions/setup-python@v4
with:
python-version: 3.x
-
name: Check files
uses: pre-commit/action@v3.0.0
test: test:
name: Test Build name: Test Build
if: github.repository == 'benphelps/homepage' && github.event_name == 'pull_request' if: github.repository == 'gethomepage/homepage' && github.event_name == 'pull_request'
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs:
- pre-commit
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: actions/setup-python@v4 - uses: actions/setup-python@v4
@@ -39,9 +58,11 @@ jobs:
- name: Test Docs Build - name: Test Docs Build
run: MKINSIDERS=false mkdocs build run: MKINSIDERS=false mkdocs build
deploy: deploy:
name: Build & Deploy name: Build & Deploy
if: github.repository == 'benphelps/homepage' && github.event_name != 'pull_request' if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request'
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs:
- pre-commit
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:

19
.pre-commit-config.yaml Normal file
View File

@@ -0,0 +1,19 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
exclude: "(^mkdocs\\.yml$)"
- id: check-added-large-files
- repo: https://github.com/pre-commit/mirrors-prettier
rev: 'v3.0.3'
hooks:
- id: prettier
types_or:
- javascript
- markdown
- jsx

1
.prettierrc Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -17,23 +17,23 @@ diverse, inclusive, and healthy community.
Examples of behavior that contributes to a positive environment for our Examples of behavior that contributes to a positive environment for our
community include: community include:
* Demonstrating empathy and kindness toward other people - Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences - Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback - Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, - Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience and learning from the experience
* Focusing on what is best not just for us as individuals, but for the - Focusing on what is best not just for us as individuals, but for the
overall community overall community
Examples of unacceptable behavior include: Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or - The use of sexualized language or imagery, and sexual attention or
advances of any kind advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks - Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment - Public or private harassment
* Publishing others' private information, such as a physical or email - Publishing others' private information, such as a physical or email
address, without their explicit permission address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a - Other conduct which could reasonably be considered inappropriate in a
professional setting professional setting
## Enforcement Responsibilities ## Enforcement Responsibilities
@@ -106,7 +106,7 @@ Violating these terms may lead to a permanent ban.
### 4. Permanent Ban ### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community **Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals. individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within **Consequence**: A permanent ban from any sort of public interaction within

View File

@@ -1,4 +1,5 @@
# Contributing to Homepage # Contributing to Homepage
We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's: We love your input! We want to make contributing to this project as easy and transparent as possible, whether it's:
- Reporting a bug - Reporting a bug
@@ -8,16 +9,20 @@ We love your input! We want to make contributing to this project as easy and tra
- Becoming a maintainer - Becoming a maintainer
## We Develop with Github ## We Develop with Github
We use github to host code, to track issues and feature requests, as well as accept pull requests. We use github to host code, to track issues and feature requests, as well as accept pull requests.
## Any contributions you make will be under the GNU General Public License v3.0 ## Any contributions you make will be under the GNU General Public License v3.0
In short, when you submit code changes, your submissions are understood to be under the same [GNU General Public License v3.0](https://choosealicense.com/licenses/gpl-3.0/) that covers the project. Feel free to contact the maintainers if that's a concern. In short, when you submit code changes, your submissions are understood to be under the same [GNU General Public License v3.0](https://choosealicense.com/licenses/gpl-3.0/) that covers the project. Feel free to contact the maintainers if that's a concern.
## Report bugs using Github's [issues](https://github.com/benphelps/homepage/issues) ## Report bugs using Github's [issues](https://github.com/gethomepage/homepage/issues)
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/benphelps/homepage/issues/new); it's that easy!
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/gethomepage/homepage/issues/new); it's that easy!
## Write bug reports with detail, background, and sample configurations ## Write bug reports with detail, background, and sample configurations
Homepage includes a lot of configuration options and is often deploying in larger systems. Please include as much information (configurations, deployment method, Docker & API versions, etc) as you can when reporting an issue.
Homepage includes a lot of configuration options and is often deploying in larger systems. Please include as much information (configurations, deployment method, Docker & API versions, etc) as you can when reporting an issue.
**Great Bug Reports** tend to have: **Great Bug Reports** tend to have:
@@ -29,16 +34,20 @@ Homepage includes a lot of configuration options and is often deploying in large
- What actually happens - What actually happens
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work) - Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)
People *love* thorough bug reports. I'm not even kidding. People _love_ thorough bug reports. I'm not even kidding.
## Development Guidelines ## Development Guidelines
Please see the [documentation regarding development](https://gethomepage.dev/latest/more/development/) and specifically the [guidelines for new service widgets](https://gethomepage.dev/latest/more/development/#service-widget-guidelines) if you are considering making one. Please see the [documentation regarding development](https://gethomepage.dev/latest/more/development/) and specifically the [guidelines for new service widgets](https://gethomepage.dev/latest/more/development/#service-widget-guidelines) if you are considering making one.
## Use a Consistent Coding Style ## Use a Consistent Coding Style
This project follows the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript), please follow it when submitting pull requests.
Please see information in the docs regarding [code formatting with pre-commit hooks](https://gethomepage.dev/latest/more/development.md#code-formatting-with-pre-commit-hooks).
## License ## License
By contributing, you agree that your contributions will be licensed under its GNU General Public License. By contributing, you agree that your contributions will be licensed under its GNU General Public License.
## References ## References
This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/main/CONTRIBUTING.md) This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/main/CONTRIBUTING.md)

View File

@@ -23,7 +23,6 @@ WORKDIR /app
ARG BUILDTIME ARG BUILDTIME
ARG VERSION ARG VERSION
ARG REVISION ARG REVISION
ARG DEPRECATED_REPO
COPY --link --from=deps /app/node_modules ./node_modules/ COPY --link --from=deps /app/node_modules ./node_modules/
COPY . . COPY . .
@@ -31,15 +30,15 @@ COPY . .
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"] SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
RUN npm run telemetry \ RUN npm run telemetry \
&& mkdir config \ && mkdir config \
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION NEXT_PUBLIC_DEPRECATED_REPO=$DEPRECATED_REPO npm run build && NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION npm run build
# Production image, copy all the files and run next # Production image, copy all the files and run next
FROM docker.io/node:18-alpine AS runner FROM docker.io/node:18-alpine AS runner
LABEL org.opencontainers.image.title "Homepage" LABEL org.opencontainers.image.title "Homepage"
LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations." LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations."
LABEL org.opencontainers.image.url="https://github.com/benphelps/homepage" LABEL org.opencontainers.image.url="https://github.com/gethomepage/homepage"
LABEL org.opencontainers.image.documentation='https://github.com/benphelps/homepage/wiki' LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki'
LABEL org.opencontainers.image.source='https://github.com/benphelps/homepage' LABEL org.opencontainers.image.source='https://github.com/gethomepage/homepage'
LABEL org.opencontainers.image.licenses='Apache-2.0' LABEL org.opencontainers.image.licenses='Apache-2.0'
ENV NODE_ENV production ENV NODE_ENV production

View File

@@ -14,12 +14,14 @@
</p> </p>
<p align="center"> <p align="center">
<a href="https://github.com/benphelps/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/benphelps/homepage/docker-publish.yml"></a> <a href="https://github.com/gethomepage/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/gethomepage/homepage/docker-publish.yml"></a>
&nbsp; &nbsp;
<a href="https://hosted.weblate.org/engage/homepage/"><img src="https://hosted.weblate.org/widgets/homepage/-/homepage/svg-badge.svg" alt="Weblate"></a> <a href="https://crowdin.com/project/gethomepage" target="_blank"><img src="https://badges.crowdin.net/gethomepage/localized.svg"></a>
&nbsp; &nbsp;
<a href="https://discord.gg/k4ruYNrudu"><img alt="Discord" src="https://img.shields.io/discord/1019316731635834932"></a> <a href="https://discord.gg/k4ruYNrudu"><img alt="Discord" src="https://img.shields.io/discord/1019316731635834932"></a>
&nbsp; &nbsp;
<a href="http://gethomepage.dev/latest/" title="Docs"><img title="Docs" src="https://github.com/gethomepage/homepage/actions/workflows/docs-publish.yml/badge.svg"/></a>
&nbsp;
<a href="https://paypal.me/phelpsben" title="Donate"><img alt="GitHub Sponsors" src="https://img.shields.io/github/sponsors/benphelps"></a> <a href="https://paypal.me/phelpsben" title="Donate"><img alt="GitHub Sponsors" src="https://img.shields.io/github/sponsors/benphelps"></a>
</p> </p>
@@ -65,7 +67,7 @@ Using docker compose:
version: "3.3" version: "3.3"
services: services:
homepage: homepage:
image: ghcr.io/benphelps/homepage:latest image: ghcr.io/gethomepage/homepage:latest
container_name: homepage container_name: homepage
environment: environment:
PUID: 1000 -- optional, your user id PUID: 1000 -- optional, your user id
@@ -88,7 +90,7 @@ docker run --name homepage \
-v /path/to/config:/app/config \ -v /path/to/config:/app/config \
-v /var/run/docker.sock:/var/run/docker.sock:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped \ --restart unless-stopped \
ghcr.io/benphelps/homepage:latest ghcr.io/gethomepage/homepage:latest
``` ```
## With Node ## With Node
@@ -96,7 +98,7 @@ docker run --name homepage \
First, clone the repository: First, clone the repository:
```bash ```bash
git clone https://github.com/benphelps/homepage.git git clone https://github.com/gethomepage/homepage.git
``` ```
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like): Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
@@ -122,7 +124,7 @@ pnpm dev
# Configuration # Configuration
Please refere 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](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.
# Development # Development
@@ -144,6 +146,8 @@ This is a [Next.js](https://nextjs.org/) application, see their documentation fo
# Documentation # Documentation
The homepage documentation is available at [https://gethomepage.dev/](https://gethomepage.dev/).
Homepage uses Material for MkDocs for documentation. To run the documentation locally, first install the dependencies: Homepage uses Material for MkDocs for documentation. To run the documentation locally, first install the dependencies:
```bash ```bash
@@ -158,9 +162,9 @@ mkdocs serve # or build, to build the static site
# Support & Suggestions # Support & Suggestions
If you have any questions, suggestions, or general issues, please start a discussion on the [Discussions](https://github.com/benphelps/homepage/discussions) page. 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/benphelps/homepage/issues) page. For bug reports, please open an issue on the [Issues](https://github.com/gethomepage/homepage/issues) page.
## Contributing & Contributers ## Contributing & Contributers

3
crowdin.yml Normal file
View File

@@ -0,0 +1,3 @@
files:
- source: /public/locales/en/*.json
translation: /public/locales/%osx_locale%/%original_file_name%

View File

@@ -13,20 +13,20 @@ By default, the description will use the hostname of the link, but you can overr
```yaml ```yaml
- Developer: - Developer:
- Github: - Github:
- abbr: GH - abbr: GH
href: https://github.com/ href: https://github.com/
- Social: - Social:
- Reddit: - Reddit:
- icon: reddit.png - icon: reddit.png
href: https://reddit.com/ href: https://reddit.com/
description: The front page of the internet description: The front page of the internet
- Entertainment: - Entertainment:
- YouTube: - YouTube:
- abbr: YT - abbr: YT
href: https://youtube.com/ href: https://youtube.com/
``` ```
<img width="1000" alt="Bookmarks" src="https://user-images.githubusercontent.com/19408/269307009-d7e45885-230f-4e07-b421-9822017ae878.png"> <img width="1000" alt="Bookmarks" src="https://user-images.githubusercontent.com/19408/269307009-d7e45885-230f-4e07-b421-9822017ae878.png">

View File

@@ -9,8 +9,8 @@ For IP:PORT, simply make sure your Docker instance [has been configured](https:/
```yaml ```yaml
my-remote-docker: my-remote-docker:
host: 192.168.0.101 host: 192.168.0.101
port: 2375 port: 2375
``` ```
## Using Docker TLS ## Using Docker TLS
@@ -19,12 +19,12 @@ Since Docker supports connecting with TLS and client certificate authentication,
```yaml ```yaml
my-remote-docker: my-remote-docker:
host: 192.168.0.101 host: 192.168.0.101
port: 275 port: 275
tls: tls:
keyFile: tls/key.pem keyFile: tls/key.pem
caFile: tls/ca.pem caFile: tls/ca.pem
certFile: tls/cert.pem certFile: tls/cert.pem
``` ```
## Using Docker Socket Proxy ## Using Docker Socket Proxy
@@ -35,35 +35,35 @@ Here is an example docker-compose file that will expose the docker socket, and t
```yaml ```yaml
dockerproxy: dockerproxy:
image: ghcr.io/tecnativa/docker-socket-proxy:latest image: ghcr.io/tecnativa/docker-socket-proxy:latest
container_name: dockerproxy container_name: dockerproxy
environment: environment:
- CONTAINERS=1 # Allow access to viewing containers - CONTAINERS=1 # Allow access to viewing containers
- SERVICES=1 # Allow access to viewing services (necessary when using Docker Swarm) - SERVICES=1 # Allow access to viewing services (necessary when using Docker Swarm)
- TASKS=1 # Allow access to viewing tasks (necessary when using Docker Swarm) - TASKS=1 # Allow access to viewing tasks (necessary when using Docker Swarm)
- POST=0 # Disallow any POST operations (effectively read-only) - POST=0 # Disallow any POST operations (effectively read-only)
ports: ports:
- 127.0.0.1:2375:2375 - 127.0.0.1:2375:2375
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # Mounted as read-only - /var/run/docker.sock:/var/run/docker.sock:ro # Mounted as read-only
restart: unless-stopped restart: unless-stopped
homepage: homepage:
image: ghcr.io/benphelps/homepage:latest image: ghcr.io/gethomepage/homepage:latest
container_name: homepage container_name: homepage
volumes: volumes:
- /path/to/config:/app/config - /path/to/config:/app/config
ports: ports:
- 3000:3000 - 3000:3000
restart: unless-stopped restart: unless-stopped
``` ```
Then, inside of your `docker.yaml` settings file, you'd configure the docker instance like so: Then, inside of your `docker.yaml` settings file, you'd configure the docker instance like so:
```yaml ```yaml
my-docker: my-docker:
host: dockerproxy host: dockerproxy
port: 2375 port: 2375
``` ```
## Using Socket Directly ## Using Socket Directly
@@ -76,14 +76,14 @@ If you'd rather use the socket directly, first make sure that you're passing the
```yaml ```yaml
homepage: homepage:
image: ghcr.io/benphelps/homepage:latest image: ghcr.io/gethomepage/homepage:latest
container_name: homepage container_name: homepage
volumes: volumes:
- /path/to/config:/app/config - /path/to/config:/app/config
- /var/run/docker.sock:/var/run/docker.sock # pass local proxy - /var/run/docker.sock:/var/run/docker.sock # pass local proxy
ports: ports:
- 3000:3000 - 3000:3000
restart: unless-stopped restart: unless-stopped
``` ```
If you're using `docker run`, this would be `-v /var/run/docker.sock:/var/run/docker.sock`. If you're using `docker run`, this would be `-v /var/run/docker.sock:/var/run/docker.sock`.
@@ -92,7 +92,7 @@ Then, inside of your `docker.yaml` settings file, you'd configure the docker ins
```yaml ```yaml
my-docker: my-docker:
socket: /var/run/docker.sock socket: /var/run/docker.sock
``` ```
## Services ## Services
@@ -118,18 +118,18 @@ Below is an example of the same service entry shown above, as docker labels.
```yaml ```yaml
services: services:
emby: emby:
image: lscr.io/linuxserver/emby:latest image: lscr.io/linuxserver/emby:latest
container_name: emby container_name: emby
ports: ports:
- 8096:8096 - 8096:8096
restart: unless-stopped restart: unless-stopped
labels: labels:
- homepage.group=Media - homepage.group=Media
- homepage.name=Emby - homepage.name=Emby
- homepage.icon=emby.png - homepage.icon=emby.png
- homepage.href=http://emby.home/ - homepage.href=http://emby.home/
- homepage.description=Media server - homepage.description=Media server
``` ```
When your Docker instance has been properly configured, this service will be automatically discovered and added to your Homepage. **You do not need to specify the `server` or `container` values, as they will be automatically inferred.** When your Docker instance has been properly configured, this service will be automatically discovered and added to your Homepage. **You do not need to specify the `server` or `container` values, as they will be automatically inferred.**
@@ -142,15 +142,32 @@ You may also configure widgets, along with the standard service entry, again, us
```yaml ```yaml
labels: labels:
- homepage.group=Media - homepage.group=Media
- homepage.name=Emby - homepage.name=Emby
- homepage.icon=emby.png - homepage.icon=emby.png
- homepage.href=http://emby.home/ - homepage.href=http://emby.home/
- homepage.description=Media server - homepage.description=Media server
- homepage.widget.type=emby - homepage.widget.type=emby
- homepage.widget.url=http://emby.home - homepage.widget.url=http://emby.home
- homepage.widget.key=yourembyapikeyhere - homepage.widget.key=yourembyapikeyhere
- homepage.widget.fields=["field1","field2"] # optional - homepage.widget.fields=["field1","field2"] # optional
```
You can add specify fields for e.g. the [CustomAPI](/widgets/services/customapi) widget by using array-style dot notation:
```yaml
labels:
- homepage.group=Media
- homepage.name=Emby
- homepage.icon=emby.png
- homepage.href=http://emby.home/
- homepage.description=Media server
- homepage.widget.type=customapi
- homepage.widget.url=http://argus.service/api/v1/service/summary/emby
- homepage.widget.field[0].label=Deployed Version
- homepage.widget.field[0].field.status=deployed_version
- homepage.widget.field[1].label=Latest Version
- homepage.widget.field[1].field.status=latest_version
``` ```
## Docker Swarm ## Docker Swarm
@@ -159,8 +176,8 @@ Docker swarm is supported and Docker services are specified with the same `serve
```yaml ```yaml
my-docker: my-docker:
socket: /var/run/docker.sock socket: /var/run/docker.sock
swarm: true swarm: true
``` ```
For the automatic service discovery to discover all services it is important that homepage should be deployed on a manager node. Set deploy requirements to the master node in your stack yaml config, e.g. For the automatic service discovery to discover all services it is important that homepage should be deployed on a manager node. Set deploy requirements to the master node in your stack yaml config, e.g.
@@ -188,9 +205,9 @@ In order to detect every service within the Docker swarm it is necessary that se
As of v0.6.4 discovered services can include an optional `weight` field to determine sorting such that: As of v0.6.4 discovered services can include an optional `weight` field to determine sorting such that:
- Default weight for discovered services is 0 - Default weight for discovered services is 0
- Default weight for configured services is their index within their group scaled by 100, i.e. (index + 1) \* 100 - Default weight for configured services is their index within their group scaled by 100, i.e. (index + 1) \* 100
- If two items have the same weight value, then they will be sorted by name - If two items have the same weight value, then they will be sorted by name
## Show stats ## Show stats

View File

@@ -5,15 +5,15 @@ description: Kubernetes Configuration
The Kubernetes connectivity has the following requirements: The Kubernetes connectivity has the following requirements:
- Kubernetes 1.19+ - Kubernetes 1.19+
- Metrics Service - Metrics Service
- An Ingress controller - An Ingress controller
The Kubernetes connection is configured in the `kubernetes.yaml` file. There are 3 modes to choose from: The Kubernetes connection is configured in the `kubernetes.yaml` file. There are 3 modes to choose from:
- **disabled** - disables kubernetes connectivity - **disabled** - disables kubernetes connectivity
- **default** - uses the default kubeconfig [resolution](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) - **default** - uses the default kubeconfig [resolution](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
- **cluster** - uses a service account inside the cluster - **cluster** - uses a service account inside the cluster
```yaml ```yaml
mode: default mode: default
@@ -36,29 +36,29 @@ 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`. 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 `podSelector` 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 `pod-selector` 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: For instance, it can be utilized to roll multiple underlying deployments under one application to see a high-level aggregate:
```yaml ```yaml
- Element Chat: - Element Chat:
icon: matrix-light.png icon: matrix-light.png
href: https://chat.example.com href: https://chat.example.com
description: Matrix Synapse Powered Chat description: Matrix Synapse Powered Chat
app: matrix-element app: matrix-element
namespace: comms namespace: comms
podSelector: >- pod-selector: >-
app.kubernetes.io/instance in ( app.kubernetes.io/instance in (
matrix-element, matrix-element,
matrix-media-repo, matrix-media-repo,
matrix-media-repo-postgresql, matrix-media-repo-postgresql,
matrix-synapse matrix-synapse
) )
``` ```
!!! note !!! note
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. 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.
## Automatic Service Discovery ## Automatic Service Discovery
@@ -68,29 +68,29 @@ Homepage features automatic service discovery by Ingress annotations. All config
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: emby name: emby
annotations: annotations:
gethomepage.dev/enabled: "true" gethomepage.dev/enabled: "true"
gethomepage.dev/description: Media Server gethomepage.dev/description: Media Server
gethomepage.dev/group: Media gethomepage.dev/group: Media
gethomepage.dev/icon: emby.png gethomepage.dev/icon: emby.png
gethomepage.dev/name: Emby gethomepage.dev/name: Emby
gethomepage.dev/widget.type: "emby" gethomepage.dev/widget.type: "emby"
gethomepage.dev/widget.url: "https://emby.example.com" gethomepage.dev/widget.url: "https://emby.example.com"
gethomepage.dev/podSelector: "" gethomepage.dev/pod-selector: ""
gethomepage.dev/weight: 10 # optional gethomepage.dev/weight: 10 # optional
spec: spec:
rules: rules:
- host: emby.example.com - host: emby.example.com
http: http:
paths: paths:
- backend: - backend:
service: service:
name: emby name: emby
port: port:
number: 8080 number: 8080
path: / path: /
pathType: Prefix pathType: Prefix
``` ```
When the Kubernetes cluster connection has been properly configured, this service will be automatically discovered and added to your Homepage. **You do not need to specify the `namespace` or `app` values, as they will be automatically inferred.** When the Kubernetes cluster connection has been properly configured, this service will be automatically discovered and added to your Homepage. **You do not need to specify the `namespace` or `app` values, as they will be automatically inferred.**
@@ -103,32 +103,33 @@ Homepage can also read ingresses defined using the Traefik IngressRoute custom r
apiVersion: traefik.io/v1alpha1 apiVersion: traefik.io/v1alpha1
kind: IngressRoute kind: IngressRoute
metadata: metadata:
name: emby name: emby
annotations: annotations:
gethomepage.dev/href: "https://emby.example.com" gethomepage.dev/href: "https://emby.example.com"
gethomepage.dev/enabled: "true" gethomepage.dev/enabled: "true"
gethomepage.dev/description: Media Server gethomepage.dev/description: Media Server
gethomepage.dev/group: Media gethomepage.dev/group: Media
gethomepage.dev/icon: emby.png gethomepage.dev/icon: emby.png
gethomepage.dev/name: Emby gethomepage.dev/app: emby-app # optional, may be needed if app.kubernetes.io/name != ingress metadata.name
gethomepage.dev/widget.type: "emby" gethomepage.dev/name: Emby
gethomepage.dev/widget.url: "https://emby.example.com" gethomepage.dev/widget.type: "emby"
gethomepage.dev/podSelector: "" gethomepage.dev/widget.url: "https://emby.example.com"
gethomepage.dev/weight: 10 # optional gethomepage.dev/pod-selector: ""
gethomepage.dev/weight: 10 # optional
spec: spec:
entryPoints: entryPoints:
- websecure - websecure
routes: routes:
- kind: Rule - kind: Rule
match: Host(`emby.example.com`) match: Host(`emby.example.com`)
services: services:
- kind: Service - kind: Service
name: emby name: emby
namespace: emby namespace: emby
port: 8080 port: 8080
scheme: http scheme: http
strategy: RoundRobin strategy: RoundRobin
weight: 10 weight: 10
``` ```
If the `href` attribute is not present, Homepage will ignore the specific IngressRoute. If the `href` attribute is not present, Homepage will ignore the specific IngressRoute.

View File

@@ -13,13 +13,13 @@ Using Emby as an example, this is how you would attach the Emby service widget.
```yaml ```yaml
- Emby: - Emby:
icon: emby.png icon: emby.png
href: http://emby.host.or.ip/ href: http://emby.host.or.ip/
description: Movies & TV Shows description: Movies & TV Shows
widget: widget:
type: emby type: emby
url: http://emby.host.or.ip url: http://emby.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```
## Field Visibility ## Field Visibility
@@ -30,11 +30,11 @@ Each widget can optionally provide a list of which fields should be visible via
```yaml ```yaml
- Sonarr: - Sonarr:
icon: sonarr.png icon: sonarr.png
href: http://sonarr.host.or.ip href: http://sonarr.host.or.ip
widget: widget:
type: sonarr type: sonarr
fields: ["wanted", "queued"] fields: ["wanted", "queued"]
url: http://sonarr.host.or.ip url: http://sonarr.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -121,7 +121,7 @@ Services may have an optional `ping` property that allows you to monitor the ava
ping: http://some.other.host/ ping: http://some.other.host/
``` ```
<img width="1038" alt="Ping" src="https://github.com/benphelps/homepage/assets/88257202/7bc13bd3-0d0b-44e3-888c-a20e069a3233"> <img width="1038" alt="Ping" src="https://github.com/gethomepage/homepage/assets/88257202/7bc13bd3-0d0b-44e3-888c-a20e069a3233">
You can also apply different styles to the ping indicator by using the `statusStyle` property, see [settings](settings.md#status-style). You can also apply different styles to the ping indicator by using the `statusStyle` property, see [settings](settings.md#status-style).
@@ -145,7 +145,7 @@ Services may be connected to a Docker container, either running on the local mac
container: other-container container: other-container
``` ```
<img width="1038" alt="Service Containers" src="https://github.com/benphelps/homepage/assets/88257202/4c685783-52c6-4e55-afb3-affe9baac09b"> <img width="1038" alt="Service Containers" src="https://github.com/gethomepage/homepage/assets/88257202/4c685783-52c6-4e55-afb3-affe9baac09b">
**Clicking on the status label of a service with Docker integration enabled will expand the container stats, where you can see CPU, Memory, and Network activity.** **Clicking on the status label of a service with Docker integration enabled will expand the container stats, where you can see CPU, Memory, and Network activity.**
@@ -153,7 +153,7 @@ Services may be connected to a Docker container, either running on the local mac
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-docker-stats) for more information
<img width="1038" alt="Docker Stats Expanded" src="https://github.com/benphelps/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec"> <img width="1038" alt="Docker Stats Expanded" src="https://github.com/gethomepage/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec">
## Service Integrations ## Service Integrations

View File

@@ -391,7 +391,7 @@ You can choose from the following styles for docker or k8s status and ping: `dot
For example: For example:
```yaml ```yaml
statusStyle: 'dot' statusStyle: "dot"
``` ```
or per-service (`services.yaml`) with: or per-service (`services.yaml`) with:

View File

@@ -8,14 +8,14 @@ Using docker compose:
```yaml ```yaml
version: "3.3" version: "3.3"
services: services:
homepage: homepage:
image: ghcr.io/benphelps/homepage:latest image: ghcr.io/gethomepage/homepage:latest
container_name: homepage container_name: homepage
ports: ports:
- 3000:3000 - 3000:3000
volumes: volumes:
- /path/to/config:/app/config # Make sure your local config directory exists - /path/to/config:/app/config # Make sure your local config directory exists
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations
``` ```
### Running as non-root ### Running as non-root
@@ -29,29 +29,29 @@ In the docker compose example below, the environment variables `$PUID` and `$PGI
```yaml ```yaml
version: "3.3" version: "3.3"
services: services:
homepage: homepage:
image: ghcr.io/benphelps/homepage:latest image: ghcr.io/gethomepage/homepage:latest
container_name: homepage container_name: homepage
ports: ports:
- 3000:3000 - 3000:3000
volumes: volumes:
- /path/to/config:/app/config # Make sure your local config directory exists - /path/to/config:/app/config # Make sure your local config directory exists
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations, see alternative methods - /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations, see alternative methods
environment: environment:
PUID: $PUID PUID: $PUID
PGID: $PGID PGID: $PGID
``` ```
### With Docker Run ### With Docker Run
```bash ```bash
docker run -p 3000:3000 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/benphelps/homepage:latest docker run -p 3000:3000 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest
``` ```
### Using Environment Secrets ### Using Environment Secrets
You can also include environment variables in your config files to protect sensitive information. Note: You can also include environment variables in your config files to protect sensitive information. Note:
- Environment variables must start with `HOMEPAGE_VAR_` or `HOMEPAGE_FILE_` - Environment variables must start with `HOMEPAGE_VAR_` or `HOMEPAGE_FILE_`
- The value of env var `HOMEPAGE_VAR_XXX` will replace `{{HOMEPAGE_VAR_XXX}}` in any config - The value of env var `HOMEPAGE_VAR_XXX` will replace `{{HOMEPAGE_VAR_XXX}}` in any config
- The value of env var `HOMEPAGE_FILE_XXX` must be a file path, the contents of which will be used to replace `{{HOMEPAGE_FILE_XXX}}` in any config - The value of env var `HOMEPAGE_FILE_XXX` must be a file path, the contents of which will be used to replace `{{HOMEPAGE_FILE_XXX}}` in any config

View File

@@ -16,70 +16,70 @@ The helm chart allows for all the configurations to be inlined directly in your
```yaml ```yaml
config: config:
bookmarks: bookmarks:
- Developer: - Developer:
- Github: - Github:
- abbr: GH - abbr: GH
href: https://github.com/ href: https://github.com/
services: services:
- My First Group: - My First Group:
- My First Service: - My First Service:
href: http://localhost/ href: http://localhost/
description: Homepage is awesome description: Homepage is awesome
- My Second Group: - My Second Group:
- My Second Service: - My Second Service:
href: http://localhost/ href: http://localhost/
description: Homepage is the best description: Homepage is the best
- My Third Group: - My Third Group:
- My Third Service: - My Third Service:
href: http://localhost/ href: http://localhost/
description: Homepage is 😎 description: Homepage is 😎
widgets: widgets:
# show the kubernetes widget, with the cluster summary and individual nodes # show the kubernetes widget, with the cluster summary and individual nodes
- kubernetes: - kubernetes:
cluster: cluster:
show: true show: true
cpu: true cpu: true
memory: true memory: true
showLabel: true showLabel: true
label: "cluster" label: "cluster"
nodes: nodes:
show: true show: true
cpu: true cpu: true
memory: true memory: true
showLabel: true showLabel: true
- search: - search:
provider: duckduckgo provider: duckduckgo
target: _blank target: _blank
kubernetes: kubernetes:
mode: cluster mode: cluster
settings: settings:
# The service account is necessary to allow discovery of other services # The service account is necessary to allow discovery of other services
serviceAccount: serviceAccount:
create: true create: true
name: homepage name: homepage
# This enables the service account to access the necessary resources # This enables the service account to access the necessary resources
enableRbac: true enableRbac: true
ingress: ingress:
main: main:
enabled: true enabled: true
annotations: annotations:
# Example annotations to add Homepage to your Homepage! # Example annotations to add Homepage to your Homepage!
gethomepage.dev/enabled: "true" gethomepage.dev/enabled: "true"
gethomepage.dev/name: "Homepage" gethomepage.dev/name: "Homepage"
gethomepage.dev/description: "Dynamically Detected Homepage" gethomepage.dev/description: "Dynamically Detected Homepage"
gethomepage.dev/group: "Dynamic" gethomepage.dev/group: "Dynamic"
gethomepage.dev/icon: "homepage.png" gethomepage.dev/icon: "homepage.png"
hosts: hosts:
- host: homepage.example.com - host: homepage.example.com
paths: paths:
- path: / - path: /
pathType: Prefix pathType: Prefix
``` ```
## Install with Kubernetes Manifests ## Install with Kubernetes Manifests
@@ -94,12 +94,12 @@ Here's a working example of the resources you need:
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
metadata: metadata:
name: homepage name: homepage
namespace: default namespace: default
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
secrets: secrets:
- name: homepage - name: homepage
``` ```
#### Secret #### Secret
@@ -109,12 +109,12 @@ apiVersion: v1
kind: Secret kind: Secret
type: kubernetes.io/service-account-token type: kubernetes.io/service-account-token
metadata: metadata:
name: homepage name: homepage
namespace: default namespace: default
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
annotations: annotations:
kubernetes.io/service-account.name: homepage kubernetes.io/service-account.name: homepage
``` ```
#### ConfigMap #### ConfigMap
@@ -123,62 +123,62 @@ metadata:
apiVersion: v1 apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: homepage name: homepage
namespace: default namespace: default
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
data: data:
kubernetes.yaml: | kubernetes.yaml: |
mode: cluster mode: cluster
settings.yaml: "" settings.yaml: ""
#settings.yaml: | #settings.yaml: |
# providers: # providers:
# longhorn: # longhorn:
# url: https://longhorn.my.network # url: https://longhorn.my.network
custom.css: "" custom.css: ""
custom.js: "" custom.js: ""
bookmarks.yaml: | bookmarks.yaml: |
- Developer: - Developer:
- Github: - Github:
- abbr: GH - abbr: GH
href: https://github.com/ href: https://github.com/
services.yaml: | services.yaml: |
- My First Group: - My First Group:
- My First Service: - My First Service:
href: http://localhost/ href: http://localhost/
description: Homepage is awesome description: Homepage is awesome
- My Second Group: - My Second Group:
- My Second Service: - My Second Service:
href: http://localhost/ href: http://localhost/
description: Homepage is the best description: Homepage is the best
- My Third Group: - My Third Group:
- My Third Service: - My Third Service:
href: http://localhost/ href: http://localhost/
description: Homepage is 😎 description: Homepage is 😎
widgets.yaml: | widgets.yaml: |
- kubernetes: - kubernetes:
cluster: cluster:
show: true show: true
cpu: true cpu: true
memory: true memory: true
showLabel: true showLabel: true
label: "cluster" label: "cluster"
nodes: nodes:
show: true show: true
cpu: true cpu: true
memory: true memory: true
showLabel: true showLabel: true
- resources: - resources:
backend: resources backend: resources
expanded: true expanded: true
cpu: true cpu: true
memory: true memory: true
- search: - search:
provider: duckduckgo provider: duckduckgo
target: _blank target: _blank
docker.yaml: "" docker.yaml: ""
``` ```
#### ClusterRole and ClusterRoleBinding #### ClusterRole and ClusterRoleBinding
@@ -187,57 +187,57 @@ data:
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole kind: ClusterRole
metadata: metadata:
name: homepage name: homepage
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
rules: rules:
- apiGroups: - apiGroups:
- "" - ""
resources: resources:
- namespaces - namespaces
- pods - pods
- nodes - nodes
verbs: verbs:
- get - get
- list - list
- apiGroups: - apiGroups:
- extensions - extensions
- networking.k8s.io - networking.k8s.io
resources: resources:
- ingresses - ingresses
verbs: verbs:
- get - get
- list - list
- apiGroups: - apiGroups:
- traefik.containo.us - traefik.containo.us
resources: resources:
- ingressroutes - ingressroutes
verbs: verbs:
- get - get
- list - list
- apiGroups: - apiGroups:
- metrics.k8s.io - metrics.k8s.io
resources: resources:
- nodes - nodes
- pods - pods
verbs: verbs:
- get - get
- list - list
--- ---
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding kind: ClusterRoleBinding
metadata: metadata:
name: homepage name: homepage
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
roleRef: roleRef:
apiGroup: rbac.authorization.k8s.io apiGroup: rbac.authorization.k8s.io
kind: ClusterRole kind: ClusterRole
name: homepage name: homepage
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: homepage name: homepage
namespace: default namespace: default
``` ```
#### Service #### Service
@@ -246,20 +246,20 @@ subjects:
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: homepage name: homepage
namespace: default namespace: default
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
annotations: annotations:
spec: spec:
type: ClusterIP type: ClusterIP
ports: ports:
- port: 3000 - port: 3000
targetPort: http targetPort: http
protocol: TCP protocol: TCP
name: http name: http
selector: selector:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
``` ```
#### Deployment #### Deployment
@@ -268,46 +268,68 @@ spec:
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: homepage name: homepage
namespace: default namespace: default
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
spec: spec:
revisionHistoryLimit: 3 revisionHistoryLimit: 3
replicas: 1 replicas: 1
strategy: strategy:
type: RollingUpdate type: RollingUpdate
selector: selector:
matchLabels: matchLabels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
template: template:
metadata: metadata:
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
spec: spec:
serviceAccountName: homepage serviceAccountName: homepage
automountServiceAccountToken: true automountServiceAccountToken: true
dnsPolicy: ClusterFirst dnsPolicy: ClusterFirst
enableServiceLinks: true enableServiceLinks: true
containers: containers:
- name: homepage - name: homepage
image: "ghcr.io/benphelps/homepage:latest" image: "ghcr.io/gethomepage/homepage:latest"
imagePullPolicy: Always imagePullPolicy: Always
ports: ports:
- name: http - name: http
containerPort: 3000 containerPort: 3000
protocol: TCP protocol: TCP
volumeMounts: volumeMounts:
- name: homepage-config - mountPath: /app/config/custom.js
mountPath: /app/config name: homepage-config
- name: logs subPath: custom.js
mountPath: /app/config/logs - mountPath: /app/config/custom.css
volumes: name: homepage-config
- name: homepage-config subPath: custom.css
configMap: - mountPath: /app/config/bookmarks.yaml
name: homepage name: homepage-config
- name: logs subPath: bookmarks.yaml
emptyDir: {} - mountPath: /app/config/docker.yaml
name: homepage-config
subPath: docker.yaml
- mountPath: /app/config/kubernetes.yaml
name: homepage-config
subPath: kubernetes.yaml
- mountPath: /app/config/services.yaml
name: homepage-config
subPath: services.yaml
- mountPath: /app/config/settings.yaml
name: homepage-config
subPath: settings.yaml
- mountPath: /app/config/widgets.yaml
name: homepage-config
subPath: widgets.yaml
- mountPath: /app/config/logs
name: logs
volumes:
- name: homepage-config
configMap:
name: homepage
- name: logs
emptyDir: {}
``` ```
#### Ingress #### Ingress
@@ -316,26 +338,26 @@ spec:
apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
kind: Ingress kind: Ingress
metadata: metadata:
name: homepage name: homepage
namespace: default namespace: default
labels: labels:
app.kubernetes.io/name: homepage app.kubernetes.io/name: homepage
annotations: annotations:
gethomepage.dev/description: Dynamically Detected Homepage gethomepage.dev/description: Dynamically Detected Homepage
gethomepage.dev/enabled: "true" gethomepage.dev/enabled: "true"
gethomepage.dev/group: Cluster Management gethomepage.dev/group: Cluster Management
gethomepage.dev/icon: homepage.png gethomepage.dev/icon: homepage.png
gethomepage.dev/name: Homepage gethomepage.dev/name: Homepage
spec: spec:
rules: rules:
- host: "homepage.my.network" - host: "homepage.my.network"
http: http:
paths: paths:
- path: "/" - path: "/"
pathType: Prefix pathType: Prefix
backend: backend:
service: service:
name: homepage name: homepage
port: port:
number: 3000 number: 3000
``` ```

View File

@@ -6,7 +6,7 @@ description: Install and run homepage from source
First, clone the repository: First, clone the repository:
```bash ```bash
git clone https://github.com/benphelps/homepage.git git clone https://github.com/gethomepage/homepage.git
``` ```
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like): Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):

View File

@@ -7,39 +7,39 @@ Homepage has an UNRAID community package that you may use to install homepage. T
## Install the Plugin ## Install the Plugin
- In the UNRAID webGUI, go to the **Apps** tab. - In the UNRAID webGUI, go to the **Apps** tab.
- In the search bar, search for `homepage`. - In the search bar, search for `homepage`.
- Click on **Install**. - Click on **Install**.
- Change the parameters to your liking. - Change the parameters to your liking.
- Click on **APPLY**. - Click on **APPLY**.
## Run the Container ## Run the Container
- While the container is running, open the WebUI. - While the container is running, open the WebUI.
- Opening the page will generate the configuration files. - Opening the page will generate the configuration files.
You may need to set the permissions of the folders to be able to edit the files. You may need to set the permissions of the folders to be able to edit the files.
- Click on the Homepage icon. - Click on the Homepage icon.
- Click on **Console**. - Click on **Console**.
- Enter `chmod -R u-x,go-rwx,go+u,ugo+X /app/config` and press **Enter**. - Enter `chmod -R u-x,go-rwx,go+u,ugo+X /app/config` and press **Enter**.
- Enter `chmod -R u-x,go-rwx,go+u,ugo+X /app/public/icons` and press **Enter**. - Enter `chmod -R u-x,go-rwx,go+u,ugo+X /app/public/icons` and press **Enter**.
- Enter `chown -R nobody:users /app/config` and press **Enter**. - Enter `chown -R nobody:users /app/config` and press **Enter**.
- Enter `chown -R nobody:users /app/public/icons` and press **Enter**. - Enter `chown -R nobody:users /app/public/icons` and press **Enter**.
## Some Other Notes ## Some Other Notes
- To use the [Docker integration](../configs/docker.md), you only need to use the `container:` parameter. There is no need to set the server. - To use the [Docker integration](../configs/docker.md), you only need to use the `container:` parameter. There is no need to set the server.
!!! note !!! note
To view detailed container statistics (CPU, RAM, etc.), or if you use a remote docker socket, `container:` will still need to be set. For example: To view detailed container statistics (CPU, RAM, etc.), or if you use a remote docker socket, `container:` will still need to be set. For example:
``` ```
- Plex: - Plex:
icon: /icons/plex.png icon: /icons/plex.png
href: https://app.plex.com href: https://app.plex.com
container: plex container: plex
``` ```
- When you upload a new image into the **/images** folder, you will need to restart the container for it to show up in the WebUI. Please see the [service icons](../configs/services.md#icons) for more information. - When you upload a new image into the **/images** folder, you will need to restart the container for it to show up in the WebUI. Please see the [service icons](../configs/services.md#icons) for more information.

View File

@@ -31,12 +31,21 @@ Once dependencies have been installed you can lint your code with
pnpm lint pnpm lint
``` ```
## Code formatting with pre-commit hooks
To ensure a consistent style and formatting across the project source, the project utilizes Git [`pre-commit`](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) hooks to perform some formatting and linting before a commit is allowed.
That way, everyone uses the same style and some common issues can be caught early on.
Once installed, hooks will run when you commit. If the formatting isn't quite right or a linter catches something, the commit will be rejected.
You'll need to look at the output and fix the issue. Some hooks will format failing files, so all you need to do is `git add` those files again
and retry your commit.
## Service Widget Guidelines ## Service Widget Guidelines
To ensure cohesiveness of various widgets, the following should be used as a guide for developing new widgets: To ensure cohesiveness of various widgets, the following should be used as a guide for developing new widgets:
- Please only submit widgets that have been requested and have at least 5 'up-votes' - Please only submit widgets that have been requested and have at least 5 'up-votes'
- Widgets should be only one row of blocks - Widgets should be only one row of blocks
- Widgets should be no more than 4 blocks wide - Widgets should be no more than 4 blocks wide
- Minimize the number of API calls - Minimize the number of API calls
- Avoid the use of custom proxy unless absolutely necessary - Avoid the use of custom proxy unless absolutely necessary

View File

@@ -3,6 +3,6 @@ title: Homepage Move
description: Homepage Container Deprecation description: Homepage Container Deprecation
--- ---
As of v0.7.1 homepage migrated from benphelps/homepage to an "orgnization" located at gethomepage/homepage. The reason for this is to setup the project for longevity and allow for community maintenance. As of v0.7.2 homepage migrated from benphelps/homepage to an "organization" repository located at [gethomepage/homepage](https://github.com/gethomepage/homepage/). The reason for this was to setup the project for longevity and allow for community maintenance.
Migrating your installation should be as simple as changing `image: ghcr.io/benphelps/homepage:latest` to `image: ghcr.io/gethomepage/homepage:latest`. Migrating your installation should be as simple as changing `image: ghcr.io/benphelps/homepage:latest` to `image: ghcr.io/gethomepage/homepage:latest`.

View File

@@ -3,12 +3,17 @@ title: Translations
description: Contributing Translations description: Contributing Translations
--- ---
Homepage is developed in English, most other supported languages are provided via Google Translate. When a i18n key is not found, the fallback language is English. Homepage is developed in English, component contributions must be in English. All translations are community provided, so a huge thanks go out to all those who have helped out so far!
## Support Translations ## Support Translations
If you'd like to lend a hand in translating Homepage into more languages, or to improve existing translations, the process is very simple. If you'd like to lend a hand in translating Homepage into more languages, or to improve existing translations, the process is very simple:
Everything can be done from a simple to use web interface here: https://hosted.weblate.org/projects/homepage/homepage/ 1. Create a free account at [Crowdin](https://crowdin.com/join)
2. Visit the [Homepage project](https://crowdin.com/project/gethomepage)
3. Select the language you'd like to translate
4. Start translating!
When creating a new language, it can take 5 to 10 minutes before you'll see translatable strings added, but the process _is_ automatic. Once the strings are added, you can then start translating them. ## Adding a new language
If you'd like to add a new language, please [create a new Discussion on Crowdin](https://crowdin.com/project/gethomepage/discussions), and we'll add it to the project.

View File

@@ -17,47 +17,49 @@ hide:
All service widgets work essentially the same, that is, homepage makes a proxied call to an API made available by that service. The majority of the time widgets don't work it is a configuration issue. Of course, sometimes things do break. Some basic steps to try: All service widgets work essentially the same, that is, homepage makes a proxied call to an API made available by that service. The majority of the time widgets don't work it is a configuration issue. Of course, sometimes things do break. Some basic steps to try:
1. Ensure that you follow the rule mentioned on https://gethomepage.dev/latest/configs/service-widgets/. **Unless otherwise noted, URLs should not end with a / or other API path. Each widget will handle the path on its own.**. This is very important as including a trailing slash can result in an error. 1. Ensure that you follow the rule mentioned on https://gethomepage.dev/latest/configs/service-widgets/. **Unless otherwise noted, URLs should not end with a / or other API path. Each widget will handle the path on its own.**. This is very important as including a trailing slash can result in an error.
2. Verify the homepage installation can connect to the IP address or host you are using for the widget `url`. This is most simply achieved by pinging the server from the homepage machine, in Docker this means _from inside the container_ itself, e.g.: 2. Verify the homepage installation can connect to the IP address or host you are using for the widget `url`. This is most simply achieved by pinging the server from the homepage machine, in Docker this means _from inside the container_ itself, e.g.:
``` ```
docker exec homepage ping SERVICEIPORDOMAIN docker exec homepage ping SERVICEIPORDOMAIN
``` ```
If your homepage install (container) cannot reach the service then you need to figure out why, for example in Docker this can mean putting the two containers on the same network, checking firewall issues, etc. If your homepage install (container) cannot reach the service then you need to figure out why, for example in Docker this can mean putting the two containers on the same network, checking firewall issues, etc.
3. If you have verified that homepage can in fact reach the service then you can also check the API output using e.g. `curl`, which is often helpful if you do need to file a bug report. Again, depending on your networking setup this may need to be run from _inside the container_ as IP / hostname resolution can differ inside vs outside. 3. If you have verified that homepage can in fact reach the service then you can also check the API output using e.g. `curl`, which is often helpful if you do need to file a bug report. Again, depending on your networking setup this may need to be run from _inside the container_ as IP / hostname resolution can differ inside vs outside.
_Note: `curl` is not installed in the base image by default but can be added inside the container with `apk add curl`._ !!! note
The exact API endpoints and authentication vary of course, but in many cases instructions can be found by searching the web or if you feel comfortable looking at the homepage source code (e.g. `src/widgets/{widget}/widget.js`). `curl` is not installed in the base image by default but can be added inside the container with `apk add curl`.
It is out of the scope of this to go into full detail about how to , but an example for PiHole would be: The exact API endpoints and authentication vary of course, but in many cases instructions can be found by searching the web or if you feel comfortable looking at the homepage source code (e.g. `src/widgets/{widget}/widget.js`).
``` It is out of the scope of this to go into full detail about how to , but an example for PiHole would be:
curl -L -k http://PIHOLEIPORHOST/admin/api.php
```
Or for AdGuard: ```
curl -L -k http://PIHOLEIPORHOST/admin/api.php
```
``` Or for AdGuard:
curl -L -k -u 'username:password' http://ADGUARDIPORHOST/control/stats
```
Or for Portainer: ```
curl -L -k -u 'username:password' http://ADGUARDIPORHOST/control/stats
```
``` Or for Portainer:
curl -L -k -H 'X-Api-Key:YOURKEY' 'https://PORTAINERIPORHOST:PORT/api/endpoints/2/docker/containers/json'
```
Sonarr: ```
curl -L -k -H 'X-Api-Key:YOURKEY' 'https://PORTAINERIPORHOST:PORT/api/endpoints/2/docker/containers/json'
```
``` Sonarr:
curl -L -k 'http://SONARRIPORHOST:PORT/api/v3/queue?apikey=YOURAPIKEY'
```
This will return some data which may reveal an issue causing a true bug in the service widget. ```
curl -L -k 'http://SONARRIPORHOST:PORT/api/v3/queue?apikey=YOURAPIKEY'
```
This will return some data which may reveal an issue causing a true bug in the service widget.
## Missing custom icons ## Missing custom icons

View File

@@ -17,4 +17,4 @@
color: var(--md-default-bg-color--lighter); color: var(--md-default-bg-color--lighter);
border-color: var(--md-default-bg-color--lighter); border-color: var(--md-default-bg-color--lighter);
} }
} }

View File

@@ -9,9 +9,9 @@ Formatting is locale aware and will present your date in the regional format you
```yaml ```yaml
- datetime: - datetime:
text_size: xl text_size: xl
format: format:
timeStyle: short timeStyle: short
``` ```
Any options passed to `format` are passed directly to [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat), please reference the MDN documentation for all available options. Any options passed to `format` are passed directly to [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat), please reference the MDN documentation for all available options.
@@ -23,29 +23,29 @@ A few examples,
```yaml ```yaml
# 13:37 # 13:37
format: format:
timeStyle: short timeStyle: short
hourCycle: h23 hourCycle: h23
``` ```
```yaml ```yaml
# 1:37 PM # 1:37 PM
format: format:
timeStyle: short timeStyle: short
hour12: true hour12: true
``` ```
```yaml ```yaml
# 1/23/22, 1:37 PM # 1/23/22, 1:37 PM
format: format:
dateStyle: short dateStyle: short
timeStyle: short timeStyle: short
hour12: true hour12: true
``` ```
```yaml ```yaml
# 4 januari 2023 om 13:51:25 PST # 4 januari 2023 om 13:51:25 PST
locale: nl locale: nl
format: format:
dateStyle: long dateStyle: long
timeStyle: long timeStyle: long
``` ```

View File

@@ -9,16 +9,16 @@ The Glances widget allows you to monitor the resources (CPU, memory, storage, te
```yaml ```yaml
- glances: - glances:
url: http://host.or.ip:port url: http://host.or.ip:port
username: user # optional if auth enabled in Glances username: user # optional if auth enabled in Glances
password: pass # optional if auth enabled in Glances password: pass # optional if auth enabled in Glances
cpu: true # optional, enabled by default, disable by setting to false cpu: true # optional, enabled by default, disable by setting to false
mem: true # optional, enabled by default, disable by setting to false mem: true # optional, enabled by default, disable by setting to false
cputemp: true # disabled by default cputemp: true # disabled by default
uptime: true # disabled by default uptime: true # disabled by default
disk: / # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below) disk: / # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)
expanded: true # show the expanded view expanded: true # show the expanded view
label: MyMachine # optional label: MyMachine # optional
``` ```
Multiple disks can be specified as: Multiple disks can be specified as:

View File

@@ -7,8 +7,8 @@ This allows you to display simple text, can be configured like so:
```yaml ```yaml
- greeting: - greeting:
text_size: xl text_size: xl
text: Greeting Text text: Greeting Text
``` ```
Valid text sizes are `4xl`, `3xl`, `2xl`, `xl`, `md`, `sm`, `xs`. Valid text sizes are `4xl`, `3xl`, `2xl`, `xl`, `md`, `sm`, `xs`.

View File

@@ -9,23 +9,23 @@ It provides CPU and Memory usage, by node and/or at the cluster level.
```yaml ```yaml
- kubernetes: - kubernetes:
cluster: cluster:
# Shows cluster-wide statistics # Shows cluster-wide statistics
show: true show: true
# Shows the aggregate CPU stats # Shows the aggregate CPU stats
cpu: true cpu: true
# Shows the aggregate memory stats # Shows the aggregate memory stats
memory: true memory: true
# Shows a custom label # Shows a custom label
showLabel: true showLabel: true
label: "cluster" label: "cluster"
nodes: nodes:
# Shows node-specific statistics # Shows node-specific statistics
show: true show: true
# Shows the CPU for each node # Shows the CPU for each node
cpu: true cpu: true
# Shows the memory for each node # Shows the memory for each node
memory: true memory: true
# Shows the label, which is always the node name # Shows the label, which is always the node name
showLabel: true showLabel: true
``` ```

View File

@@ -12,18 +12,18 @@ It can show the aggregate metrics and/or the individual node metrics.
```yaml ```yaml
- longhorn: - longhorn:
# Show the expanded view # Show the expanded view
expanded: true expanded: true
# Shows a node representing the aggregate values # Shows a node representing the aggregate values
total: true total: true
# Shows the node names as labels # Shows the node names as labels
labels: true labels: true
# Show the nodes # Show the nodes
nodes: true nodes: true
# An explicit list of nodes to show. All are shown by default if "nodes" is true # An explicit list of nodes to show. All are shown by default if "nodes" is true
include: include:
- node1 - node1
- node2 - node2
``` ```
The Longhorn URL and credentials are stored in the `providers` section of the `settings.yaml`. The Longhorn URL and credentials are stored in the `providers` section of the `settings.yaml`.

View File

@@ -7,12 +7,12 @@ No registration is required at all! See [https://open-meteo.com/en/docs](https:/
```yaml ```yaml
- openmeteo: - openmeteo:
label: Kyiv # optional label: Kyiv # optional
latitude: 50.449684 latitude: 50.449684
longitude: 30.525026 longitude: 30.525026
timezone: Europe/Kiev # optional timezone: Europe/Kiev # optional
units: metric # or imperial units: metric # or imperial
cache: 5 # Time in minutes to cache API responses, to stay within limits cache: 5 # Time in minutes to cache API responses, to stay within limits
``` ```
You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS).

View File

@@ -7,13 +7,13 @@ The free tier "One Call API" is all thats required, you will need to [subscribe]
```yaml ```yaml
- openweathermap: - openweathermap:
label: Kyiv #optional label: Kyiv #optional
latitude: 50.449684 latitude: 50.449684
longitude: 30.525026 longitude: 30.525026
units: metric # or imperial units: metric # or imperial
provider: openweathermap provider: openweathermap
apiKey: youropenweathermapkey # required only if not using provider, this reveals api key in requests apiKey: youropenweathermapkey # required only if not using provider, this reveals api key in requests
cache: 5 # Time in minutes to cache API responses, to stay within limits cache: 5 # Time in minutes to cache API responses, to stay within limits
``` ```
You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS).

View File

@@ -15,26 +15,26 @@ _Note: unfortunately, the package used for getting CPU temp ([systeminformation]
```yaml ```yaml
- resources: - resources:
cpu: true cpu: true
memory: true memory: true
disk: /disk/mount/path disk: /disk/mount/path
cputemp: true cputemp: true
uptime: true uptime: true
units: imperial # only used by cpu temp units: imperial # only used by cpu temp
refresh: 3000 # optional, in ms refresh: 3000 # optional, in ms
``` ```
You can also pass a `label` option, which allows you to group resources under named sections, You can also pass a `label` option, which allows you to group resources under named sections,
```yaml ```yaml
- resources: - resources:
label: System label: System
cpu: true cpu: true
memory: true memory: true
- resources: - resources:
label: Storage label: Storage
disk: /mnt/storage disk: /mnt/storage
``` ```
Which produces something like this, Which produces something like this,
@@ -45,11 +45,11 @@ If you have more than a single disk and would like to group them together under
```yaml ```yaml
- resources: - resources:
label: Storage label: Storage
disk: disk:
- /mnt/storage - /mnt/storage
- /mnt/backup - /mnt/backup
- /mnt/media - /mnt/media
``` ```
To produce something like this, To produce something like this,
@@ -60,12 +60,12 @@ You can additionally supply an optional `expanded` property set to true in order
```yaml ```yaml
- resources: - resources:
label: Array Disks label: Array Disks
expanded: true expanded: true
disk: disk:
- /disk1 - /disk1
- /disk2 - /disk2
- /disk3 - /disk3
``` ```
![194136533-c4238c82-4d67-41a4-b3c8-18bf26d33ac2](https://user-images.githubusercontent.com/3441425/194728642-a9885274-922b-4027-acf5-a746f58fdfce.png) ![194136533-c4238c82-4d67-41a4-b3c8-18bf26d33ac2](https://user-images.githubusercontent.com/3441425/194728642-a9885274-922b-4027-acf5-a746f58fdfce.png)

View File

@@ -7,25 +7,25 @@ You can add a search bar to your top widget area that can search using Google, D
```yaml ```yaml
- search: - search:
provider: google # google, duckduckgo, bing, baidu, brave or custom provider: google # google, duckduckgo, bing, baidu, brave or custom
focus: true # Optional, will set focus to the search bar on page load focus: true # Optional, will set focus to the search bar on page load
target: _blank # One of _self, _blank, _parent or _top target: _blank # One of _self, _blank, _parent or _top
``` ```
or for a custom search: or for a custom search:
```yaml ```yaml
- search: - search:
provider: custom provider: custom
url: https://lougle.com/?q= url: https://lougle.com/?q=
target: _blank target: _blank
``` ```
multiple providers is also supported via a dropdown (excluding custom): multiple providers is also supported via a dropdown (excluding custom):
```yaml ```yaml
- search: - search:
provider: [brave, google, duckduckgo] provider: [brave, google, duckduckgo]
``` ```
_Added in v0.1.6, updated in 0.6.0_ _Added in v0.1.6, updated in 0.6.0_

View File

@@ -9,12 +9,12 @@ The free tier is all thats required, you will need to [register](https://www.wea
```yaml ```yaml
- weatherapi: - weatherapi:
label: Kyiv # optional label: Kyiv # optional
latitude: 50.449684 latitude: 50.449684
longitude: 30.525026 longitude: 30.525026
units: metric # or imperial units: metric # or imperial
apiKey: yourweatherapikey apiKey: yourweatherapikey
cache: 5 # Time in minutes to cache API responses, to stay within limits cache: 5 # Time in minutes to cache API responses, to stay within limits
``` ```
You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS).

View File

@@ -9,8 +9,8 @@ Allowed fields: `["queries", "blocked", "filtered", "latency"]`.
```yaml ```yaml
widget: widget:
type: adguard type: adguard
url: http://adguard.host.or.ip url: http://adguard.host.or.ip
username: admin username: admin
password: password password: password
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["series", "archives", "chapters", "categories"]`.
```yaml ```yaml
widget: widget:
type: atsumeru type: atsumeru
url: http://atsumeru.host.or.ip:port url: http://atsumeru.host.or.ip:port
username: username username: username
password: password password: password
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["podcasts", "podcastsDuration", "books", "booksDuration"]`
```yaml ```yaml
widget: widget:
type: audiobookshelf type: audiobookshelf
url: http://audiobookshelf.host.or.ip:port url: http://audiobookshelf.host.or.ip:port
key: audiobookshelflapikey key: audiobookshelflapikey
``` ```

View File

@@ -18,7 +18,7 @@ Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`.
```yaml ```yaml
widget: widget:
type: authentik type: authentik
url: http://authentik.host.or.ip:22070 url: http://authentik.host.or.ip:22070
key: api_token key: api_token
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["approvedPushes", "rejectedPushes", "filters", "indexers"]`.
```yaml ```yaml
widget: widget:
type: autobrr type: autobrr
url: http://autobrr.host.or.ip url: http://autobrr.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -15,12 +15,12 @@ You will need to generate a personal access token for an existing user, see the
```yaml ```yaml
widget: widget:
type: azuredevops type: azuredevops
organization: myOrganization organization: myOrganization
project: myProject project: myProject
definitionId: pipelineDefinitionId # required for pipelines definitionId: pipelineDefinitionId # required for pipelines
branchName: branchName # optional for pipelines, leave empty for all branchName: branchName # optional for pipelines, leave empty for all
userEmail: email # required for pull requests userEmail: email # required for pull requests
repositoryId: prRepositoryId # required for pull requests repositoryId: prRepositoryId # required for pull requests
key: personalaccesstoken key: personalaccesstoken
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["missingEpisodes", "missingMovies"]`.
```yaml ```yaml
widget: widget:
type: bazarr type: bazarr
url: http://bazarr.host.or.ip url: http://bazarr.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -7,6 +7,6 @@ Allowed fields: `["upstreams", "requests", "requests_failed"]`.
```yaml ```yaml
widget: widget:
type: caddy type: caddy
url: http://caddy.host.or.ip:adminport # default admin port is 2019 url: http://caddy.host.or.ip:adminport # default admin port is 2019
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["books", "authors", "categories", "series"]`.
```yaml ```yaml
widget: widget:
type: calibreweb type: calibreweb
url: http://your.calibreweb.host:port url: http://your.calibreweb.host:port
username: username username: username
password: password password: password
``` ```

View File

@@ -7,7 +7,7 @@ Find your API key under `Settings > API`.
```yaml ```yaml
widget: widget:
type: changedetectionio type: changedetectionio
url: http://changedetection.host.or.ip:port url: http://changedetection.host.or.ip:port
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -5,6 +5,6 @@ description: Channels DVR Server Widget Configuration
```yaml ```yaml
widget: widget:
type: channelsdvrserver type: channelsdvrserver
url: http://192.168.1.55:8089 url: http://192.168.1.55:8089
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["status", "origin_ip"]`.
```yaml ```yaml
widget: widget:
type: cloudflared type: cloudflared
accountid: accountid # from zero trust dashboard url e.g. https://one.dash.cloudflare.com/<accountid>/home/quick-start accountid: accountid # from zero trust dashboard url e.g. https://one.dash.cloudflare.com/<accountid>/home/quick-start
tunnelid: tunnelid # found in tunnels dashboard under the tunnel name tunnelid: tunnelid # found in tunnels dashboard under the tunnel name
key: cloudflareapitoken # api token with `Account.Cloudflare Tunnel:Read` https://dash.cloudflare.com/profile/api-tokens key: cloudflareapitoken # api token with `Account.Cloudflare Tunnel:Read` https://dash.cloudflare.com/profile/api-tokens
``` ```

View File

@@ -9,17 +9,18 @@ Allowed fields: no configurable fields for this widget.
```yaml ```yaml
widget: widget:
type: coinmarketcap type: coinmarketcap
currency: GBP # Optional currency: GBP # Optional
symbols: [BTC, LTC, ETH] symbols: [BTC, LTC, ETH]
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
defaultinterval: 7d # Optional
``` ```
You can also specify slugs instead of symbols (since symbols aren't garaunteed to be unique). If you supply both, slugs will be used. For example: You can also specify slugs instead of symbols (since symbols aren't garaunteed to be unique). If you supply both, slugs will be used. For example:
```yaml ```yaml
widget: widget:
type: coinmarketcap type: coinmarketcap
slugs: [chia-network, uniswap] slugs: [chia-network, uniswap]
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -9,28 +9,28 @@ Fields need to be defined in the `mappings` section YAML object to correlate wit
```yaml ```yaml
widget: widget:
type: customapi type: customapi
url: http://custom.api.host.or.ip:port/path/to/exact/api/endpoint url: http://custom.api.host.or.ip:port/path/to/exact/api/endpoint
refreshInterval: 10000 # optional - in milliseconds, defaults to 10s refreshInterval: 10000 # optional - in milliseconds, defaults to 10s
username: username # auth - optional username: username # auth - optional
password: password # auth - optional password: password # auth - optional
method: GET # optional, e.g. POST method: GET # optional, e.g. POST
headers: # optional, must be object, see below headers: # optional, must be object, see below
mappings: mappings:
- field: key # needs to be YAML string or object - field: key # needs to be YAML string or object
label: Field 1 label: Field 1
format: text # optional - defaults to text format: text # optional - defaults to text
- field: # needs to be YAML string or object - field: # needs to be YAML string or object
path: path:
to: key2 to: key2
format: number # optional - defaults to text format: number # optional - defaults to text
label: Field 2 label: Field 2
- field: # needs to be YAML string or object - field: # needs to be YAML string or object
path: path:
to: to:
another: key3 another: key3
label: Field 3 label: Field 3
format: percent # optional - defaults to text format: percent # optional - defaults to text
``` ```
Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes` and `bitrate`. Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes` and `bitrate`.
@@ -41,22 +41,22 @@ For the following JSON object from the API:
```json ```json
{ {
"id": 1, "id": 1,
"name": "Rick Sanchez", "name": "Rick Sanchez",
"status": "Alive", "status": "Alive",
"species": "Human", "species": "Human",
"gender": "Male", "gender": "Male",
"origin": { "origin": {
"name": "Earth (C-137)" "name": "Earth (C-137)"
},
"locations": [
{
"name": "Earth (C-137)"
}, },
"locations": [ {
{ "name": "Citadel of Ricks"
"name": "Earth (C-137)" }
}, ]
{
"name": "Citadel of Ricks"
}
]
} }
``` ```
@@ -64,17 +64,17 @@ Define the `mappings` section as an aray, for example:
```yaml ```yaml
mappings: mappings:
- field: name # Rick Sanchez - field: name # Rick Sanchez
label: Name label: Name
- field: status # Alive - field: status # Alive
label: Status label: Status
- field: - field:
origin: name # Earth (C-137) origin: name # Earth (C-137)
label: Origin label: Origin
- field: - field:
locations: locations:
1: name # Citadel of Ricks 1: name # Citadel of Ricks
label: Location label: Location
``` ```
## Data Transformation ## Data Transformation
@@ -86,12 +86,12 @@ You can manipulate data with the following tools `remap`, `scale` and `suffix`,
label: Field 4 label: Field 4
format: text format: text
remap: remap:
- value: 0 - value: 0
to: None to: None
- value: 1 - value: 1
to: Connected to: Connected
- any: true # will map all other values - any: true # will map all other values
to: Unknown to: Unknown
- field: key5 - field: key5
label: Power label: Power
format: float format: float
@@ -105,5 +105,5 @@ Pass custom headers using the `headers` option, for example:
```yaml ```yaml
headers: headers:
X-API-Token: token X-API-Token: token
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["leech", "download", "seed", "upload"]`.
```yaml ```yaml
widget: widget:
type: deluge type: deluge
url: http://deluge.host.or.ip url: http://deluge.host.or.ip
password: password # webui password password: password # webui password
``` ```

View File

@@ -17,9 +17,9 @@ To access these system metrics you need to connect to the DiskStation with an ac
4. On the `Permissions` tab check the top box for `No Access`, effectively prohibiting the user from accessing anything in the shared folders. 4. On the `Permissions` tab check the top box for `No Access`, effectively prohibiting the user from accessing anything in the shared folders.
5. Under `Applications` check the box next to `Deny` in the header to explicitly prohibit login to all applications. 5. Under `Applications` check the box next to `Deny` in the header to explicitly prohibit login to all applications.
6. Now _only_ allow login to the `Download Station` application, either by 6. Now _only_ allow login to the `Download Station` application, either by
- unchecking `Deny` in the respective row, or (if inheriting permission doesn't work because of other group settings) - unchecking `Deny` in the respective row, or (if inheriting permission doesn't work because of other group settings)
- checking `Allow` for this app, or - checking `Allow` for this app, or
- checking `By IP` for this app to limit the source of login attempts to one or more IP addresses/subnets. - checking `By IP` for this app to limit the source of login attempts to one or more IP addresses/subnets.
7. When the `Preview` column shows `Allow` in the `Download Station` row, click `Save`. 7. When the `Preview` column shows `Allow` in the `Download Station` row, click `Save`.
Now configure the widget with the correct login information and test it. Now configure the widget with the correct login information and test it.
@@ -28,9 +28,9 @@ If you encounter issues during testing, make sure to uncheck the option for auto
```yaml ```yaml
widget: widget:
type: diskstation type: diskstation
url: http://diskstation.host.or.ip:port url: http://diskstation.host.or.ip:port
username: username username: username
password: password password: password
volume: volume_N # optional volume: volume_N # optional
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["leech", "download", "seed", "upload"]`.
```yaml ```yaml
widget: widget:
type: downloadstation type: downloadstation
url: http://downloadstation.host.or.ip:port url: http://downloadstation.host.or.ip:port
username: username username: username
password: password password: password
``` ```

View File

@@ -9,9 +9,9 @@ As of v0.6.11 the widget supports fields `["movies", "series", "episodes", "song
```yaml ```yaml
widget: widget:
type: emby type: emby
url: http://emby.host.or.ip url: http://emby.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
enableBlocks: true # optional, defaults to false enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true enableNowPlaying: true # optional, defaults to true
``` ```

View File

@@ -7,6 +7,6 @@ Allowed fields: `["pv_power", "grid_power", "home_power", "charge_power]`.
```yaml ```yaml
widget: widget:
type: evcc type: evcc
url: http://evcc.host.or.ip:port url: http://evcc.host.or.ip:port
``` ```

View File

@@ -7,6 +7,6 @@ Allowed fields: `["queue", "processing", "processed", "time"]`.
```yaml ```yaml
widget: widget:
type: fileflows type: fileflows
url: http://your.fileflows.host:port url: http://your.fileflows.host:port
``` ```

View File

@@ -7,8 +7,8 @@ Allowed fields: `["leech", "download", "seed", "upload"]`.
```yaml ```yaml
widget: widget:
type: flood type: flood
url: http://flood.host.or.ip url: http://flood.host.or.ip
username: username # if set username: username # if set
password: password # if set password: password # if set
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["subscriptions", "unread"]`.
```yaml ```yaml
widget: widget:
type: freshrss type: freshrss
url: http://freshrss.host.or.ip:port url: http://freshrss.host.or.ip:port
username: username username: username
password: password password: password
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields (limited to a max of 4): `["status", "name", "map", "currentPlaye
```yaml ```yaml
widget: widget:
type: gamedig type: gamedig
serverType: csgo # see https://github.com/gamedig/node-gamedig#games-list serverType: csgo # see https://github.com/gamedig/node-gamedig#games-list
url: udp://server.host.or.ip:port url: udp://server.host.or.ip:port
``` ```

View File

@@ -17,7 +17,7 @@ Allowed fields: `["gross_percent_today", "gross_percent_1y", "gross_percent_max"
```yaml ```yaml
widget: widget:
type: ghostfolio type: ghostfolio
url: http://ghostfoliohost:port url: http://ghostfoliohost:port
key: ghostfoliobearertoken key: ghostfoliobearertoken
``` ```

View File

@@ -3,7 +3,7 @@ title: Glances
description: Glances Widget Configuration description: Glances Widget Configuration
--- ---
<img width="1614" alt="glances" src="https://github.com/benphelps/homepage-docs/assets/82196/25648c97-2c1b-4db0-b5a5-f1509806079c"> <img width="1614" alt="glances" src="https://github-production-user-asset-6210df.s3.amazonaws.com/82196/257382012-25648c97-2c1b-4db0-b5a5-f1509806079c.png">
_(Find the Glances information widget [here](../info/glances.md))_ _(Find the Glances information widget [here](../info/glances.md))_
@@ -59,7 +59,7 @@ The metric field in the configuration determines the type of system monitoring d
All widgets offer an alternative to the full or "graph" view, which is the compact, or "graphless" view. All widgets offer an alternative to the full or "graph" view, which is the compact, or "graphless" view.
<img width="970" alt="Screenshot 2023-09-06 at 1 51 48PM" src="https://github.com/benphelps/homepage-docs/assets/82196/cc6b9adc-4218-4274-96ca-36c3e64de5d0"> <img width="970" alt="Screenshot 2023-09-06 at 1 51 48PM" src="https://github-production-user-asset-6210df.s3.amazonaws.com/82196/265985295-cc6b9adc-4218-4274-96ca-36c3e64de5d0.png">
To switch to the alternative "graphless" view, simply passs `chart: false` as an option to the widget, like so: To switch to the alternative "graphless" view, simply passs `chart: false` as an option to the widget, like so:

View File

@@ -3,12 +3,12 @@ title: Gluetun
description: Gluetun Widget Configuration description: Gluetun Widget Configuration
--- ---
Requires [HTTP control server options](https://github.com/qdm12/gluetun/wiki/HTTP-control-server-options) to be enabled. Requires [HTTP control server options](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md) to be enabled.
Allowed fields: `["public_ip", "region", "country"]`. Allowed fields: `["public_ip", "region", "country"]`.
```yaml ```yaml
widget: widget:
type: gluetun type: gluetun
url: http://gluetun.host.or.ip url: http://gluetun.host.or.ip
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["apps", "clients", "messages"]`.
```yaml ```yaml
widget: widget:
type: gotify type: gotify
url: http://gotify.host.or.ip url: http://gotify.host.or.ip
key: clientoken key: clientoken
``` ```

View File

@@ -7,8 +7,8 @@ Allowed fields: `["dashboards", "datasources", "totalalerts", "alertstriggered"]
```yaml ```yaml
widget: widget:
type: grafana type: grafana
url: http://grafana.host.or.ip:port url: http://grafana.host.or.ip:port
username: username username: username
password: password password: password
``` ```

View File

@@ -0,0 +1,12 @@
---
title: HDHomerun
description: HDHomerun Widget Configuration
---
Allowed fields: `["channels", "hd"]`.
```yaml
widget:
type: hdhomerun
url: http://hdhomerun.host.or.ip
```

View File

@@ -13,8 +13,8 @@ Allowed fields: `["status", "last_ping"]`.
```yaml ```yaml
widget: widget:
type: healthchecks type: healthchecks
url: http://healthchecks.host.or.ip:port url: http://healthchecks.host.or.ip:port
key: <YOUR_API_KEY> key: <YOUR_API_KEY>
uuid: <YOUR_CHECK_UUID> uuid: <YOUR_CHECK_UUID>
``` ```

View File

@@ -12,25 +12,25 @@ Allowed fields: `["people_home", "lights_on", "switches_on"]`.
Up to a maximum of four custom states and/or templates can be queried via the `custom` property like in the example below. Up to a maximum of four custom states and/or templates can be queried via the `custom` property like in the example below.
The `custom` property will have no effect as long as the `fields` property is defined. The `custom` property will have no effect as long as the `fields` property is defined.
- `state` will query the state of the specified `entity_id` - `state` will query the state of the specified `entity_id`
- state labels and values can be user defined and may reference entity attributes in curly brackets - 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 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}"` - 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 - if no template label is defined it will be empty
```yaml ```yaml
widget: widget:
type: homeassistant type: homeassistant
url: http://homeassistant.host.or.ip:port url: http://homeassistant.host.or.ip:port
key: access_token key: access_token
custom: custom:
- state: sensor.total_power - state: sensor.total_power
- state: sensor.total_energy_today - state: sensor.total_energy_today
label: energy today label: energy today
- template: "{{ states.switch|selectattr('state','equalto','on')|list|length }}" - template: "{{ states.switch|selectattr('state','equalto','on')|list|length }}"
label: switches on label: switches on
- state: weather.forecast_home - state: weather.forecast_home
label: wind speed label: wind speed
value: "{attributes.wind_speed} {attributes.wind_speed_unit}" value: "{attributes.wind_speed} {attributes.wind_speed_unit}"
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["updates", "child_bridges"]`.
```yaml ```yaml
widget: widget:
type: homebridge type: homebridge
url: http://homebridge.host.or.ip:port url: http://homebridge.host.or.ip:port
username: username username: username
password: password password: password
``` ```

View File

@@ -9,7 +9,7 @@ Note that API key must be from admin user.
```yaml ```yaml
widget: widget:
type: immich type: immich
url: http://immich.host.or.ip url: http://immich.host.or.ip
key: adminapikeyadminapikeyadminapikey key: adminapikeyadminapikeyadminapikey
``` ```

View File

@@ -9,6 +9,6 @@ Allowed fields: `["configured", "errored"]`.
```yaml ```yaml
widget: widget:
type: jackett type: jackett
url: http://jackett.host.or.ip url: http://jackett.host.or.ip
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["downloadCount", "downloadTotalBytes","downloadBytesRemaining"
```yaml ```yaml
widget: widget:
type: jdownloader type: jdownloader
username: JDownloader Username username: JDownloader Username
password: JDownloader Password password: JDownloader Password
client: Name of JDownloader Instance client: Name of JDownloader Instance
``` ```

View File

@@ -9,9 +9,9 @@ As of v0.6.11 the widget supports fields `["movies", "series", "episodes", "song
```yaml ```yaml
widget: widget:
type: jellyfin type: jellyfin
url: http://jellyfin.host.or.ip url: http://jellyfin.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
enableBlocks: true # optional, defaults to false enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true enableNowPlaying: true # optional, defaults to true
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["pending", "approved", "available"]`.
```yaml ```yaml
widget: widget:
type: jellyseerr type: jellyseerr
url: http://jellyseerr.host.or.ip url: http://jellyseerr.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["seriesCount", "totalFiles"]`.
```yaml ```yaml
widget: widget:
type: kavita type: kavita
url: http://kavita.host.or.ip:port url: http://kavita.host.or.ip:port
username: username username: username
password: password password: password
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["libraries", "series", "books"]`.
```yaml ```yaml
widget: widget:
type: komga type: komga
url: http://komga.host.or.ip:port url: http://komga.host.or.ip:port
username: username username: username
password: password password: password
``` ```

View File

@@ -9,10 +9,10 @@ You may optionally pass values for `snapshotHost` and / or `snapshotPath` to sel
```yaml ```yaml
widget: widget:
type: kopia type: kopia
url: http://kopia.host.or.ip:port url: http://kopia.host.or.ip:port
username: username username: username
password: password password: password
snapshotHost: hostname # optional snapshotHost: hostname # optional
snapshotPath: path # optional snapshotPath: path # optional
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["wanted", "queued", "artists"]`.
```yaml ```yaml
widget: widget:
type: lidarr type: lidarr
url: http://lidarr.host.or.ip url: http://lidarr.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -9,6 +9,6 @@ Allowed fields: `["user_count", "status_count", "domain_count"]`.
```yaml ```yaml
widget: widget:
type: mastodon type: mastodon
url: https://mastodon.host.name url: https://mastodon.host.name
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["recipes", "users", "categories", "tags"]`.
```yaml ```yaml
widget: widget:
type: mealie type: mealie
url: http://mealie-frontend.host.or.ip url: http://mealie-frontend.host.or.ip
key: mealieapitoken key: mealieapitoken
``` ```

View File

@@ -7,7 +7,7 @@ Allowed fields: `["wanted", "queued", "series"]`.
```yaml ```yaml
widget: widget:
type: medusa type: medusa
url: http://medusa.host.or.ip:port url: http://medusa.host.or.ip:port
key: medusaapikeyapikeyapikeyapikeyapikey key: medusaapikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["uptime", "cpuLoad", "memoryUsed", "numberOfLeases"]`.
```yaml ```yaml
widget: widget:
type: mikrotik type: mikrotik
url: https://mikrotik.host.or.ip url: https://mikrotik.host.or.ip
username: username username: username
password: password password: password
``` ```

View File

@@ -7,6 +7,6 @@ Allowed fields: `["players", "version", "status"]`.
```yaml ```yaml
widget: widget:
type: minecraft type: minecraft
url: udp://minecraftserveripordomain:port url: udp://minecraftserveripordomain:port
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["unread", "read"]`.
```yaml ```yaml
widget: widget:
type: miniflux type: miniflux
url: http://miniflux.host.or.ip:port url: http://miniflux.host.or.ip:port
key: minifluxapikey key: minifluxapikey
``` ```

View File

@@ -3,12 +3,12 @@ title: MJPEG
description: MJPEG Stream Widget Configuration description: MJPEG Stream Widget Configuration
--- ---
![camera-preview](https://github.com/benphelps/homepage-docs/assets/82196/dc375ae3-0670-489f-8db6-83ff1f423d12) ![camera-preview](https://github.com/gethomepage/homepage-docs/assets/82196/dc375ae3-0670-489f-8db6-83ff1f423d12)
Pass the stream URL from a service like [µStreamer](https://github.com/pikvm/ustreamer) or [camera-streamer](https://github.com/ayufan/camera-streamer). Pass the stream URL from a service like [µStreamer](https://github.com/pikvm/ustreamer) or [camera-streamer](https://github.com/ayufan/camera-streamer).
```yaml ```yaml
widget: widget:
type: mjpeg type: mjpeg
stream: http://mjpeg.host.or.ip/webcam/stream stream: http://mjpeg.host.or.ip/webcam/stream
``` ```

View File

@@ -7,6 +7,6 @@ Allowed fields: `["printer_state", "print_status", "print_progress", "layers"]`.
```yaml ```yaml
widget: widget:
type: moonraker type: moonraker
url: http://moonraker.host.or.ip:port url: http://moonraker.host.or.ip:port
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["series", "issues", "wanted"]`.
```yaml ```yaml
widget: widget:
type: mylar type: mylar
url: http://mylar3.host.or.ip:port url: http://mylar3.host.or.ip:port
key: yourmylar3apikey key: yourmylar3apikey
``` ```

View File

@@ -9,9 +9,9 @@ Allowed fields: no configurable fields for this widget.
```yaml ```yaml
widget: widget:
type: navidrome type: navidrome
url: http://navidrome.host.or.ip:port url: http://navidrome.host.or.ip:port
user: username user: username
token: token #md5(password + salt) token: token #md5(password + salt)
salt: randomsalt salt: randomsalt
``` ```

View File

@@ -11,15 +11,15 @@ Note "cpuload" and "memoryusage" were deprecated in v0.6.18 and a maximum of 4 f
```yaml ```yaml
widget: widget:
type: nextcloud type: nextcloud
url: https://nextcloud.host.or.ip:port url: https://nextcloud.host.or.ip:port
key: token key: token
``` ```
```yaml ```yaml
widget: widget:
type: nextcloud type: nextcloud
url: https://nextcloud.host.or.ip:port url: https://nextcloud.host.or.ip:port
username: username username: username
password: password password: password
``` ```

View File

@@ -7,7 +7,7 @@ Api key is found under Account > API, profile ID is found under Setup > Endpoint
```yaml ```yaml
widget: widget:
type: nextdns type: nextdns
profile: profileid profile: profileid
key: yourapikeyhere key: yourapikeyhere
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["enabled", "disabled", "total"]`.
```yaml ```yaml
widget: widget:
type: npm type: npm
url: http://npm.host.or.ip url: http://npm.host.or.ip
username: admin_username username: admin_username
password: admin_password password: admin_password
``` ```

View File

@@ -9,8 +9,8 @@ Allowed fields: `["rate", "remaining", "downloaded"]`.
```yaml ```yaml
widget: widget:
type: nzbget type: nzbget
url: http://nzbget.host.or.ip url: http://nzbget.host.or.ip
username: controlusername username: controlusername
password: controlpassword password: controlpassword
``` ```

View File

@@ -7,7 +7,7 @@ Allowed fields: `["printer_state", "temp_tool", "temp_bed", "job_completion"]`.
```yaml ```yaml
widget: widget:
type: octoprint type: octoprint
url: http://octoprint.host.or.ip:port url: http://octoprint.host.or.ip:port
key: youroctoprintapikey key: youroctoprintapikey
``` ```

View File

@@ -9,9 +9,9 @@ Allowed fields: `["connectedAp", "activeUser", "alerts", "connectedGateways", "c
```yaml ```yaml
widget: widget:
type: omada type: omada
url: http://omada.host.or.ip:port url: http://omada.host.or.ip:port
username: username username: username
password: password password: password
site: sitename site: sitename
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["pending", "approved", "available"]`.
```yaml ```yaml
widget: widget:
type: ombi type: ombi
url: http://ombi.host.or.ip url: http://ombi.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -7,6 +7,6 @@ Allowed fields: `["yieldDay", "relativePower", "absolutePower", "limit"]`.
```yaml ```yaml
widget: widget:
type: opendtu type: opendtu
url: http://opendtu.host.or.ip url: http://opendtu.host.or.ip
``` ```

View File

@@ -7,11 +7,11 @@ Provides useful information from your OpenMediaVault
```yaml ```yaml
widget: widget:
type: openmediavault type: openmediavault
url: http://omv.host.or.ip url: http://omv.host.or.ip
username: admin username: admin
password: pass password: pass
method: services.getStatus # required method: services.getStatus # required
``` ```
## Methods ## Methods

View File

@@ -5,8 +5,8 @@ description: OPNSense Widget Configuration
The API key & secret can be generated via the webui by creating a new user at _System/Access/Users_. Ensure "Generate a scrambled password to prevent local database logins for this user" is checked and then edit the effective privileges selecting **only**: The API key & secret can be generated via the webui by creating a new user at _System/Access/Users_. Ensure "Generate a scrambled password to prevent local database logins for this user" is checked and then edit the effective privileges selecting **only**:
- Diagnostics: System Activity - Diagnostics: System Activity
- Status: Traffic Graph - Status: Traffic Graph
Finally, create a new API key which will download an `apikey.txt` file with your key and secret in it. Use the values as the username and password fields, respectively, in your homepage config. Finally, create a new API key which will download an `apikey.txt` file with your key and secret in it. Use the values as the username and password fields, respectively, in your homepage config.
@@ -14,8 +14,8 @@ Allowed fields: `["cpu", "memory", "wanUpload", "wanDownload"]`.
```yaml ```yaml
widget: widget:
type: opnsense type: opnsense
url: http://opnsense.host.or.ip url: http://opnsense.host.or.ip
username: key username: key
password: secret password: secret
``` ```

View File

@@ -9,7 +9,7 @@ Allowed fields: `["pending", "approved", "available", "processing"]`.
```yaml ```yaml
widget: widget:
type: overseerr type: overseerr
url: http://overseerr.host.or.ip url: http://overseerr.host.or.ip
key: apikeyapikeyapikeyapikeyapikey key: apikeyapikeyapikeyapikeyapikey
``` ```

View File

@@ -9,15 +9,15 @@ Allowed fields: `["total", "inbox"]`.
```yaml ```yaml
widget: widget:
type: paperlessngx type: paperlessngx
url: http://paperlessngx.host.or.ip:port url: http://paperlessngx.host.or.ip:port
username: username username: username
password: password password: password
``` ```
```yaml ```yaml
widget: widget:
type: paperlessngx type: paperlessngx
url: http://paperlessngx.host.or.ip:port url: http://paperlessngx.host.or.ip:port
key: token key: token
``` ```

Some files were not shown because too many files have changed in this diff Show More