Compare commits

..

156 Commits

Author SHA1 Message Date
shamoon
507e72407f Add AI bot info to docs 2023-11-25 08:54:38 -08:00
Ben Phelps
5bc6730e8b New Crowdin updates (#2295) 2023-11-25 08:23:55 -08:00
shamoon
110ebe920e Documentation: Add ai bot (#2383) 2023-11-25 08:22:16 -08:00
Denis Papec
95d66707f5 Feature: Implement iCal integration for calendar, improve styling (#2376)
* Feature: Implement iCal integration, improve calendar/agenda styling

* Delete calendar.jsx

* Calendar proxy handler

* code style

* Add some basic error handling

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-11-25 08:17:25 -08:00
Denis Papec
518ed7fc4e Feature: Support previous days option in Calendar Agenda (#2375)
Signed-off-by: Denis Papec <denis.papec@gmail.com>
2023-11-24 20:32:38 -08:00
Denis Papec
acafbb5100 Enhancement: Improvements to calendar Radarr release logic (#2374)
Signed-off-by: Denis Papec <denis.papec@gmail.com>
2023-11-24 20:32:04 -08:00
shamoon
fb9ebf18ba Fix: show mem / cpu stats for k8s partial health status (#2378) 2023-11-24 20:29:23 -08:00
shamoon
6b35443100 Fix: dont ignore empty string for kubernetes podSelector (#2372) 2023-11-24 16:15:42 -08:00
nioKi
c2729e302d Enhancement: Add configurable refresh interval and max points for glances services (#2363)
---------

Co-authored-by: Quentin de Grandmaison <quentin.degrandmaison@7speaking.com>
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-11-22 12:35:54 -08:00
Joe Stump
e98b5e2233 Documentation: Add details to Gluetun widget docs (#2357)
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-11-21 11:41:56 -08:00
shamoon
0931f5c5a6 Chore: enable swc (#2311) 2023-11-20 19:34:56 -08:00
Timo
6d21ea9ba3 Enhancement: Add service discovery labels support for multiple homepage instances (#2340) 2023-11-20 19:27:19 -08:00
Aesop7
5bf6f30e2b Documentation: add Longhorn example (#2353) 2023-11-20 07:35:21 -08:00
shamoon
66fbe9f670 Fix: Disable override white bkgd with card blur (#2336) 2023-11-17 07:26:22 -08:00
shamoon
6316de6fa6 Fix: Lint docker stats throughput PR 2023-11-17 00:03:56 -08:00
shamoon
7f50f6cfaa Fix: sum throughput data for docker stats (#2334) 2023-11-16 23:55:04 -08:00
shamoon
c9991bc2a2 Fix: dont set pinned icon if custom favicon (#2326) 2023-11-14 22:10:37 -08:00
shamoon
e28faf6b98 Fix: revert to using initialSettings in head 2023-11-14 22:09:18 -08:00
Faqar
17b9b7e523 Enhancement: open the searchbox on paste (#2320)
* Open the searchbox when detecting Ctrl-V.

* support macOS, codestyle

---------

Co-authored-by: Joschka <kontakt@greiner-it.de>
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-11-12 19:40:09 -08:00
shamoon
d5608c46c3 Dont push docker for feature builds 2023-11-11 21:46:40 -08:00
shamoon
428680b5df Run ci on feature/ branches 2023-11-11 21:42:13 -08:00
Jorge Benjumea
556cfd19b6 Documentation: fix typo (#2296) 2023-11-10 00:46:56 -08:00
Mohamed Aziz Ben Aissa
fc67e1a986 Feature: Added timeStyle to date format for custom API (#2294)
* Add timeStyle option to custom API date format

* Update documentation
2023-11-09 22:57:14 +02:00
Ben Phelps
dc8bea95ac New translations common.json (Afrikaans) (#2292) 2023-11-09 12:18:39 -08:00
Ben Phelps
2ea0e129f2 New Crowdin updates (#2218) 2023-11-09 08:09:00 -08:00
shamoon
b019295a06 Update services.md 2023-11-08 22:39:23 -08:00
shamoon
5fa790e9fe Use old mike 2023-11-08 22:26:17 -08:00
shamoon
7719ea17be Fix: handle immich v1.85.0 API stats breaking change (#2284) 2023-11-07 23:59:43 -08:00
shamoon
885a4051f3 Fix: support Unifi widget with Unifi OS v3.2.5+ (#2281) 2023-11-07 14:38:26 -08:00
Ingmar Delsink
67f5ee8df5 Fix: Access container memory_stats.stats safely by optional chaining (#2271) (#2272) 2023-11-05 07:39:26 -08:00
Reiss Cashmore
ebd384c62d Feature: iFrame widget (#2261)
---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-10-31 07:19:57 -07:00
shamoon
5512d05f00 Fix: Respect hideErrors for Calendar widget (#2259) 2023-10-29 20:14:06 -07:00
shamoon
654f16dbb5 Fix: Correct Synology DownloadStation units (#2249) 2023-10-27 14:39:57 -07:00
shamoon
bec1e5fff2 Fix: octoprint error when progress empty (#2247) 2023-10-27 09:29:36 -07:00
shamoon
1da9255578 Fix: authentik users endpoint URL (#2244) 2023-10-26 23:03:52 -07:00
shamoon
cc887214cf Fix: override some colors for white theme (#2242) 2023-10-26 21:59:18 -07:00
shamoon
98c3ca6dac Docs: Update broken links in readme
Closes #2233
2023-10-24 14:09:56 -07:00
Kirill Kuznetsov
3c4818a2b4 Feature: add date formatting option in custom api (#2228) 2023-10-23 16:54:04 -07:00
Avishek Sen
f773e026d5 docs: fix typos (#2222) 2023-10-21 11:42:37 -07:00
shamoon
3f1229555e Fix translation of no events today in calendar
See #2221
2023-10-21 07:48:17 -07:00
Denis Papec
6898faa3de Feature: Added agenda view for calendar, calendar improvements (#2216)
* Feature: Added agenda view for calendar, calendar improvements

* Fix duplicate event keys

* Additional hover on title, not date

* Show date once in list

* Rename monthly view for consistency

* Remove unneeded key props

* CSS cleanup, dont slice title to arbitrary 42 chars which can break column layouts

* Simplify agenda components

* Fix show date once in list

---------

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2023-10-20 16:31:19 -07:00
shamoon
792f768a7f Feature: true ping, rename old ping to siteMonitor (#2215) 2023-10-20 00:09:33 -07:00
shamoon
0c8c759f8a Enable autoSelectFamily for http(s) requests (#2214) 2023-10-19 14:42:15 -07:00
shamoon
241c981444 Fix tab spacing on mobile (#2209) 2023-10-18 13:25:12 -07:00
shamoon
56349e57e5 Update development.md 2023-10-18 12:53:27 -07:00
shamoon
6763da57a6 Update CONTRIBUTING.md 2023-10-18 12:49:27 -07:00
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
shamoon
3cf88d290f Merge branch 'feature-move-notification' 2023-10-04 22:47:11 -07:00
shamoon
9f030d1540 Update ping.jsx 2023-10-04 22:46:31 -07:00
shamoon
e8f6d81d13 Update ping.jsx 2023-10-04 22:37:53 -07:00
shamoon
571f627b3b Enhancement: statusStyle improvements (#2119) 2023-10-04 22:12:57 -07:00
shamoon
861ab32ca3 Update links 2023-10-03 18:55:02 -07:00
shamoon
aa5d24b9e4 Support notification re deprecated repo 2023-10-03 16:17:17 -07:00
shamoon
7adfe2ffd9 Documentation: correct ping statusStyle info 2023-10-01 01:54:06 -07:00
しぐれ
f8d2bb8611 Documentation: remove extra Service Widgets section (#2096) 2023-10-01 01:54:06 -07:00
Gino Cicatiello
892ebb8bd9 Translated using Weblate (Italian)
Currently translated at 99.8% (540 of 541 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/it/
2023-10-01 01:54:06 -07:00
Nonoss117
456fe6afc2 Translated using Weblate (French)
Currently translated at 100.0% (541 of 541 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-10-01 01:54:06 -07:00
Antonio Sanchez Castellón
ce3fb1abc1 Translated using Weblate (Spanish)
Currently translated at 100.0% (541 of 541 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-10-01 01:54:06 -07:00
shamoon
a1e023e240 CI: filter ci by paths, docs ci test vs build, update PR template 2023-10-01 01:54:06 -07:00
Denis Papec
56f46ae85c Enhancement: go to current day when clicking calendar month name (#2091) 2023-09-30 10:01:14 -07:00
Denis Papec
67ebe29db7 Skip workflows if it is fork (#2092)
Signed-off-by: Denis Papec <denis.papec@gmail.com>
2023-09-30 09:59:41 -07:00
Nagy László Zoltán
0c2671ea00 Update services/glances.md with correct info/glances link (#2087) 2023-09-30 07:27:12 -07:00
Ben Phelps
7a6470381b update build for insiders 2023-09-30 15:06:56 +03:00
Ben Phelps
86d3fc4fbb enable social cards, allow building docs without insiders 2023-09-30 15:06:25 +03:00
Ben Phelps
ceeb007ca0 ignore mkdocs cache 2023-09-30 14:39:51 +03:00
shamoon
87113eaac4 Add social icons to footer 2023-09-29 22:38:17 -07:00
shamoon
25cd09a117 Update .gitignore 2023-09-29 17:02:18 -07:00
480 changed files with 23156 additions and 17499 deletions

View File

@@ -1,3 +0,0 @@
{
"presets": ["next/babel"]
}

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/en/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:
@@ -78,7 +78,7 @@ body:
id: troubleshooting id: troubleshooting
attributes: attributes:
label: Troubleshooting label: Troubleshooting
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/en/more/troubleshooting/#service-widget-errors). If this is a service widget issue and you do not include any information here your issue will be closed. If it is not, indicate e.g. 'n/a' description: Please include output from your [troubleshooting tests](https://gethomepage.dev/latest/more/troubleshooting/#service-widget-errors). If this is a service widget issue and you do not include any information here your issue will be closed. If it is not, indicate e.g. 'n/a'
validations: validations:
required: true required: true
- type: textarea - type: textarea
@@ -93,7 +93,7 @@ body:
options: options:
- label: Check [the documentation](https://gethomepage.dev/) - label: Check [the documentation](https://gethomepage.dev/)
required: true required: true
- label: Follow [the troubleshooting guide](https://gethomepage.dev/en/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

@@ -3,10 +3,10 @@
<!-- <!--
Please include a summary of the change. Screenshots and / or videos can also be helpful if appropriate. Please include a summary of the change. Screenshots and / or videos can also be helpful if appropriate.
*** Please see the development guidelines for new widgets: https://gethomepage.dev/en/more/development/#service-widget-guidelines *** Please see the development guidelines for new widgets: https://gethomepage.dev/latest/more/development/#service-widget-guidelines
*** If you do not follow these guidelines your PR will likely be closed without review. *** If you do not follow these guidelines your PR will likely be closed without review.
New service widgets should include example(s) of relevant relevant API output as well as a PR to the docs for the new widget. New service widgets should include example(s) of relevant relevant API output as well updates to the docs for the new widget.
--> -->
Closes # (issue) Closes # (issue)
@@ -20,11 +20,12 @@ What type of change does your PR introduce to Homepage?
- [ ] New service widget - [ ] New service widget
- [ ] Bug fix (non-breaking change which fixes an issue) - [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality) - [ ] New feature (non-breaking change which adds functionality)
- [ ] Documentation only
- [ ] Other (please explain) - [ ] Other (please explain)
## Checklist: ## Checklist:
- [ ] If adding a service widget or a change that requires it, I have added corresponding documentation. - [ ] 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/en/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

@@ -9,11 +9,20 @@ on:
schedule: schedule:
- cron: '20 0 * * *' - cron: '20 0 * * *'
push: push:
branches: [ "main" ] branches:
- main
- feature/**
# Publish semver tags as releases. # Publish semver tags as releases.
tags: [ 'v*.*.*' ] tags: [ 'v*.*.*' ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
pull_request: pull_request:
branches: [ "main" ] branches: [ "main" ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
merge_group:
env: env:
# Use docker.io for Docker Hub if empty # Use docker.io for Docker Hub if empty
@@ -23,9 +32,28 @@ env:
jobs: jobs:
build: 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:
name: Docker Build & Push
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
@@ -49,11 +77,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
@@ -91,7 +119,7 @@ jobs:
uses: docker/build-push-action@v5 uses: docker/build-push-action@v5
with: with:
context: . context: .
push: ${{ github.event_name != 'pull_request' }} push: ${{ github.event_name != 'pull_request' && !(github.event_name == 'push' && startsWith(github.ref, 'refs/heads/feature')) }}
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
build-args: | build-args: |

View File

@@ -4,14 +4,65 @@ on:
push: push:
tags: [ 'v*.*.*' ] tags: [ 'v*.*.*' ]
branches: ['main'] branches: ['main']
paths:
- 'docs/**'
- 'mkdocs.yml'
pull_request:
paths:
- 'docs/**'
- 'mkdocs.yml'
merge_group:
workflow_dispatch: workflow_dispatch:
permissions: permissions:
contents: write contents: write
jobs: jobs:
deploy: 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:
name: Test Build
if: github.repository == 'gethomepage/homepage' && github.event_name == 'pull_request'
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs:
- pre-commit
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: 3.x
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
- uses: actions/cache@v3
with:
key: mkdocs-material-${{ env.cache_id }}
path: .cache
restore-keys: |
mkdocs-material-
- run: sudo apt-get install pngquant
- run: pip install mike
- run: pip install mkdocs-material
- name: Test Docs Build
run: MKINSIDERS=false mkdocs build
deploy:
name: Build & Deploy
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request'
runs-on: ubuntu-latest
needs:
- pre-commit
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
@@ -26,8 +77,8 @@ jobs:
path: .cache path: .cache
restore-keys: | restore-keys: |
mkdocs-material- mkdocs-material-
- run: sudo apt-get install pngquant - run: sudo apt-get install pngquant
- run: pip install mike - run: pip install mike==1.1.2
- run: pip install git+https://${GH_TOKEN}@github.com/benphelps/mkdocs-material-insiders.git - run: pip install git+https://${GH_TOKEN}@github.com/benphelps/mkdocs-material-insiders.git
- name: Set Git config - name: Set Git config
run: | run: |
@@ -39,11 +90,11 @@ jobs:
git checkout gh-pages git checkout gh-pages
git pull origin gh-pages git pull origin gh-pages
git checkout main git checkout main
- name: Mike Deploy for Main - name: Docs Deploy for Main
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'
run: mike deploy --update --push ${{github.ref_name}} run: MKINSIDERS=true mike deploy --update --push ${{github.ref_name}}
- name: Mike Deploy for Tags - name: Docs Deploy for Tags
if: github.ref != 'refs/heads/main' if: github.ref != 'refs/heads/main'
run: mike deploy --update --push ${{github.ref_name}} latest run: MKINSIDERS=true mike deploy --update --push ${{github.ref_name}} latest
env: env:
GH_TOKEN: ${{ secrets.GH_TOKEN }} GH_TOKEN: ${{ secrets.GH_TOKEN }}

4
.gitignore vendored
View File

@@ -48,3 +48,7 @@ next-env.d.ts
# MkDocs documentation # MkDocs documentation
site*/ site*/
.cache/
# venv
.venv/

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/en/more/development/) and specifically the [guidelines for new service widgets](https://gethomepage.dev/en/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/#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

@@ -36,9 +36,9 @@ RUN npm run telemetry \
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>
@@ -39,19 +41,19 @@ With features like quick search, bookmarks, weather support, a wide range of int
## Docker Integration ## Docker Integration
Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker](https://gethomepage.dev/en/installation/docker/) page for more information. Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker](https://gethomepage.dev/latest/installation/docker/) page for more information.
## Service Widgets ## Service Widgets
Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/en/configs/service-widgets/) page for more information. Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/latest/widgets/) page for more information.
## Information Widgets ## Information Widgets
Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/en/configs/widgets/) page for more information. Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/latest/widgets/) page for more information.
## Customization ## Customization
Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the [Settings](https://gethomepage.dev/en/configs/settings/) page for more information. Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the [Settings](https://gethomepage.dev/latest/configs/settings/) page for more information.
# Getting Started # Getting Started
@@ -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,11 +162,11 @@ 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 & Contributors
Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information. Contributions are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information.

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.md) 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.
@@ -184,13 +201,29 @@ In order to detect every service within the Docker swarm it is necessary that se
... ...
``` ```
## Multiple Homepage Instances
The optional field `instanceName` can be configured in [settings.md](settings.md#instance-name) to differentiate between multiple homepage instances.
To limit a label to an instance, insert `.instance.{{instanceName}}` after the `homepage` prefix.
```yaml
labels:
- homepage.group=Media
- homepage.name=Emby
- homepage.icon=emby.png
- homepage.instance.internal.href=http://emby.lan/
- homepage.instance.public.href=https://emby.mydomain.com/
- homepage.description=Media server
```
## Ordering ## Ordering
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

@@ -5,7 +5,7 @@ description: Service Widget Configuration
Unless otherwise noted, URLs should not end with a `/` or other API path. Each widget will handle the path on its own. Unless otherwise noted, URLs should not end with a `/` or other API path. Each widget will handle the path on its own.
Each service can have one widget attached to it (often matching the service type, but thats not forced). Each service can have one widget attached to it (often matching the service type, but that's not forced).
In addition to the href of the service, you can also specify the target location in which to open that link. See [Link Target](settings.md#link-target) for more details. In addition to the href of the service, you can also specify the target location in which to open that link. See [Link Target](settings.md#link-target) for more details.
@@ -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

@@ -101,31 +101,49 @@ To use a local icon, first create a Docker mount to `/app/public/icons` and then
## Ping ## Ping
Services may have an optional `ping` property that allows you to monitor the availability of an endpoint you chose and have the response time displayed. You do not need to set your ping URL equal to your href URL. Services may have an optional `ping` property that allows you to monitor the availability of an external host. As of v0.8.0, the ping feature attempts to use a true (ICMP) ping command on the underlying host.
!!! note
The ping feature works by making an http `HEAD` request to the URL, and falls back to `GET` in case that fails. It will not, for example, login if the URL requires auth or is behind e.g. Authelia. In the case of a reverse proxy and/or auth this usually requires the use of an 'internal' URL to make the ping feature correctly display status.
```yaml ```yaml
- Group A: - Group A:
- Sonarr: - Sonarr:
icon: sonarr.png icon: sonarr.png
href: http://sonarr.host/ href: http://sonarr.host/
ping: http://sonarr.host/ ping: sonarr.host
- Group B: - Group B:
- Radarr: - Radarr:
icon: radarr.png icon: radarr.png
href: http://radarr.host/ href: http://radarr.host/
ping: http://some.other.host/ ping: 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. The default is no value, and displays the response time in ms, but you can also use `dot` or `simple`. `dot` showing a green dot for a successful ping, and `simple` showing either ONLINE or OFFLINE to match the status style of Docker containers. You can also apply different styles to the ping indicator by using the `statusStyle` property, see [settings](settings.md#status-style).
<!-- TODO: Insert images of the new status styles there --> ## Site Monitor
Services may have an optional `siteMonitor` property (formerly `ping`) that allows you to monitor the availability of a URL you chose and have the response time displayed. You do not need to set your monitor URL equal to your href or ping URL.
!!! note
The site monitor feature works by making an http `HEAD` request to the URL, and falls back to `GET` in case that fails. It will not, for example, login if the URL requires auth or is behind e.g. Authelia. In the case of a reverse proxy and/or auth this usually requires the use of an 'internal' URL to make the site monitor feature correctly display status.
```yaml
- Group A:
- Sonarr:
icon: sonarr.png
href: http://sonarr.host/
siteMonitor: http://sonarr.host/
- Group B:
- Radarr:
icon: radarr.png
href: http://radarr.host/
siteMonitor: http://some.other.host/
```
You can also apply different styles to the site monitor indicator by using the `statusStyle` property, see [settings](settings.md#status-style).
## Docker Integration ## Docker Integration
@@ -147,7 +165,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.**
@@ -155,7 +173,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

@@ -67,7 +67,7 @@ background:
### Card Background Blur ### Card Background Blur
You can apply a blur filter to the service & bookmark cards. Note this option is incompatible with the backround blur, saturate and brightness filters. You can apply a blur filter to the service & bookmark cards. Note this option is incompatible with the background blur, saturate and brightness filters.
```yaml ```yaml
cardBlur: sm # sm, "", md, etc... see https://tailwindcss.com/docs/backdrop-blur cardBlur: sm # sm, "", md, etc... see https://tailwindcss.com/docs/backdrop-blur
@@ -329,7 +329,7 @@ You can then pass `provider` instead of `apiKey` in your widget configuration.
## Quick Launch ## Quick Launch
You can use the 'Quick Launch' feature to search services, perform a web search or open a URL. To use Quick Launch, just start typing while on your homepage (as long as the search widget doesnt have focus). You can use the 'Quick Launch' feature to search services, perform a web search or open a URL. To use Quick Launch, just start typing while on your homepage (as long as the search widget doesn't have focus).
<img width="1000" alt="quicklaunch" src="https://user-images.githubusercontent.com/4887959/216880811-90ff72cb-2990-4475-889b-7c3a31e6beef.png"> <img width="1000" alt="quicklaunch" src="https://user-images.githubusercontent.com/4887959/216880811-90ff72cb-2990-4475-889b-7c3a31e6beef.png">
@@ -380,6 +380,40 @@ or per-service (`services.yaml`) with:
If you have both set the per-service settings take precedence. If you have both set the per-service settings take precedence.
## Status Style
You can choose from the following styles for docker or k8s status, site monitor and ping: `dot` or `basic`
- The default is no value, and displays the monitor and ping response time in ms and the docker / k8s container status
- `dot` shows a green dot for a successful monitor ping or healthy status.
- `basic` shows either UP or DOWN for monitor & ping
For example:
```yaml
statusStyle: "dot"
```
or per-service (`services.yaml`) with:
```yaml
- Example Service:
...
statusStyle: 'dot'
```
If you have both set, the per-service settings take precedence.
## Instance Name
Name used by automatic docker service discovery to differentiate between multiple homepage instances.
For example:
```yaml
instanceName: public
```
## Hide Widget Error Messages ## Hide Widget Error Messages
Hide the visible API error messages either globally in `settings.yaml`: Hide the visible API error messages either globally in `settings.yaml`:
@@ -398,4 +432,4 @@ or per service widget (`services.yaml`) with:
hideErrors: true hideErrors: true
``` ```
If either value is set to true, the errror message will be hidden. If either value is set to true, the error message will be hidden.

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,20 @@ 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.
Once installed, hooks will run when you commit. If the formatting isn't quite right, the commit will be rejected and you'll need to look at the output and fix the issue. Most hooks will automatically format failing files, so all you need to do is `git add` those files again and retry your commit.
See the [pre-commit documentation](https://pre-commit.com/#install) to get started.
## 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

@@ -0,0 +1,8 @@
---
title: Homepage Move
description: Homepage Container Deprecation
---
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`.

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

@@ -6,6 +6,10 @@ hide:
- navigation - navigation
--- ---
## Introducing the Homepage AI Bot
Thanks to the generous folks at [Glime](https://glimelab.ai), Homepage is now equipped with a pretty helpful AI-powered bot. The bot has full knowledge of our docs, GitHub issues and discussions and great at answering specific questions about setting up your Homepage. To use the bot, just hit the 'Ask AI' button on any page in our docs or check out the [#ai-support channel on Discord](https://discord.com/channels/1019316731635834932/1177885603552038993)!
## General Troubleshooting Tips ## General Troubleshooting Tips
- For API errors, clicking the "API Error Information" button in the widget will usually show some helpful information as to whether the issue is reaching the service host, an authentication issue, etc. - For API errors, clicking the "API Error Information" button in the widget will usually show some helpful information as to whether the issue is reaching the service host, an authentication issue, etc.
@@ -17,47 +21,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/en/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

12
docs/scripts/extra.js Normal file
View File

@@ -0,0 +1,12 @@
var glimeScript;
document$.subscribe(function () {
if (!glimeScript) {
glimeScript = document.createElement("script");
glimeScript.setAttribute("data", "name: 'glime'");
glimeScript.setAttribute("src", "https://cdn.glimelab.ai/widget/1.0.0/widget.js");
glimeScript.setAttribute("onload", 'window.glime.init("Bl3mlvfCnTnRm5");');
document.head.appendChild(glimeScript);
} else {
// window.glime.init("Bl3mlvfCnTnRm5");
}
});

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,26 @@ 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`. e.g.:
```yaml
providers:
longhorn:
username: "longhorn-username" # optional
password: "very-secret-longhorn-password" # optional
url: https://longhorn.aesop.network
```

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

@@ -3,17 +3,17 @@ title: OpenWeatherMap
description: OpenWeatherMap Information Widget Configuration description: OpenWeatherMap Information Widget Configuration
--- ---
The free tier "One Call API" is all thats required, you will need to [subscribe](https://home.openweathermap.org/subscriptions/unauth_subscribe/onecall_30/base) and grab your API key. The free tier "One Call API" is all that's required, you will need to [subscribe](https://home.openweathermap.org/subscriptions/unauth_subscribe/onecall_30/base) and grab your API key.
```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

@@ -9,32 +9,32 @@ The disk path is the path reported by `df` (Mounted On), or the mount point of t
The cpu and memory resource information are the container's usage while [glances](glances.md) displays statistics for the host machine on which it is installed. The cpu and memory resource information are the container's usage while [glances](glances.md) displays statistics for the host machine on which it is installed.
_Note: unfortunately, the package used for getting CPU temp ([systeminformation](https://systeminformation.io)) is not compatibile with some setups and will not report any value(s) for CPU temp._ _Note: unfortunately, the package used for getting CPU temp ([systeminformation](https://systeminformation.io)) is not compatible with some setups and will not report any value(s) for CPU temp._
**Any disk you wish to access must be mounted to your container as a volume.** **Any disk you wish to access must be mounted to your container as a volume.**
```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

@@ -5,16 +5,16 @@ description: Weather API Information Widget Configuration
**Note: this widget is considered 'deprecated' since there is no longer a free Weather API tier for new members. See the openmeteo or openweathermap widgets for alternatives.** **Note: this widget is considered 'deprecated' since there is no longer a free Weather API tier for new members. See the openmeteo or openweathermap widgets for alternatives.**
The free tier is all thats required, you will need to [register](https://www.weatherapi.com/signup.aspx) and grab your API key. The free tier is all that's required, you will need to [register](https://www.weatherapi.com/signup.aspx) and grab your API key.
```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

@@ -8,19 +8,19 @@ This widget has 2 functions:
1. Pipelines: checks if the relevant pipeline is running or not, and if not, reports the last status.\ 1. Pipelines: checks if the relevant pipeline is running or not, and if not, reports the last status.\
Allowed fields: `["result", "status"]`. Allowed fields: `["result", "status"]`.
2. Pull Requests: returns the amount of open PRs, the amount of the PRs you have open, and how many PRs that you open are marked as 'Approved' by atleast 1 person and not yet completed.\ 2. Pull Requests: returns the amount of open PRs, the amount of the PRs you have open, and how many PRs that you open are marked as 'Approved' by at least 1 person and not yet completed.\
Allowed fields: `["totalPrs", "myPrs", "approved"]`. Allowed fields: `["totalPrs", "myPrs", "approved"]`.
You will need to generate a personal access token for an existing user, see the [azure documentation](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows#create-a-pat) You will need to generate a personal access token for an existing user, see the [azure documentation](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=Windows#create-a-pat)
```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

@@ -3,6 +3,8 @@ title: Calendar
description: Calendar widget description: Calendar widget
--- ---
## Monthly view
<img alt="calendar" src="https://user-images.githubusercontent.com/5442891/271131282-6767a3ea-573e-4005-aeb9-6e14ee01e845.png"> <img alt="calendar" src="https://user-images.githubusercontent.com/5442891/271131282-6767a3ea-573e-4005-aeb9-6e14ee01e845.png">
This widget shows monthly calendar, with optional integrations to show events from supported widgets. This widget shows monthly calendar, with optional integrations to show events from supported widgets.
@@ -11,15 +13,44 @@ This widget shows monthly calendar, with optional integrations to show events fr
widget: widget:
type: calendar type: calendar
firstDayInWeek: sunday # optional - defaults to monday firstDayInWeek: sunday # optional - defaults to monday
view: monthly # optional - possible values monthly, agenda
maxEvents: 10 # optional - defaults to 10
showTime: true # optional - show time for event happening today - defaults to false
integrations: # optional integrations: # optional
- type: sonarr # active widget type that is currently enabled on homepage - possible values: radarr, sonarr, lidarr, readarr - type: sonarr # active widget type that is currently enabled on homepage - possible values: radarr, sonarr, lidarr, readarr, ical
service_group: Media # group name where widget exists service_group: Media # group name where widget exists
service_name: Sonarr # service name for that widget service_name: Sonarr # service name for that widget
color: teal # optional - defaults to pre-defined color for the service (teal for sonarr) color: teal # optional - defaults to pre-defined color for the service (teal for sonarr)
params: # optional - additional params for the service params: # optional - additional params for the service
unmonitored: true # optional - defaults to false, used with *arr stack unmonitored: true # optional - defaults to false, used with *arr stack
- type: ical # Show calendar events from another service
url: https://domain.url/with/link/to.ics # URL with calendar events
name: My Events # required - name for these calendar events
color: zinc # optional - defaults to pre-defined color for the service (zinc for ical)
params: # optional - additional params for the service
showName: true # optional - show name before event title in event line - defaults to false
``` ```
## Agenda
This view shows only list of events from configured integrations
```yaml
widget:
type: calendar
view: agenda
maxEvents: 10 # optional - defaults to 10
showTime: true # optional - show time for event happening today - defaults to false
previousDays: 3 # optional - shows events since three days ago - defaults to 0
integrations: # same as in Monthly view example
```
## Integrations
Currently integrated widgets are [sonarr](sonarr.md), [radarr](radarr.md), [lidarr](lidarr.md) and [readarr](readarr.md). Currently integrated widgets are [sonarr](sonarr.md), [radarr](radarr.md), [lidarr](lidarr.md) and [readarr](readarr.md).
Supported colors can be found on [color palette](../../configs/settings.md#color-palette). Supported colors can be found on [color palette](../../configs/settings.md#color-palette).
### iCal
This custom integration allows you to show events from any calendar that supports iCal format, for example, Google Calendar (go to `Settings`, select specific calendar, go to `Integrate calendar`, copy URL from `Public Address in iCal format`).

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,31 +9,36 @@ 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
- field: key # needs to be YAML string or object
label: Field 4
format: date # optional - defaults to text
dateStyle: long # optional - defaults to "long". Allowed values: `["full", "long", "medium", "short"]`.
timeStyle: medium # optional - Allowed values: `["full", "long", "medium", "short"]`.
``` ```
Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes` and `bitrate`. Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes`, `bitrate` and `date`.
## Example ## Example
@@ -41,40 +46,40 @@ 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"
}
]
} }
``` ```
Define the `mappings` section as an aray, for example: Define the `mappings` section as an array, 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 +91,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 +110,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,9 +3,9 @@ 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](../services/glances.md))_ _(Find the Glances information widget [here](../info/glances.md))_
The Glances widget allows you to monitor the resources (cpu, memory, diskio, sensors & processes) of host or another machine. You can have multiple instances by adding another service block. The Glances widget allows you to monitor the resources (cpu, memory, diskio, sensors & processes) of host or another machine. You can have multiple instances by adding another service block.
@@ -18,7 +18,7 @@ widget:
metric: cpu metric: cpu
``` ```
_Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achive the same effect as the examples above, see as an example:_ _Please note, this widget does not need an `href`, `icon` or `description` on its parent service. To achieve the same effect as the examples above, see as an example:_
```yaml ```yaml
- CPU Usage: - CPU Usage:
@@ -45,23 +45,23 @@ The metric field in the configuration determines the type of system monitoring d
`process`: Top 5 processes based on CPU usage. Gives an overview of which processes are consuming the most resources. `process`: Top 5 processes based on CPU usage. Gives an overview of which processes are consuming the most resources.
`network:<interface_name>`: Network data usage for the specified interface. Replace `<interface_name>` with the name of your network interface, e.g., `network:enp0s25`, as specificed in glances. `network:<interface_name>`: Network data usage for the specified interface. Replace `<interface_name>` with the name of your network interface, e.g., `network:enp0s25`, as specified in glances.
`sensor:<sensor_id>`: Temperature of the specified sensor, typically used to monitor CPU temperature. Replace `<sensor_id>` with the name of your sensor, e.g., `sensor:Package id 0` as specificed in glances. `sensor:<sensor_id>`: Temperature of the specified sensor, typically used to monitor CPU temperature. Replace `<sensor_id>` with the name of your sensor, e.g., `sensor:Package id 0` as specified in glances.
`disk:<disk_id>`: Disk I/O data for the specified disk. Replace `<disk_id>` with the id of your disk, e.g., `disk:sdb`, as specificed in glances. `disk:<disk_id>`: Disk I/O data for the specified disk. Replace `<disk_id>` with the id of your disk, e.g., `disk:sdb`, as specified in glances.
`gpu:<gpu_id>`: GPU usage for the specified GPU. Replace `<gpu_id>` with the id of your GPU, e.g., `gpu:0`, as specificed in glances. `gpu:<gpu_id>`: GPU usage for the specified GPU. Replace `<gpu_id>` with the id of your GPU, e.g., `gpu:0`, as specified in glances.
`fs:<mnt_point>`: Disk usage for the specified mount point. Replace `<mnt_point>` with the path of your disk, e.g., `/mnt/storage`, as specificed in glances. `fs:<mnt_point>`: Disk usage for the specified mount point. Replace `<mnt_point>` with the path of your disk, e.g., `/mnt/storage`, as specified in glances.
## Views ## Views
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 pass `chart: false` as an option to the widget, like so:
```yaml ```yaml
- Network Usage: - Network Usage:

View File

@@ -3,12 +3,14 @@ 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. !!! note
Requires [HTTP control server options](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md) to be enabled. By default this runs on port `8000`.
Allowed fields: `["public_ip", "region", "country"]`. 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:port
``` ```

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

@@ -0,0 +1,35 @@
---
title: iFrame
Description: Add a custom iFrame Widget
---
A basic iFrame widget to show external content, see the [MDN docs](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) for more details about some of the options.
!!! warning
Requests made via the iFrame widget are inherently **not proxied** as they are made from the browser itself.
## Basic Example
```yaml
widget:
type: iframe
name: myIframe
src: http://example.com
```
## Full Example
```yaml
widget:
type: iframe
name: myIframe
src: http://example.com
classes: h-60 sm:h-60 md:h-60 lg:h-60 xl:h-60 2xl:h-72 # optional, use tailwind height classes, see https://tailwindcss.com/docs/height
referrerPolicy: same-origin # optional, no default
allowPolicy: autoplay fullscreen gamepad # optional, no default
allowFullscreen: false # optional, default: true
loadingStrategy: eager # optional, default: eager
allowScrolling: no # optional, default: yes
refreshInterval: 2000 # optional, no default
```

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
``` ```

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