Compare commits

...

428 Commits

Author SHA1 Message Date
Crowdin Bot
06d8d9bd1d New Crowdin translations by GitHub Action 2025-11-22 00:34:23 +00:00
shamoon
4031178831 Enhancement: treat 'error' as custom api field when mapped (#5999) 2025-11-21 10:36:31 -08:00
shamoon
b65c8399d8 Handle raw number errors, I guess 2025-11-21 10:05:01 -08:00
Darkangeel_hd
6b63cfd491 Chore: change MySpeed blocks layout order (#5984) 2025-11-17 06:57:47 -08:00
shamoon
196c51bf73 Enhancement: support limit crowdsec alerts to 24h (#5981)
Co-authored-by: MountainGod2 <admin@reid.ca>
2025-11-16 16:38:55 -08:00
qmph22
17c9b2631e Enhancement: add net worth field for ghostfolio (#5958)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-11-13 00:31:55 +00:00
Diego Barreiro Perez
1a21189643 Enhancement: Allow Disabling Indexing (#5954)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-11-13 00:13:16 +00:00
shamoon
b6b428363c 1.7.0 2025-11-11 09:03:26 -08:00
shamoon
e707fa46cf Revert "Development: specify pnpm version (#5364)"
This reverts commit 0c6c40dae7.
2025-11-11 09:03:15 -08:00
shamoon
3d040362cb Merge branch 'dev' 2025-11-11 09:00:14 -08:00
github-actions[bot]
57b193b037 New Crowdin translations by GitHub Action (#5953) 2025-11-11 08:59:39 -08:00
shamoon
8a75c9b6e3 Fixhancement: improve UID support (#5963) 2025-11-11 08:56:44 -08:00
Alessandro Travi
0dafc792f7 Documentation: note support for omada controller version 6 (#5961) 2025-11-10 23:07:28 -08:00
shamoon
afc0fe29ee Fix: enforce max field blocks for esp home widget (#5951) 2025-11-08 12:32:41 -08:00
shamoon
817a9bbce5 Clarify showSummary precedence in Komodo widget docs 2025-11-05 08:44:31 -08:00
dependabot[bot]
3ef7031eb0 Chore(deps): Bump docker/setup-qemu-action from 3.6.0 to 3.7.0 (#5939) 2025-11-05 16:41:24 +00:00
shamoon
6faf32eae9 Chore: better guard against empty data in komodo widget 2025-11-05 08:32:33 -08:00
shamoon
455e86571a Chore: improve event hash generation in iCal integration (#5938) 2025-11-05 08:11:24 -08:00
shamoon
7d1e0c087a Bump version to 1.6.1 2025-11-04 16:20:12 -08:00
shamoon
d48ef4c038 Merge branch 'dev' 2025-11-04 16:19:56 -08:00
shamoon
4a2eeaa8b9 Fix: correct cached version check (#5933) 2025-11-04 13:59:35 -08:00
shamoon
faa2e6bb36 Fix: ensure minimum height for inner container (#5930) 2025-11-04 10:12:49 -08:00
shamoon
438543d8cd Bump version to 1.6.0 2025-11-04 08:07:34 -08:00
shamoon
5a350cc9ce Merge branch 'dev' 2025-11-04 08:07:14 -08:00
github-actions[bot]
529814cf03 New Crowdin translations by GitHub Action (#5802)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-11-04 07:54:08 -08:00
shamoon
9b5275a854 Enhancement: support omada controller v6 (#5926) 2025-11-04 06:17:00 -08:00
dependabot[bot]
e623196ac0 Chore(deps): Bump pretty-bytes from 6.1.1 to 7.1.0 (#5917)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-04 00:31:10 +00:00
dependabot[bot]
973b1f7aaf Chore(deps): Bump @headlessui/react from 2.2.7 to 2.2.9 (#5919)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-04 00:18:52 +00:00
dependabot[bot]
81a322cc99 Chore(deps-dev): Bump eslint-config-prettier from 10.1.1 to 10.1.8 (#5918)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-04 00:02:46 +00:00
dependabot[bot]
36e82a8b90 Chore(deps-dev): Bump prettier-plugin-organize-imports from 4.1.0 to 4.3.0 (#5915)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-03 23:53:02 +00:00
shamoon
1383e22acd Change: use glances memory available instead of free (#5923) 2025-11-03 15:32:36 -08:00
Charles Ng
a756a01d63 Documentation: correct Unraid widget allowed fields (#5908) 2025-10-29 18:52:15 -07:00
oharvey2090
937efc9f1b Performance: emby widget prevent sessions query if now playing disabled (#5907) 2025-10-29 18:50:08 -07:00
shamoon
fe6f32f072 Update getting-started.md 2025-10-29 14:29:17 -07:00
shamoon
226603770c Rename docker stats to container 2025-10-23 14:33:20 -07:00
Darkangeel_hd
2f48d21bfd Change: adjust MySpeed blocks order (#5881) 2025-10-16 18:42:33 -07:00
dependabot[bot]
4457baffa5 Chore(deps): Bump actions/setup-node from 5 to 6 (#5873)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-14 09:15:40 -07:00
shamoon
91d12c401c Feature: fields highlighting (#5868) 2025-10-13 19:37:52 -07:00
shamoon
3f8da51aeb Fix: fix uptime robot for empty logs (#5866) 2025-10-13 07:43:26 -07:00
shamoon
837717461f Fix: count only error status as failures in backrest (#5844) 2025-10-04 07:37:22 -07:00
dependabot[bot]
effedc28ed Chore(deps-dev): Bump @tailwindcss/postcss from 4.0.9 to 4.1.14 (#5832)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-01 18:12:24 +00:00
dependabot[bot]
76b477572e Chore(deps): Bump gamedig from 5.3.1 to 5.3.2 (#5831)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-01 17:51:03 +00:00
dependabot[bot]
6c6660b91b Chore(deps): Bump i18next from 24.2.3 to 25.5.3 (#5833)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-01 17:38:29 +00:00
dependabot[bot]
6886040798 Chore(deps): Bump raw-body from 3.0.0 to 3.0.1 (#5834)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-01 17:21:12 +00:00
dependabot[bot]
1fb4850bef Chore(deps-dev): Bump eslint-plugin-prettier from 5.5.1 to 5.5.4 (#5835)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-01 10:11:32 -07:00
shamoon
06cf76d724 Fix: restore bg image to body again (#5828) 2025-09-30 09:07:20 -07:00
Kulana Kryoseu
7aeda56af4 Documentation: clarify proxmox.yaml key must match Proxmox node name (#5823)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-09-30 06:19:25 +00:00
Kulana Kryoseu
2058b7fcae Documentation: add Kubernetes config file mounting instructions (#5825) 2025-09-29 23:11:03 -07:00
Matszwe02
1e06e93e47 Fix: specify color-scheme meta for darkreader (#5819) 2025-09-27 11:55:29 -07:00
AdamWHY2K
8f756d4084 Enhancement: Add size of torrent(s) in leechProgress list to qbittorrent widget (#5803) 2025-09-26 23:28:15 -07:00
Yevhen Kuzmovych
02089a35ee Feature: Your spotify widget (#5813)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-09-24 21:08:15 -07:00
shamoon
f7a6b7dbf4 Documentation: clarify Unraid widget API key requirement, for now 2025-09-23 08:48:53 -07:00
shamoon
4028194830 Bump version to 1.5.0 2025-09-22 08:18:10 -07:00
shamoon
4c04a7a45f Merge branch 'dev' 2025-09-22 08:17:08 -07:00
github-actions[bot]
ce344a9db5 New Crowdin translations by GitHub Action (#5800)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-09-22 07:57:35 -07:00
github-actions[bot]
8e90ece498 New Crowdin translations by GitHub Action (#5695)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-09-21 16:30:51 -07:00
shamoon
151ad552ca Fix: dont lose color when switching light / dark (#5796) 2025-09-21 16:29:37 -07:00
shamoon
251cb65e12 Enhancement: mobile QuickLaunch button (#5789) 2025-09-18 22:52:16 -07:00
Ariel David Buena
8ebd0d0b2e Documentation: fix typo (#5770) 2025-09-11 18:46:27 -07:00
shamoon
c20f71738b Change Crowdin project link in sponsors.md 2025-09-10 19:48:31 -07:00
shamoon
78b73e8166 Refactor basic auth header generation 2025-09-04 10:23:43 -07:00
dependabot[bot]
547ef0c4c5 Chore(deps): Bump actions/setup-python from 5 to 6 (#5746)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-04 16:55:44 +00:00
dependabot[bot]
11d148fff0 Chore(deps): Bump actions/setup-node from 4 to 5 (#5747)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-04 16:44:40 +00:00
dependabot[bot]
eb61d69626 Chore(deps): Bump actions/stale from 9 to 10 (#5745)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-04 16:29:39 +00:00
dependabot[bot]
876304cda5 Chore(deps): Bump actions/github-script from 7 to 8 (#5744)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-04 09:13:22 -07:00
dNhax
65dce6d387 Enhancement: support multiple proxmox nodes (#5539)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-09-04 08:49:41 +00:00
Derek Kaser
7b60a60d4e Feature: Backrest widget (#5741)
Co-authored-by: Renan Greca <renangreca@gmail.com>
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-09-03 21:47:10 +00:00
dependabot[bot]
8d37cad871 Chore(deps): Bump next from 15.4.5 to 15.5.2 (#5738)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-03 20:09:13 +00:00
dependabot[bot]
cd25ae3258 Chore(deps): Bump recharts from 2.15.3 to 3.1.2 (#5739)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-03 20:01:08 +00:00
dependabot[bot]
a27cdbc284 Chore(deps): Bump tough-cookie from 5.1.2 to 6.0.0 (#5737)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-03 19:32:00 +00:00
dependabot[bot]
e772ef0ad1 Chore(deps): Bump gamedig from 5.2.0 to 5.3.1 (#5736)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-03 19:23:44 +00:00
dependabot[bot]
8cc00ae09a Chore(deps): Bump @headlessui/react from 1.7.19 to 2.2.7 (#5735)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-03 12:14:04 -07:00
shamoon
f4efc71350 Update jellyseerr.md 2025-08-29 17:22:41 -07:00
AdamWHY2K
b663e56174 Enhancement: Add issues field to Jellyseerr widget (#5725)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-08-29 18:14:13 +00:00
shamoon
5fe5a3869e Chore: update mkdocs (#5708) 2025-08-23 16:21:30 -07:00
Kieran
a9ec5aa1e7 Documentation: Document needed permissions for Immich (#5706) 2025-08-23 20:28:08 +00:00
shamoon
44405b4aae Merge branch 'main' into dev 2025-08-21 13:06:07 -07:00
Derek Kaser
842cec2fee Feature: Unraid widget (#5683)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-08-21 18:06:49 +00:00
shamoon
c6ad937619 Bump version to 1.4.6 2025-08-21 06:55:46 -07:00
shamoon
a6ab095ff9 Update component.jsx 2025-08-20 13:29:43 -07:00
shamoon
9a085bcb17 Enhancement: handle authentik v2025.8.0 breaking API changes (#5687) 2025-08-20 13:27:21 -07:00
github-actions[bot]
6d7be1c7f2 New Crowdin translations by GitHub Action (#5679)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-08-18 23:55:25 -07:00
shamoon
25cd51cee9 Update repo-maintenance.yml 2025-08-18 23:54:22 -07:00
Vincent Verdeil
495de204d1 Documentation: fix typo in docs/configs/settings.md (#5671) 2025-08-14 17:30:48 -07:00
shamoon
8e5f4d55c9 Bump version to 1.4.5 2025-08-13 06:44:47 -07:00
shamoon
184fd65c76 Update resources.js 2025-08-13 06:44:47 -07:00
shamoon
15817f9b27 Update package.json 2025-08-13 06:35:11 -07:00
shamoon
79671ac30e Merge branch 'dev' 2025-08-13 06:17:38 -07:00
github-actions[bot]
1d5db612fd New Crowdin translations by GitHub Action (#5655)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-08-13 06:16:35 -07:00
shamoon
d30016304b Security: refactor disk resource lookup logic (#5666) 2025-08-13 06:16:12 -07:00
Markus Thierolf
f0fd125e37 Enhancement: summarize charge power of all loadpoints in evcc widget (#5663) 2025-08-12 08:46:23 -07:00
dependabot[bot]
9ed4b85d5a Chore(deps): Bump actions/checkout from 4 to 5 (#5660)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-11 17:21:06 -07:00
shamoon
f607d806d0 Bump version to 1.4.4 2025-08-08 11:32:46 -04:00
shamoon
c0ddb5f816 Merge branch 'dev' 2025-08-08 11:32:29 -04:00
github-actions[bot]
fc563532e1 New Crowdin translations by GitHub Action (#5626)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-08-08 11:28:06 -04:00
shamoon
98248903c6 Enhancement: support Tandoor v2 api structure (#5646) 2025-08-06 15:57:02 -04:00
shamoon
5870111d11 Enhancement: Auto-request geolocation if permission already granted (#5638) 2025-08-04 23:16:22 -04:00
shamoon
bb23c25690 Fix: try to restore iframe transparency by restoring light scheme (#5637) 2025-08-04 23:01:26 -04:00
shamoon
4084c8dafc Add fields to trilium docs 2025-08-04 14:52:10 -04:00
Matan Heimann
cb1dde1b79 Documentation: fix missing references to Wallos documentation doc (#5633)
Co-authored-by: MH <m@terramail.co>
2025-08-04 14:50:15 -04:00
shamoon
1691711a52 Bump version to 1.4.3 2025-08-03 11:02:00 -04:00
shamoon
b5d8f6c01c Merge branch 'dev' 2025-08-03 11:01:44 -04:00
github-actions[bot]
db86b5408a New Crowdin translations by GitHub Action (#5614)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-08-03 11:01:23 -04:00
shamoon
4be2c2868b Fix bg opacity calculation (#5622) 2025-08-03 10:52:45 -04:00
Yann Hodiesne
c6197a9f92 Fix: properly handle UptimeRobot errors (#5621) 2025-08-03 10:50:26 -04:00
shamoon
dd861d7d1c Enhancement: handle evcc 0.207 breaking change (#5619) 2025-08-03 08:12:19 -04:00
shamoon
e65f8c46f9 Update package.json 2025-08-02 18:52:19 -04:00
shamoon
082e1316c1 Fix: set body background color (#5611) 2025-08-02 17:44:35 -04:00
shamoon
a4b5e72d82 Fix: properly handle classlist with light theme (#5612) 2025-08-02 17:38:00 -04:00
shamoon
0e79501ddc Bump version to 1.4.1 2025-08-02 08:42:07 -04:00
shamoon
4814ee48ef Merge branch 'dev' 2025-08-02 08:40:54 -04:00
github-actions[bot]
5b7a36666c New Crowdin translations by GitHub Action (#5370)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-08-02 08:23:50 -04:00
shamoon
75b27a644b Update immich.md 2025-08-02 08:11:47 -04:00
dependabot[bot]
b3bde11e3a Chore(deps-dev): Bump postcss from 8.5.3 to 8.5.6 (#5600)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-02 03:44:51 +00:00
dependabot[bot]
8fdf2b074c Chore(deps): Bump dockerode from 4.0.4 to 4.0.7 (#5599)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-02 03:28:51 +00:00
dependabot[bot]
20c4400a9b Chore(deps): Bump next from 15.3.1 to 15.4.5 (#5601)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-02 03:06:10 +00:00
dependabot[bot]
1a7e57bfb6 Chore(deps-dev): Bump eslint-plugin-import from 2.31.0 to 2.32.0 (#5598)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-02 02:58:21 +00:00
dependabot[bot]
07f70a79be Chore(deps): Bump follow-redirects from 1.15.9 to 1.15.11 (#5597)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-02 02:49:30 +00:00
shamoon
a2e3aa7085 Refactor background image rendering in Wrapper 2025-08-01 20:51:40 -04:00
shamoon
085d91b3f7 Ensure full viewport height for inner wrapper 2025-08-01 08:59:14 -04:00
shamoon
9417929c99 Fix background application from ssr 2025-08-01 08:17:23 -04:00
shamoon
6bc5f0f499 Fix: revert to default background opacity to 0 2025-07-29 21:37:17 -04:00
shamoon
fa2efb1ac9 Fix: fix error handling in Portainer Kubernetes widget (#5584) 2025-07-27 23:07:37 -04:00
shamoon
8c4e73e122 Fixhancement: restore native scrolling, background (#5573) 2025-07-25 18:01:03 -07:00
Albin Médoc
0c000c1ecd Feature: Filebrowser service widget (#5546)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-07-25 17:08:43 -07:00
shamoon
bbb013e0ce Fix: Handle Romm v3.10.0 filesize breaking change (#5565) 2025-07-24 14:03:01 -07:00
Matan Heimann
d581d70d1a Feature: wallos service widget (#5562)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-07-24 06:07:26 +00:00
AdamWHY2K
612d05fd4d Enhancement: Add extra details to jellyfin's now playing music (#5557) 2025-07-22 18:06:04 +00:00
Chris
0d6ecae51b Fix: fix cpu percent for Proxmox stats (#5528) 2025-07-20 16:42:53 -07:00
shamoon
c48cf71d59 Docs: Add missing pages 2025-07-17 11:39:52 -07:00
shamoon
7f630fd77f Remove insiders 2025-07-16 22:10:36 -07:00
lowcarbdev
aa942dbd73 Documentation: Add Download Station to the list of allowed Synology applications (#5517) 2025-07-15 21:54:08 -07:00
shamoon
7426a12cdf Bump version to 1.4.0 2025-07-15 09:38:15 -07:00
shamoon
cbf2e1a509 Merge branch 'dev' 2025-07-15 09:32:52 -07:00
shamoon
d0165326a6 Tweak: Improve ownership check and chown handling for .next dir (#5513) 2025-07-15 06:56:46 -07:00
Oriano de Stefani
dba3a1f893 Enhancement: support for new grafana alerting api (#5476)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-07-12 08:36:13 -07:00
shamoon
f5ecd6d787 Fix: fix glances info when cpu = 0 (#5506) 2025-07-11 19:47:31 -07:00
Đức
1d990ef7c7 Fix: increase color popover z-index (#5489) 2025-07-07 09:29:48 -07:00
dependabot[bot]
767e7c58b4 Chore(deps): Bump react-i18next from 11.18.6 to 15.5.3 (#5470)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-01 11:58:43 -07:00
dependabot[bot]
c393982e84 Chore(deps-dev): Bump eslint-plugin-prettier from 5.2.6 to 5.5.1 (#5471)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-01 17:26:59 +00:00
dependabot[bot]
927b943fa4 Chore(deps-dev): Bump prettier from 3.5.3 to 3.6.2 (#5468)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-01 16:59:47 +00:00
dependabot[bot]
50f6d5f0e7 Chore(deps): Bump systeminformation from 5.25.11 to 5.27.7 (#5469)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-01 16:36:48 +00:00
dependabot[bot]
0482bf7b17 Chore(deps-dev): Bump eslint-plugin-react-hooks from 5.1.0 to 5.2.0 (#5467)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-01 09:25:23 -07:00
AdamWHY2K
e215e7d70e Enhancement: sort qBittorrent leechProgress (#5456) 2025-06-28 14:23:02 -07:00
Mark McKinney
0a44a2dade Enhancement: add links to sonarr and radarr calendar widget items (#5448) 2025-06-26 05:30:00 +00:00
shamoon
0fe76b5af8 Enhancement: include ua for outlook ical integrations (#5444) 2025-06-23 11:30:34 -07:00
shamoon
e51db24418 Update launch configuration 2025-06-23 11:06:30 -07:00
shamoon
1a1039194c Move up glacnes info background 2025-06-22 17:48:53 -07:00
shamoon
00bb1a3f37 Enhancement: improve glances info widget spacing (#5425) 2025-06-13 10:18:26 -07:00
Albin Médoc
73aa2018a8 Enhancement: add kubernetes support to portainer widget (#5414)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-06-13 07:17:20 +00:00
Andrew Ensley
8ce9e57ed8 Enhancement: Komodo widget (#5407)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-06-11 16:05:53 +00:00
shamoon
6e16adc460 Change: preserve trailing slash in custom api calls (#5410) 2025-06-10 16:02:48 -07:00
shamoon
352c54ecc4 Remove inaccurate POST examples from authoring docs 2025-06-10 13:52:08 -07:00
André Bürger
a64c83209a Enhancement: add enableMediaControl flag to hide play/pause controls for emby/jellyfin (#5402) 2025-06-09 09:41:48 -07:00
Jayden
1147fc858f Documentation: fix beszel documentation typo (#5400) 2025-06-09 06:34:19 -07:00
shamoon
fcfb9c2237 Fix typo in k8s error logging 2025-06-08 06:51:17 -07:00
shamoon
34bffe980a Change: use glances rss instead of data for process memory reporting (#5392) 2025-06-07 15:49:07 -07:00
Albin Médoc
5759596a37 Feature: Proxmox status & stats integration (#5385)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-06-06 07:25:21 -07:00
shamoon
30abf4e422 Add k8s yaml to validate 2025-06-05 20:51:31 -07:00
Jon Fuller
0e96778740 Feature: Trilium Service widget (#5380)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-06-05 03:29:43 +00:00
dependabot[bot]
fc99a0d1db Chore(deps-dev): Bump tailwind-scrollbar from 4.0.1 to 4.0.2 (#5366)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-02 00:18:49 +00:00
dependabot[bot]
417d69d39d Chore(deps): Bump luxon from 3.5.0 to 3.6.1 (#5365)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-02 00:01:52 +00:00
dependabot[bot]
8f4013012a Chore(deps-dev): Bump prettier from 3.5.2 to 3.5.3 (#5368)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-01 23:47:34 +00:00
shamoon
0c6c40dae7 Development: specify pnpm version (#5364) 2025-06-01 16:36:08 -07:00
shamoon
1a46baae69 Bump version to 1.3.2 2025-06-01 11:58:58 -07:00
shamoon
0fa3d7e57b Fix: fix gluetun port_forwarded detection (#5362) 2025-06-01 11:58:44 -07:00
shamoon
be7e1115cc Allow ci for all changes to allow requiring checks to pass 2025-06-01 10:33:22 -07:00
shamoon
dc0fede4d2 Bump version to 1.3.1 2025-06-01 09:48:02 -07:00
shamoon
7850fe4651 Fix: make gluetun port_forwarded opt-in (#5345) 2025-06-01 09:10:18 -07:00
shamoon
524cb7695c Enhancement: support breaking changes in wg-easy v15 (#5343) 2025-05-31 22:08:49 -07:00
shamoon
35be5559b3 Merge branch 'dev' 2025-05-31 18:51:54 -07:00
shamoon
75ff2e674f Bump version to 1.3.0 2025-05-31 18:51:22 -07:00
github-actions[bot]
edab958328 New Crowdin translations by GitHub Action (#5228)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-05-31 18:51:04 -07:00
Octavian Dinu
2334021da0 Documentation: fix port typo in docker.md (#5333) 2025-05-30 16:35:49 -07:00
shamoon
1079d33ad1 Update support template 2025-05-28 11:03:44 -07:00
Tim Englart
42c69db7da Fix: glances info widget system data out of bounds (#5316) 2025-05-24 07:59:07 -07:00
shamoon
27a392dcce Chore: improve PUID/PGID support (#5314) 2025-05-23 19:39:14 -07:00
shamoon
74c2a2462b Fix lint 2025-05-22 19:17:27 -07:00
Dmitry Chumak
0d47fa8215 Enhancement: Checkmk widget (#5301)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-05-22 10:07:53 -07:00
shamoon
ee07a7dcbe Fix: remove non-working pathPrefix option for docker connections 2025-05-22 09:45:18 -07:00
Florian Apolloner
6cf3abd45e Enhancement: Support more docker API connection options. (#5304) 2025-05-22 07:35:29 -07:00
shamoon
ea37ab2f78 Enhancement: support nested services via labels for mixed layout-only groups (#5295) 2025-05-20 23:29:22 -07:00
shamoon
564a0880b0 Chore: approve sharp build script 2025-05-20 19:31:45 -07:00
hank
f8768711da Fix: refresh beszel token if empty list is returned (#5292)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-05-20 17:40:59 -07:00
Ben Scholer
6abb3d8758 Documentation: fix typo in settings (#5287) 2025-05-18 10:36:56 -07:00
Marcin Grabda
3f160cc4ae Enhancement: support specifying protocol for Docker Socket Proxy (#5285)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-05-18 07:02:35 -07:00
shamoon
81547f8806 Chore: disable default provenance attestations to try and fix manifest issues
https://github.com/orgs/community/discussions/45969
2025-05-15 20:19:02 -07:00
Jasper
d5f66e12fc Enhancement: Add port_forwarded field to Gluetun widget (#2262) 2025-05-12 08:16:13 -07:00
shamoon
9c7e177b4f Documentation: fix references to common.json file 2025-05-09 00:56:41 -07:00
Adam
49ad01733c Documentation: fix jdownloader widget documentation (#5252) 2025-05-08 13:19:37 -07:00
Garrett
6c82883fa9 Enhancement: respect search engine order from config (#5250) 2025-05-08 00:40:51 -07:00
Matheus Vellone
3c6f99d5ae Chore: change to ical.js for ical parsing (#5241)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-05-07 08:20:04 -07:00
shamoon
b28cc0b7f6 Fix: ensure https protocol with docker tls (#5248) 2025-05-06 07:54:45 -07:00
InsertDisc
2509d8c235 Enhancement: add optional token parameter for gamedig (#5245)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-05-05 09:02:47 -07:00
Ryan
a0868e3201 Documentation: add data store option to PBS widget (#5243) 2025-05-03 15:02:29 -07:00
Zlendy
7e8752243c Feature: Jellystat widget (#5185)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-05-03 08:26:56 -07:00
Tersius Kuhne
41dc2e77cb Documentation: update Gateway API HttpRoute documentation (#5239)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-05-02 19:03:31 -07:00
dependabot[bot]
8b50296dad Chore(deps-dev): Bump eslint-plugin-prettier from 5.2.3 to 5.2.6 (#5232)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-01 21:45:20 +00:00
dependabot[bot]
61a669c85d Chore(deps): Bump next from 15.2.4 to 15.3.1 (#5231)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-01 14:44:41 -07:00
dependabot[bot]
af7803fd04 Chore(deps-dev): Bump eslint from 9.21.0 to 9.25.1 (#5230)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-01 14:43:39 -07:00
dependabot[bot]
937cecf24e Chore(deps): Bump recharts from 2.15.1 to 2.15.3 (#5234)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-01 14:42:27 -07:00
shamoon
c562016cce Merge branch 'dev' 2025-04-28 10:43:58 -07:00
shamoon
2376184b14 Bump version to 1.2.0 2025-04-28 10:43:35 -07:00
github-actions[bot]
7272823d20 New Crowdin translations by GitHub Action (#5092)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-04-28 10:43:35 -07:00
shamoon
3223b1fb87 Merge branch 'dev' 2025-04-28 08:24:26 -07:00
github-actions[bot]
38f60a7566 New Crowdin translations by GitHub Action (#5092)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-04-28 08:23:41 -07:00
shamoon
63e521ae93 Merge branch 'dev' 2025-04-28 08:21:29 -07:00
shamoon
cf54c7b824 Bump version to 1.1.2 2025-04-28 08:20:50 -07:00
choehn86
4a9ca62efd Enhancement: Add support for specifying a datastore to PBS widget (#4614)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-04-28 08:00:02 -07:00
Rayan Mestiri
a35da39c03 Enhancement: add label formatting for dynamic-list customapi widget (#5217) 2025-04-25 01:11:03 -07:00
xethlyx
d99c3cb691 Fix: kubernetes statistics not respecting selector (#5199) 2025-04-20 17:39:56 -07:00
Kevin Stone
1fe4f49771 Fix: Longhorn still showing Total despite total: false (#5200) 2025-04-20 17:39:25 -07:00
dependabot[bot]
0a1bf3b2be Chore(deps): Bump next from 15.2.3 to 15.2.4 (#5159)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-08 15:08:54 -07:00
shamoon
23e9982a7a Documentation: clarify unique subgroups requirement 2025-04-08 13:57:15 -07:00
shamoon
e2c997f29d Change: install iputils-ping inside docker image (#5153) 2025-04-07 23:59:22 -07:00
shamoon
ae9fbdcb8b Chore: change hoarder widget to karakeep (#5143) 2025-04-05 23:54:48 -07:00
FromTheCToTheG
a60dbb7abc Documentation: add info re proxmox backup server key (#5122)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-04-03 07:29:53 -07:00
shamoon
6597ec566b Fix translation issue 2025-04-01 09:52:33 -07:00
shamoon
52399e21e1 Fix depth issue with t 2025-04-01 09:48:28 -07:00
dependabot[bot]
dbc26e835c Chore(deps): Bump swr from 1.3.0 to 2.3.3 (#5111)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:36:44 -07:00
dependabot[bot]
a59ee5a605 Chore(deps-dev): Bump eslint-config-next from 15.1.7 to 15.2.4 (#5113)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:32:05 -07:00
dependabot[bot]
f46568ec2a Chore(deps-dev): Bump eslint-config-prettier from 10.0.2 to 10.1.1 (#5112)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:24:46 -07:00
dependabot[bot]
5e946ed2c2 Chore(deps-dev): Bump postcss from 8.5.2 to 8.5.3 (#5110)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:24:24 -07:00
dependabot[bot]
6741eb723d Chore(deps): Bump i18next from 21.10.0 to 24.2.3 (#5109)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 09:22:36 -07:00
RoboMagus
1666106dcd Chore: add more Docker Semver Tags (#5107)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-31 06:44:17 -07:00
shamoon
eda06965fa Chore: add organize imports to pre-commit (#5104) 2025-03-30 21:40:03 -07:00
shamoon
954ab54493 Speed up CI: Skip unnecessary build steps, optimize caching etc (#5098) 2025-03-30 08:52:23 -07:00
Chris
30cb893354 Fix: remove unneeded import from Hoarder widget.js (#5097) 2025-03-29 19:49:53 -07:00
shamoon
4567427b9c Enhancement: add shvl fallback for custom api dynamic list (#5091) 2025-03-28 16:32:56 -07:00
Matheus Vellone
ee7e8fab61 Fix: support shvl on customapi dynamic list target (#5081)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-28 16:29:23 -07:00
shamoon
313835c0e6 Bump version to 1.1.1 2025-03-27 20:20:02 -07:00
shamoon
999dade861 Fix: add fallback for shvl syntax (#5080) 2025-03-27 20:16:50 -07:00
shamoon
2cabe77b55 Fix: add fallback for shvl syntax 2025-03-27 20:15:39 -07:00
shamoon
0a50d5a6aa Merge branch 'main' into dev 2025-03-27 13:27:26 -07:00
shamoon
e19dcc2729 Only deploy docs from main branch 2025-03-27 13:27:20 -07:00
shamoon
cadf1433af Bump version to 1.1.0 2025-03-27 13:22:02 -07:00
shamoon
6bae078a8d Merge branch 'dev' 2025-03-27 13:21:45 -07:00
github-actions[bot]
77bbdc6a04 New Crowdin translations by GitHub Action (#5010)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-03-27 13:21:33 -07:00
shamoon
1f8fd1c69d Add install pnpm to source instructions 2025-03-23 07:11:20 -07:00
dependabot[bot]
5d557844cc Chore(deps): Bump next from 15.1.7 to 15.2.3 (#5055)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-22 07:49:16 -07:00
chiragkrishna
a4b07b91fe Enhancement: Add Repositories field to Gitea (#5053)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-22 07:45:27 -07:00
Chris
d853bbfe44 Feature: Slskd Service Widget (#5045)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-20 21:46:54 -07:00
IhatemyISP
7fd5e6ccb1 Tweak: change moonraker widget standby output (#4060)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-19 16:26:49 -07:00
shamoon
aed602ad70 Tweak: try to reduce rootless startup time (#5037) 2025-03-18 19:29:43 -07:00
shamoon
fa28a11658 Fix: include new backdrop-blur-xs option (#5030) 2025-03-17 23:30:07 -07:00
shamoon
a3b693e2b6 Support maxBookmarkGroupColumns too 2025-03-17 13:03:04 -07:00
shamoon
708c4e64d1 Tweak this 2025-03-17 12:47:34 -07:00
shamoon
11a6b5d0b8 Enhancement: support maximum group cols up 8 (#5022) 2025-03-17 12:32:09 -07:00
shamoon
ce0102eb6f Enhancement: support full width container (#5021) 2025-03-17 12:25:10 -07:00
shamoon
42f1ed3c47 Update customapi.md 2025-03-17 11:49:35 -07:00
shamoon
dca23e8547 Enhancement: support shvl syntax for customapi fields (#5020) 2025-03-17 11:47:55 -07:00
morliont
8d20f22932 Enhancement: support dynamic list rendering in custom api widget (#5012)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-17 11:30:01 -07:00
shamoon
071b5275bc Documentation: fix install page buttons 2025-03-17 11:19:27 -07:00
shamoon
de9c015f7f Fix: fix minecraft players after move to minecraftstatuspinger (#5017) 2025-03-17 07:24:12 -07:00
shamoon
b4dc53c7c0 Feature: allow disable ipv6 in proxy, refactor cacheFetch to use proxy (#5011) 2025-03-16 20:09:34 -07:00
shamoon
934ad3a6f1 Fix: remove medusa widget trailing slash (#5007) 2025-03-16 15:33:38 -07:00
shamoon
6fbe080b28 Bump version to 1.0.4 2025-03-16 14:13:12 -07:00
shamoon
4047f8d6e8 Merge branch 'dev' 2025-03-16 14:12:45 -07:00
github-actions[bot]
59cd5564f8 New Crowdin translations by GitHub Action (#4985)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-03-16 14:12:30 -07:00
shamoon
5f19e4af91 Fix: fix custom quicklaunch search without search widget (#5003) 2025-03-16 13:12:20 -07:00
shamoon
5ea46881ee Fix: re-add tailwind css safelist (#4999) 2025-03-16 08:32:27 -07:00
shamoon
9545757bb9 Fix: fix bookmark heights again (#4997) 2025-03-16 07:33:30 -07:00
shamoon
95507aab54 Change: re-enable k8s ingress by default (#4988) 2025-03-16 02:35:43 -07:00
shamoon
564dfb7ce3 Add k3d ingress setting and HOMEPAGE_ALLOWED_HOSTS 2025-03-15 21:05:11 -07:00
shamoon
7b72442114 Update index.md 2025-03-15 16:29:02 -07:00
shamoon
65370a7668 Fix: fix Kubernetes stats in v1.0.0 (#4984)
Co-authored-by: djeinstine <2105133+djeinstine@users.noreply.github.com>
2025-03-15 16:23:29 -07:00
shamoon
6e9339b14c Chore: update minecraftstatuspinger to 1.2.2 (#4982) 2025-03-15 15:30:21 -07:00
shamoon
241c786710 Merge branch 'main' into dev 2025-03-15 10:18:34 -07:00
shamoon
801ce479d8 Add links to docs 2025-03-15 10:18:26 -07:00
shamoon
16730ffec2 Merge branch 'main' into dev 2025-03-15 09:46:36 -07:00
shamoon
b35dd80e8c Improve docs 2025-03-15 09:46:23 -07:00
shamoon
82b159bf14 Improve docs 2025-03-15 09:30:10 -07:00
shamoon
6292a0709c Bump version to 1.0.3 2025-03-15 07:43:43 -07:00
shamoon
42af93bef3 Merge branch 'dev' 2025-03-15 07:43:30 -07:00
Xavier Alexander
964991781c Documentation: add HOMEPAGE_ALLOWED_HOSTS to k8s docs (#4969) 2025-03-15 07:40:26 -07:00
shamoon
607a14083e Fix: jellyfin handle empty episode numbers (#4970) 2025-03-15 07:38:35 -07:00
shamoon
133a0a6539 Fix this 2025-03-15 07:31:15 -07:00
shamoon
0d0f465e16 Update index.md 2025-03-15 07:16:42 -07:00
shamoon
16c1b2da9b Enhancement: allow disabling host header checking (#4967) 2025-03-15 07:14:41 -07:00
shamoon
4761a56b3d Remove reference to helm chart 2025-03-15 07:13:23 -07:00
shamoon
9d40b67d49 Change: prefer IPv4 in docker image (#4954) 2025-03-14 22:51:07 -07:00
shamoon
97f4bcbdb0 Documentation: note disable ipv6 2025-03-14 22:35:47 -07:00
brikim
ea1375e575 Fix: correct units for speedtest tracker API v2 (#4950)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-14 22:02:13 -07:00
shamoon
733a3140d1 Documentation: note komga api key 2025-03-14 21:16:20 -07:00
shamoon
b5ac617597 Fix: fix kavita API body with key (#4948) 2025-03-14 21:09:46 -07:00
shamoon
9b06212a92 Fix: wrapping in bookmarks (#4945) 2025-03-14 18:29:27 -07:00
shamoon
6b4182ab96 Merge branch 'dev' 2025-03-14 18:16:55 -07:00
shamoon
8656b8e2f1 Revert hostname change 2025-03-14 18:16:45 -07:00
shamoon
dd8e9270f2 bump version 2025-03-14 17:59:05 -07:00
shamoon
90dd8e5967 Update index.md 2025-03-14 16:59:52 -07:00
shamoon
6fca9e342d Bump version to 1.0.1 2025-03-14 15:42:56 -07:00
shamoon
66a8b1c21e Just remove hostname 2025-03-14 15:13:08 -07:00
shamoon
a0dc8c9ccb Fix: fix larger breakpoint (#4935) 2025-03-14 14:20:33 -07:00
shamoon
8190260400 Fix: fix plex total size with larger libraries (#4933) 2025-03-14 14:12:33 -07:00
shamoon
7ced73b206 Merge branch 'main' into dev 2025-03-14 12:49:46 -07:00
shamoon
a2f4dd289b Update README.md 2025-03-14 12:48:03 -07:00
shamoon
0c7cac74ea Update docker.md 2025-03-14 12:47:32 -07:00
shamoon
d81fcee31f Merge branch 'main' into dev 2025-03-14 12:31:20 -07:00
shamoon
f7889eab27 Clarify port 2025-03-14 12:31:10 -07:00
shamoon
91518d972d Update index.md 2025-03-14 12:30:22 -07:00
shamoon
a090f98fab Add HOMEPAGE_ALLOWED_HOSTS to readme 2025-03-14 12:30:22 -07:00
shamoon
5629440acf Fix: fix fiveColumns option (#4924) 2025-03-14 12:20:10 -07:00
shamoon
471800d5bc Update index.md 2025-03-14 12:18:57 -07:00
shamoon
6ab57b7b14 Update middleware.js 2025-03-14 11:58:44 -07:00
shamoon
f767ff047f Add HOMEPAGE_ALLOWED_HOSTS to readme 2025-03-14 11:23:52 -07:00
shamoon
26242d657d Bump version to 1.0.0 2025-03-14 09:00:34 -07:00
shamoon
3ff61cfad6 Merge branch 'dev' 2025-03-14 09:00:16 -07:00
github-actions[bot]
9c1ac747be New Crowdin translations by GitHub Action (#4599)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2025-03-14 08:45:52 -07:00
shamoon
859bd459a8 Feature: cache release data, allow disable release checking (#4917) 2025-03-14 08:34:59 -07:00
Chris
544b9aef2f Feature: Hoarder service widget (#4913) 2025-03-12 06:46:01 -07:00
shamoon
bea02fc8c7 Update Dockerfile 2025-03-11 13:56:20 -07:00
shamoon
1f282a1a93 Chore: migrate to pnpm only (#4907) 2025-03-11 09:41:25 -07:00
shamoon
bb5cb36491 Fix: fix another tailwind automatic error 2025-03-11 07:11:57 -07:00
Jason Sallis
9a6489c117 Documentation: correct documentation for multiple widgets in docker labels (#4766) 2025-03-11 00:59:24 -07:00
shamoon
955baf9cb1 Fix: better display tubearchivist error detail 2025-03-10 23:59:57 -07:00
shamoon
e9630afa30 Chore: add plex container size to requests (#4903) 2025-03-10 13:42:49 -07:00
shamoon
4c91dfa71b Enhancement: support automatic service discovery services with layout-only nesting (#4900) 2025-03-10 09:45:50 -07:00
shamoon
f33ff582fd Fix: fix incorrect backdrop-blur automatic change 2025-03-10 00:02:10 -07:00
Julian Nodorp
b8b5c1a4cb Fix: fix k8s get nodes error log (#4887) 2025-03-07 06:57:40 -08:00
shamoon
03cd98b1d6 Fix: use 'real_usage' for synology diskstation memory stats (#4880) 2025-03-05 09:43:23 -08:00
shamoon
f7def5c2ce Handle very long pihole session lengths 2025-03-04 18:39:53 -08:00
shamoon
d26ec27942 Enhancement: support komga API keys, breaking API changes (#4874) 2025-03-04 08:16:10 -08:00
shamoon
548b5f8081 Fix: fix pi-hole cache expiration 2025-03-03 23:21:42 -08:00
shamoon
b466be684f Fix: correct omada widget connectedGateways (#4872) 2025-03-03 17:57:01 -08:00
Arthur Leclerc
99cde187d8 Fix: return all http routes of a namespace (k8s) (#4865)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-02 22:36:16 -08:00
shamoon
d55a5e5efe Chore: upgrade to tailwind v4 (#4863) 2025-03-02 08:42:57 -08:00
Nicu Pavel
fdf405fe0a Feature: Add APC UPS widget (#4840)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-03-02 07:33:44 -08:00
dependabot[bot]
9b8dd94aae Chore(deps): Bump tough-cookie from 4.1.4 to 5.1.2 (#4857)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-01 11:26:46 -08:00
dependabot[bot]
8b1f1c391f Chore(deps-dev): Bump eslint from 9.20.1 to 9.21.0 (#4858)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-01 11:26:15 -08:00
shamoon
a8961c3345 Enhancement: support new unifi network api and api key (#4860) 2025-03-01 11:25:34 -08:00
dependabot[bot]
7f910814f8 Chore(deps-dev): Bump prettier from 3.5.1 to 3.5.2 (#4859)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-01 09:40:17 -08:00
dependabot[bot]
862b0e5821 Chore(deps-dev): Bump eslint-config-prettier from 9.1.0 to 10.0.2 (#4856)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-01 09:35:21 -08:00
dependabot[bot]
d682b6a4bf Chore(deps): Bump docker/setup-qemu-action from 3.5.0 to 3.6.0 (#4848)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-28 12:22:58 -08:00
Georges-Antoine Assi
bee16c7eb6 Documentation: remove auth info from romm widget (#4846) 2025-02-27 20:18:57 -08:00
shamoon
9097da2341 Update http.js 2025-02-27 16:50:25 -08:00
shamoon
58391ff33f Fix: subtract inactive_file from glances container memory usage (#4844) 2025-02-27 09:16:14 -08:00
dependabot[bot]
666d075ec4 Chore(deps): Bump docker/setup-qemu-action from 3.4.0 to 3.5.0 (#4836)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-26 09:07:06 -08:00
shamoon
7b7c7a5b80 Documentation: allowed hosts section 2025-02-21 20:29:52 -08:00
shamoon
1dd5a9e1b0 Enhancement: better handle recurring events poorly handled by ical library (#4807) 2025-02-20 11:29:43 -08:00
Brandon McFarlin
0fd4ac17cd Documentation: add auth documentation to PeaNUT (#4803) 2025-02-19 14:58:56 -08:00
shamoon
94738e2c0d Update reaction-comments.yml 2025-02-18 16:32:32 -08:00
shamoon
1c24bd7449 Chore: another big deps update (#4795) 2025-02-18 16:16:53 -08:00
dependabot[bot]
2881114816 Chore(deps): Bump jsonpath-plus from 10.2.0 to 10.3.0 (#4794)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-18 15:29:21 -08:00
shamoon
f1ec02fb6f Make heads up clearer 2025-02-18 10:19:18 -08:00
shamoon
68480a65db Enhancement: support API key for Kavita (#4784) 2025-02-18 00:29:36 -08:00
shamoon
63b9d395dd Update api-helpers.js 2025-02-17 21:47:55 -08:00
shamoon
a5bdfd92d7 Enhancement: improve try to prune trailing slashes (#4783) 2025-02-17 21:44:52 -08:00
shamoon
48e2c494eb Update index.md 2025-02-17 21:39:03 -08:00
shamoon
d95709de95 Merge branch 'main' into dev 2025-02-17 21:38:17 -08:00
Oleh Astappiev
cf90312089 Fixhancement: add an option to fritzbox widget to display IPv6 (#4778)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-02-16 17:10:16 -08:00
Jason Sallis
bcdd4a149b Documentation: correct documentation for multiple widgets in docker labels (#4766) 2025-02-15 09:27:04 -08:00
shamoon
96af6cf804 CI: Add back the PR exclusion for registry login 2025-02-15 09:27:04 -08:00
Dudley
b63d740ed1 Enhancement: support gamedig numplayers (#4760)
Co-Authored-By: shamoon <4887959+shamoon@users.noreply.github.com>
2025-02-15 09:27:04 -08:00
shamoon
fea4b27bb4 CI: Bump qemu action, move login earlier 2025-02-13 12:55:18 -08:00
shamoon
455103a9f1 Fix: correct k8s node response 2025-02-13 10:31:25 -08:00
Brett Dudo
277fbe8051 Fix: handle possible null reference in k8s gateway api (#4752)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-02-12 21:44:49 -08:00
shamoon
477392aa29 Documentation: add beszel superuser note 2025-02-12 16:10:19 -08:00
shamoon
e46377f461 Enhancement: better tz parsing of ical recurring events (#4749) 2025-02-12 07:38:36 -08:00
shamoon
f283b83e6e Update support.yml 2025-02-11 23:46:12 -08:00
shamoon
0a1265455b Update index.md 2025-02-11 23:40:36 -08:00
shamoon
05af70d11b [BREAKING] Enhancement: require host validation (#4744) 2025-02-11 21:30:00 -08:00
djeinstine
91d5fc8e42 Enhancement: support for Kubernetes gateway API (#4643)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
Co-authored-by: lyons <gittea.sand@gmail.com>
Co-authored-by: Brett Dudo <brett@dudo.io>
2025-02-11 18:57:22 -08:00
Randall Hand
2a95f88cdf Fix: Timezone-aware Date comparison for Calendar integration (#4742)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-02-11 18:52:32 -08:00
shamoon
0615799c6c Chore: upgrade kubernetes/client-node (#4715) 2025-02-06 16:12:42 -08:00
shamoon
839f6d4baf Enhancement: use datasets for truenas pools (#4716) 2025-02-06 16:12:09 -08:00
shamoon
cc6fe63d40 Fix nesting with unsorted groups (#4711) 2025-02-04 20:45:39 -08:00
shamoon
ae500fd983 Update getting-started.md 2025-02-04 09:36:41 -08:00
shamoon
873c265205 Enhancement: filter prometheus API endpoint for active only (#4701) 2025-02-03 08:56:40 -08:00
shamoon
07dff4c8a5 Enhancement: support speedtest v1.2 API (#4695) 2025-02-02 19:11:08 -08:00
Marc Zottner
cbacf458b2 Fix: correct package version number (#4691) 2025-02-02 08:05:25 -08:00
Amjad Alsharafi
cae304b7eb Feature: Firefly widget (#4683)
Signed-off-by: Amjad Alsharafi <26300843+Amjad50@users.noreply.github.com>
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-02-01 19:40:21 -08:00
shamoon
e6a821ecc3 Bind all addreses in docker container 2025-01-27 10:50:44 -08:00
shamoon
49036a9738 Fix: fix semver detection bug 2025-01-27 00:23:20 -08:00
shamoon
0197b449ed [BREAKING] Chore: update to next v15 (#4661) 2025-01-26 00:20:41 -08:00
shamoon
dc3382447c Fix: fix overlap with glances charts in multi-widgets (#4653) 2025-01-24 16:53:14 -08:00
shamoon
6beaf665fb Development: pnpm lint on ci (#4646) 2025-01-23 21:38:23 -08:00
shamoon
b9622f75b0 Fix: generic proxy error data display 2025-01-21 07:13:12 -08:00
shamoon
cd8c7d9016 Documentation: add note about multiwidget with k8s 2025-01-20 21:25:45 -08:00
shamoon
9021182c2c Documentation: add note about ping on underlying host 2025-01-20 21:20:58 -08:00
shamoon
fe462a71d6 Fix: handle evcc breaking change (#4630) 2025-01-20 07:55:26 -08:00
Jesse Houston
1e556e105d Documentation: add note about clearing UniFi cache non-docker (#4585) 2025-01-08 15:42:38 -08:00
shamoon
b5f4daa8ef Fix: fix bing search logo (#4571) 2025-01-06 07:25:14 -08:00
shamoon
fd50241e2a Update errorboundry.jsx 2025-01-06 00:53:10 -08:00
Bjorn Lammers
6a0fbba407 Chore: migrate dashboard-icons to homarr-labs (#4564) 2025-01-05 13:45:15 -08:00
shamoon
2ee5fd123b code style 2025-01-05 07:58:28 -08:00
shamoon
86a13817df Merge branch 'main' into dev 2025-01-05 07:57:05 -08:00
Adi Vaknin
2f7d948a5c Fix: quick launch not showing nested services (#4561)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-01-05 07:56:12 -08:00
shamoon
1b79e51194 Update source.md 2025-01-04 22:13:28 -08:00
Martin Bjeldbak Madsen
2d98ac30f2 Documentation: update gluetun apikey config instructions (#4554)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-01-02 21:07:55 -08:00
shamoon
1a85175b15 Fix: toggle light / dark makes background white (#4553) 2025-01-02 19:13:14 -08:00
Peder Toftegaard Olsen
6f429a6a4b Enhancement: add duration format to customapi widget (#4549)
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2025-01-02 19:11:33 -08:00
shamoon
3020a2d1fd Fix: better fs height (#4552) 2025-01-02 18:56:48 -08:00
shamoon
a6e85240c6 Update getting-started.md 2025-01-02 17:13:48 -08:00
shamoon
98e816204a Update getting-started.md 2025-01-02 17:13:36 -08:00
shamoon
a0b5ac318a Update PULL_REQUEST_TEMPLATE.md 2025-01-02 16:34:24 -08:00
shamoon
101461b7b5 Update getting-started.md 2025-01-02 16:26:15 -08:00
shamoon
ba6f50f21d Merge branch 'main' into dev 2025-01-02 16:26:01 -08:00
shamoon
dd3a229559 Update getting-started.md 2025-01-02 16:25:32 -08:00
dependabot[bot]
630d5024ac Chore(deps): Bump systeminformation from 5.23.8 to 5.24.3 (#4546)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 08:35:15 -08:00
dependabot[bot]
d239687e2e Chore(deps): Bump react-icons from 4.12.0 to 5.4.0 (#4536)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 08:34:05 -08:00
dependabot[bot]
81a3dfbfe4 Chore(deps-dev): Bump tailwindcss from 3.4.14 to 3.4.17 (#4537)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 08:33:37 -08:00
dependabot[bot]
034720f47a Chore(deps-dev): Bump eslint-plugin-react from 7.37.2 to 7.37.3 (#4534)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 08:33:23 -08:00
shamoon
0717607a97 Merge branch dev into main 2024-12-31 21:48:49 -08:00
github-actions[bot]
ee5442c15c New Crowdin translations by GitHub Action (#4506) 2024-12-31 21:48:12 -08:00
shamoon
b2158b0921 Fix: incorrect weekyear for events (#4519) 2024-12-30 11:26:04 -08:00
shamoon
a158866ca1 Feature: meta description setting (#4513) 2024-12-28 21:12:20 -08:00
shamoon
4f27ffbe2d Change: make region optional for gluetun api response (#4512) 2024-12-28 20:53:43 -08:00
shamoon
10bc8a15a9 Update support.yml 2024-12-28 16:50:23 -08:00
Per Mortensen
5d63b3d212 Fix: include all Beszel status localization strings (#4504) 2024-12-28 07:35:22 -08:00
shamoon
43decb0ed9 Fix: correct iconsOnly bookmark group spacing (#4502) 2024-12-27 16:11:47 -08:00
shamoon
e4d42b5393 FIx: glances containers header position (#4496) 2024-12-26 14:51:11 -08:00
shamoon
f717e59085 Enhancement: support 'nice name' for beszel system ID (#4495) 2024-12-26 11:07:33 -08:00
shamoon
fd05ae377c Enhancement: Better handle some beszel errors (#4493) 2024-12-25 12:17:10 -08:00
shamoon
cc9b4782f2 Merge branch 'dev' 2024-12-24 22:20:20 -08:00
github-actions[bot]
14cda38dbb New Crowdin translations by GitHub Action (#4481)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-12-24 22:19:23 -08:00
shamoon
27e3c9f1ed Merge branch 'dev' 2024-12-24 22:18:55 -08:00
shamoon
607c4b7750 Fix: fun with padding and margins (#4489) 2024-12-24 12:22:06 -08:00
shamoon
1c6480586c Fix: fix search overlay behind status indicators in 0.10.x (#4484) 2024-12-23 18:28:04 -08:00
shamoon
31c04006da Merge branch 'dev' 2024-12-23 14:02:38 -08:00
github-actions[bot]
499ab4d701 New Crowdin translations by GitHub Action (#4470)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2024-12-23 14:02:20 -08:00
shamoon
fbb35d3dc8 Merge branch 'dev' 2024-12-23 14:01:48 -08:00
shamoon
94936ed09d Tweak: again trying to restore chart sizing in 0.10.x (#4479) 2024-12-23 13:37:48 -08:00
shamoon
31a511de02 Update getting-started.md 2024-12-23 09:27:25 -08:00
shamoon
2d91b2b748 Tweak: remove extra padding for nested groups (#4474) 2024-12-22 17:48:49 -08:00
shamoon
7dabd0335f Remove service group bookmarksStyle 2024-12-22 17:37:46 -08:00
shamoon
96431c6085 Chore: warn and dont fail for invalid services (#4468) 2024-12-21 19:26:02 -08:00
shamoon
f64aa50cc0 Fix: metric heights in 0.10.x (#4467) 2024-12-21 19:14:00 -08:00
shamoon
d0937fe6a8 Updated requirements 2024-12-14 23:02:11 -08:00
487 changed files with 22713 additions and 21951 deletions

View File

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

View File

@@ -16,11 +16,11 @@
**/compose*
**/Dockerfile*
**/node_modules
!.next/standalone/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
**/.next
README.md
config/
k3d/

View File

@@ -1,5 +1,9 @@
{
"extends": ["airbnb", "next/core-web-vitals", "prettier"],
"extends": [
"next/core-web-vitals",
"prettier",
"plugin:react-hooks/recommended"
],
"plugins": ["prettier"],
"rules": {
"import/no-cycle": [
@@ -27,5 +31,12 @@
"paths": ["src"]
}
}
},
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"modules": true
}
}
}

View File

@@ -4,7 +4,7 @@ body:
value: |
### ⚠️ Before opening a discussion:
- [Check the troubleshooting guide](https://gethomepage.dev/troubleshooting/).
- [Check the troubleshooting guide](https://gethomepage.dev/troubleshooting/) and include the output of all steps below.
- [Search existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) [and discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions) (including closed ones!).
- type: textarea
id: description
@@ -51,6 +51,14 @@ body:
id: troubleshooting
attributes:
label: Troubleshooting
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/more/troubleshooting/#service-widget-errors), if relevant.
description: Please include output from your [troubleshooting steps](https://gethomepage.dev/more/troubleshooting/#service-widget-errors), if relevant.
validations:
required: true
- type: markdown
attributes:
value: |
## ⚠️ STOP ⚠️
Before you submit this support request, please ensure you have entered your configuration files and actually followed the steps from the troubleshooting guide linked above *and posted the output*, if relevant. The troubleshooting steps often help to solve the problem or at least can help figure it out.
*Please remember that this project is maintained by regular people **just like you**, so if you don't take the time to fill out the requested information, don't expect a reply back.*

View File

@@ -6,6 +6,7 @@
==================== STOP ====
⚠️ Before opening this pull request please review the guidelines in the checklist below.
If this PR does not meet those guidelines it will not be accepted, and everyone will be sad.
-->
@@ -14,9 +15,6 @@ If this PR does not meet those guidelines it will not be accepted, and everyone
<!--
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/more/development/#service-widget-guidelines
*** If you do not follow these guidelines your PR will likely be closed without review.
New service widgets should include example(s) of relevant API output as well as updates to the docs for the new widget.
-->
@@ -30,13 +28,13 @@ What type of change does your PR introduce to Homepage?
- [ ] New service widget
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] New feature or enhancement (non-breaking change which adds functionality)
- [ ] Documentation only
- [ ] Other (please explain)
## Checklist:
- [ ] If applicable, I have added corresponding documentation changes.
- [ ] If applicable, I have reviewed the [feature](https://gethomepage.dev/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/more/development/#service-widget-guidelines).
- [ ] If applicable, I have reviewed the [feature / enhancement](https://gethomepage.dev/more/development/#new-feature-guidelines) and / or [service widget guidelines](https://gethomepage.dev/more/development/#service-widget-guidelines).
- [ ] I have checked that all code style checks pass using [pre-commit hooks](https://gethomepage.dev/more/development/#code-formatting-with-pre-commit-hooks) and [linting checks](https://gethomepage.dev/more/development/#code-linting).
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.

View File

@@ -17,7 +17,7 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: crowdin action
uses: crowdin/github-action@v2
with:

View File

@@ -1,9 +1,4 @@
name: Docker
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Docker CI
on:
schedule:
@@ -13,94 +8,62 @@ on:
- main
- feature/**
- dev
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
pull_request:
branches: [ "dev" ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
merge_group:
env:
# github.repository as <account>/<repo>
IMAGE_NAME: ${{ github.repository }}
jobs:
pre-commit:
name: Linting Checks
runs-on: ubuntu-22.04
steps:
-
name: Checkout repository
uses: actions/checkout@v4
-
name: Install python
uses: actions/setup-python@v5
- name: Checkout repository
uses: actions/checkout@v5
- name: Install python
uses: actions/setup-python@v6
with:
python-version: 3.x
-
name: Check files
- name: Check files
uses: pre-commit/action@v3.0.1
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 20
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Lint frontend
run: pnpm run lint
build:
name: Docker Build & Push
if: github.repository == 'gethomepage/homepage'
if: github.repository == 'gethomepage/homepage'
runs-on: self-hosted
needs:
- pre-commit
needs: [ pre-commit ]
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5
# Setup QEMU
# https://github.com/marketplace/actions/docker-setup-buildx#with-qemu
- name: Setup QEMU
uses: docker/setup-qemu-action@v3
# Workaround: https://github.com/docker/build-push-action/issues/461
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
# This step is being disabled because the runner is on a self-hosted machine
# where the cache will stick between runs.
# - name: Cache Docker layers
# uses: actions/cache@v3
# with:
# path: /tmp/.buildx-cache
# key: ${{ runner.os }}-buildx-${{ github.sha }}
# restore-keys: |
# ${{ runner.os }}-buildx-
# Login against a Docker registry except on PR
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Extract metadata (tags, labels) for Docker
# https://github.com/docker/metadata-action
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@v5
@@ -108,11 +71,69 @@ jobs:
images: |
${{ env.IMAGE_NAME }}
ghcr.io/${{ env.IMAGE_NAME }}
tags: |
# Default tags
type=schedule,pattern=nightly
type=ref,event=branch
type=ref,event=tag
# Versioning tags
type=semver,pattern=v{{version}}
type=semver,pattern=v{{major}}.{{minor}}
type=semver,pattern=v{{major}}
flavor: |
latest=auto
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Next.js build cache
uses: actions/cache@v4
with:
path: .next/cache
key: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx') }}
restore-keys: |
nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
run_install: false
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 20
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Build app
run: |
NEXT_PUBLIC_BUILDTIME="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}" \
NEXT_PUBLIC_VERSION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}" \
NEXT_PUBLIC_REVISION="${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}" \
pnpm run build
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to Docker Hub
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Setup QEMU
uses: docker/setup-qemu-action@v3.7.0
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v6
@@ -122,18 +143,16 @@ jobs:
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
CI=true
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
# https://github.com/docker/setup-qemu-action#about
# platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
platforms: linux/amd64,linux/arm64
provenance: false
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
# Temp fix
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
# https://github.com/docker/build-push-action/issues/252 / https://github.com/moby/buildkit/issues/1896
- name: Move cache
run: |
rm -rf /tmp/.buildx-cache

View File

@@ -4,13 +4,7 @@ on:
push:
tags: ["v*.*.*"]
branches: ["main"]
paths:
- "docs/**"
- "mkdocs.yml"
pull_request:
paths:
- "docs/**"
- "mkdocs.yml"
merge_group:
workflow_dispatch:
@@ -23,23 +17,23 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Install python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: 3.x
- name: Check files
uses: pre-commit/action@v3.0.1
test:
name: Test Build
name: Test Build Docs
if: github.repository == 'gethomepage/homepage' && github.event_name == 'pull_request'
runs-on: ubuntu-latest
needs:
- pre-commit
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: actions/checkout@v5
- uses: actions/setup-python@v6
with:
python-version: 3.x
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
@@ -54,18 +48,18 @@ jobs:
- name: Test Docs Build
run: MKINSIDERS=false mkdocs build
deploy:
name: Build & Deploy
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request'
name: Build & Deploy Docs
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request' && github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
needs:
- pre-commit
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Configure Git Credentials
run: |
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
- uses: actions/setup-python@v5
- uses: actions/setup-python@v6
with:
python-version: 3.x
- run: echo "cache_id=${{github.sha}}" >> $GITHUB_ENV

View File

@@ -5,8 +5,6 @@ on:
types: [created, edited]
pull_request_review_comment:
types: [created, edited]
schedule:
- cron: '0 0 * * *'
permissions:
actions: write

View File

@@ -18,7 +18,7 @@ jobs:
name: 'Stale'
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
- uses: actions/stale@v10
with:
days-before-stale: 7
days-before-close: 14
@@ -57,7 +57,7 @@ jobs:
name: 'Close Answered Discussions'
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
- uses: actions/github-script@v8
with:
script: |
function sleep(ms) {
@@ -113,7 +113,7 @@ jobs:
name: 'Close Outdated Discussions'
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
- uses: actions/github-script@v8
with:
script: |
function sleep(ms) {
@@ -204,7 +204,7 @@ jobs:
name: 'Close Unsupported Feature Requests'
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v7
- uses: actions/github-script@v8
with:
script: |
function sleep(ms) {
@@ -212,9 +212,9 @@ jobs:
}
const CUTOFF_1_DAYS = 180;
const CUTOFF_1_COUNT = 10;
const CUTOFF_1_COUNT = 20;
const CUTOFF_2_DAYS = 365;
const CUTOFF_2_COUNT = 20;
const CUTOFF_2_COUNT = 40;
const cutoff1Date = new Date();
cutoff1Date.setDate(cutoff1Date.getDate() - CUTOFF_1_DAYS);

View File

@@ -9,11 +9,14 @@ repos:
- id: check-yaml
exclude: "(^mkdocs\\.yml$)"
- id: check-added-large-files
- repo: https://github.com/pre-commit/mirrors-prettier
rev: 'v3.0.3'
- repo: https://github.com/rbubley/mirrors-prettier
rev: 'v3.3.3'
hooks:
- id: prettier
types_or:
- javascript
- markdown
- jsx
additional_dependencies:
- prettier@3.3.3
- 'prettier-plugin-organize-imports@4.1.0'

View File

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

5
.prettierrc.js Normal file
View File

@@ -0,0 +1,5 @@
const config = {
plugins: [require("prettier-plugin-organize-imports")],
};
module.exports = config;

32
.vscode/launch.json vendored
View File

@@ -1,19 +1,31 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Next.js: debug full stack",
"name": "Debug homepage",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/next",
"serverReadyAction": {
"pattern": "started server on .+, url: (https?://.+)",
"uriFormat": "%s",
"action": "debugWithChrome"
"runtimeExecutable": "pnpm",
"runtimeArgs": ["run", "dev"],
"env": {
"LOG_LEVEL": "debug"
},
"skipFiles": ["<node_internals>/**"],
"console": "integratedTerminal",
"serverReadyAction":{
"pattern": ".*http://localhost:3000.*",
"action": "startDebugging",
"name": "Launch Chromium",
"killOnServerStop": true,
}
},
{
"name": "Launch Chromium",
"type": "chrome",
"request": "launch",
"url": "http://localhost:3000",
"urlFilter": "http://localhost:3000",
"webRoot": "${workspaceFolder}",
"trace": true
}
]
}

View File

@@ -63,7 +63,7 @@ The homepage team appreciates all effort and interest from the community in fili
- Issues, pull requests and discussions that are closed will be locked after 30 days of inactivity.
- Discussions with a marked answer will be automatically closed.
- Discussions in the 'General' or 'Support' categories will be closed after 180 days of inactivity.
- Feature requests that do not meet the following thresholds will be closed: 5 "up-votes" after 180 days of inactivity or 10 "up-votes" after 365 days.
- Feature requests that do not meet the following thresholds will be closed: 20 "up-votes" after 180 days of inactivity or 40 "up-votes" after 365 days.
In all cases, threads can be re-opened by project maintainers and, of course, users can always create a new discussion for related concerns.
Finally, remember that all information remains searchable and 'closed' feature requests can still serve as inspiration for new features.

View File

@@ -1,66 +1,65 @@
# syntax = docker/dockerfile:latest
# Install dependencies only when needed
FROM docker.io/node:18-alpine AS deps
# =========================
# Builder Stage
# =========================
FROM node:22-slim AS builder
WORKDIR /app
COPY --link package.json pnpm-lock.yaml* ./
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
RUN apk add --no-cache libc6-compat \
&& apk add --no-cache --virtual .gyp python3 make g++ \
&& npm install -g pnpm
RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm fetch | grep -v "cross-device link not permitted\|Falling back to copying packages from store"
RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm install -r --offline
# Rebuild the source code only when needed
FROM docker.io/node:18-alpine AS builder
WORKDIR /app
# Setup
RUN mkdir config
COPY . .
ARG CI
ARG BUILDTIME
ARG VERSION
ARG REVISION
ENV CI=$CI
COPY --link --from=deps /app/node_modules ./node_modules/
COPY . .
# Install and build only outside CI
RUN if [ "$CI" != "true" ]; then \
corepack enable && corepack prepare pnpm@latest --activate && \
pnpm install --frozen-lockfile --prefer-offline && \
NEXT_TELEMETRY_DISABLED=1 \
NEXT_PUBLIC_BUILDTIME=$BUILDTIME \
NEXT_PUBLIC_VERSION=$VERSION \
NEXT_PUBLIC_REVISION=$REVISION \
pnpm run build; \
else \
echo "✅ Using prebuilt app from CI context"; \
fi
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
RUN npm run telemetry \
&& mkdir config \
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION npm run build
# Production image, copy all the files and run next
FROM docker.io/node:18-alpine AS runner
LABEL org.opencontainers.image.title "Homepage"
LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations."
# =========================
# Runtime Stage
# =========================
FROM node:22-alpine AS runner
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.url="https://github.com/gethomepage/homepage"
LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki'
LABEL org.opencontainers.image.source='https://github.com/gethomepage/homepage'
LABEL org.opencontainers.image.licenses='Apache-2.0'
ENV NODE_ENV production
# Setup
WORKDIR /app
# Copy files from context (this allows the files to copy before the builder stage is done).
COPY --link --chown=1000:1000 package.json next.config.js ./
# Copy some files from context
COPY --link --chown=1000:1000 /public ./public/
# Copy files from builder
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone ./
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static/
COPY --link --chmod=755 docker-entrypoint.sh /usr/local/bin/
RUN apk add --no-cache su-exec
# Copy only necessary files from the build stage
COPY --link --from=builder --chown=1000:1000 /app/.next/standalone/ ./
COPY --link --from=builder --chown=1000:1000 /app/.next/static/ ./.next/static
ENV PORT 3000
RUN apk add --no-cache su-exec iputils-ping shadow
USER root
ENV NODE_ENV=production
ENV HOSTNAME=0.0.0.0
ENV PORT=3000
EXPOSE $PORT
HEALTHCHECK --interval=10s --timeout=3s --start-period=20s \
CMD wget --no-verbose --tries=1 --spider --no-check-certificate http://localhost:$PORT/api/healthcheck || exit 1
CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:$PORT/api/healthcheck || exit 1
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["node", "server.js"]

View File

@@ -10,7 +10,7 @@ RUN <<EOF
apk add libc6-compat
apk add --virtual .gyp python3 make g++
npm install -g pnpm
npm install -g next
pnpm install -g next
EOF
RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store pnpm fetch | grep -v "cross-device link not permitted\|Falling back to copying packages from store"

View File

@@ -38,7 +38,7 @@ With features like quick search, bookmarks, weather support, a wide range of int
- **Fast** - The site is statically generated at build time for instant load times.
- **Secure** - All API requests to backend services are proxied, keeping your API keys hidden. Constantly reviewed for security by the community.
- **For Everyone** - Images built for AMD64, ARM64, ARMv7, and ARMv6.
- **For Everyone** - Images built for AMD64, ARM64.
- **Full i18n** - Support for over 40 languages.
- **Service & Web Bookmarks** - Add custom links to the homepage.
- **Docker Integration** - Container status and stats. Automatic service discovery via labels.
@@ -80,6 +80,7 @@ services:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
PUID: 1000 # optional, your user id
PGID: 1000 # optional, your group id
ports:
@@ -94,6 +95,7 @@ or docker run:
```bash
docker run --name homepage \
-e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev \
-e PUID=1000 \
-e PGID=1000 \
-p 3000:3000 \
@@ -111,7 +113,7 @@ First, clone the repository:
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:
```bash
pnpm install

View File

@@ -12,14 +12,53 @@ export PGID=${PGID:-0}
export HOMEPAGE_BUILDTIME=$(date +%s)
# Set privileges for /app but only if pid 1 user is root and we are dropping privileges.
# If container is run as an unprivileged user, it means owner already handled ownership setup on their own.
# Running chown in that case (as non-root) will cause error
[ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ] && chown -R ${PUID}:${PGID} /app
# Check ownership before chown
if [ -e /app/config ]; then
CURRENT_UID=$(stat -c %u /app/config)
CURRENT_GID=$(stat -c %g /app/config)
if [ "$CURRENT_UID" -ne "$PUID" ] || [ "$CURRENT_GID" -ne "$PGID" ]; then
echo "Fixing ownership of /app/config"
if ! chown -R "$PUID:$PGID" /app/config 2>/dev/null; then
echo "Warning: Could not chown /app/config; continuing anyway"
fi
else
echo "/app/config already owned by correct UID/GID, skipping chown"
fi
else
echo "/app/config does not exist; skipping ownership check"
fi
# Ensure /app/config/logs exists and is owned
if [ -n "$PUID" ] && [ -n "$PGID" ]; then
mkdir -p /app/config/logs 2>/dev/null || true
if [ -d /app/config/logs ]; then
LOG_UID=$(stat -c %u /app/config/logs)
LOG_GID=$(stat -c %g /app/config/logs)
if [ "$LOG_UID" -ne "$PUID" ] || [ "$LOG_GID" -ne "$PGID" ]; then
echo "Fixing ownership of /app/config/logs"
chown -R "$PUID:$PGID" /app/config/logs 2>/dev/null || echo "Warning: Could not chown /app/config/logs"
fi
fi
fi
if [ -d /app/.next ]; then
CURRENT_UID=$(stat -c %u /app/.next)
CURRENT_GID=$(stat -c %g /app/.next)
if [ "$PUID" -ne 0 ] && ([ "$CURRENT_UID" -ne "$PUID" ] || [ "$CURRENT_GID" -ne "$PGID" ]); then
echo "Fixing ownership of /app/.next"
if ! chown -R "$PUID:$PGID" /app/.next 2>/dev/null; then
echo "Warning: Could not chown /app/.next; continuing anyway"
fi
else
echo "/app/.next already owned by correct UID/GID or running as root, skipping chown"
fi
fi
# Drop privileges (when asked to) if root, otherwise run as current user
if [ "$(id -u)" == "0" ] && [ "${PUID}" != "0" ]; then
su-exec ${PUID}:${PGID} "$@"
if [ "$(id -u)" = "0" ] && [ "${PUID}" != "0" ]; then
exec su-exec ${PUID}:${PGID} "$@"
else
exec "$@"
fi

View File

@@ -1,3 +0,0 @@
.md-typeset[data-page-id="landing"] .md-header-anchor {
display: none;
}

View File

@@ -20,7 +20,7 @@ Since Docker supports connecting with TLS and client certificate authentication,
```yaml
my-remote-docker:
host: 192.168.0.101
port: 275
port: 2375
tls:
keyFile: tls/key.pem
caFile: tls/ca.pem
@@ -66,6 +66,30 @@ my-docker:
port: 2375
```
Use `protocol: https` if youre connecting through a reverse proxy (e.g., Traefik) that serves the Docker API over HTTPS:
```yaml
my-docker:
host: dockerproxy
port: 443
protocol: https
```
!!! note
Note: This does not require TLS certificates if the proxy handles encryption. Do not use `protocol: https` unless youre sure the target host supports HTTPS.
You can also include `headers` for the connection, for example, if you are using a reverse proxy that requires authentication:
```yaml
my-docker:
host: dockerproxy
port: 443
protocol: https
headers:
Authorization: Basic <base64-encoded-credentials>
```
## Using Socket Directly
If you'd rather use the socket directly, first make sure that you're passing the local socket into the Docker container.
@@ -157,12 +181,12 @@ Multiple widgets can be specified by incrementing the index, e.g.
```yaml
labels: ...
- homepage.widget[0].type=emby
- homepage.widget[0].url=http://emby.home
- homepage.widget[0].key=yourembyapikeyhere
- homepage.widget[1].type=uptimekuma
- homepage.widget[1].url=http://uptimekuma.home
- homepage.widget[1].slug=youreventslughere
- homepage.widgets[0].type=emby
- homepage.widgets[0].url=http://emby.home
- homepage.widgets[0].key=yourembyapikeyhere
- homepage.widgets[1].type=uptimekuma
- homepage.widgets[1].url=http://uptimekuma.home
- homepage.widgets[1].slug=youreventslughere
```
You can add specify fields for e.g. the [CustomAPI](../widgets/services/customapi.md) widget by using array-style dot notation:
@@ -247,4 +271,4 @@ You can show the docker stats by clicking the status indicator but this can also
showStats: true
```
Also see the settings for [show docker stats](settings.md#show-docker-stats).
Also see the settings for [show docker stats](settings.md#show-container-stats).

View File

@@ -8,6 +8,7 @@ The Kubernetes connectivity has the following requirements:
- Kubernetes 1.19+
- Metrics Service
- An Ingress controller
- Optionally: Gateway-API
The Kubernetes connection is configured in the `kubernetes.yaml` file. There are 3 modes to choose from:
@@ -19,6 +20,22 @@ The Kubernetes connection is configured in the `kubernetes.yaml` file. There are
mode: default
```
To configure Kubernetes gateway-api, ingress or ingressRoute service discovery, add one or multiple of the following settings.
Example settings:
```yaml
ingress: true # default, enable ingress only
```
or
```yaml
ingress: true # default, enable ingress
traefik: true # enable traefik ingressRoute
gateway: true # enable gateway-api
```
## Services
Once the Kubernetes connection is configured, individual services can be configured to pull statistics. Only CPU and Memory are currently supported.
@@ -142,6 +159,51 @@ spec:
If the `href` attribute is not present, Homepage will ignore the specific IngressRoute.
### Gateway API HttpRoute support
Homepage also features automatic service discovery for Gateway API. Service definitions are read by annotating the HttpRoute custom resource definition and are indentical to the Ingress example as defined in [Automatic Service Discovery](#automatic-service-discovery).
To enable Gateway API HttpRoute update `kubernetes.yaml` to include:
```
gateway: true # enable gateway-api
```
#### Using the unoffocial helm chart?
If you are using the unofficial helm chart ensure that the `ClusterRole` has required permissions for `gateway.networking.k8s.io`.
See [ClusterRole and ClusterRoleBinding](../installation/k8s.md#clusterrole-and-clusterrolebinding)
## Caveats
Similarly to Docker service discovery, there currently is no rigid ordering to discovered services and discovered services will be displayed above those specified in the `services.yaml`.
## Adding extra configuration files
Some Homepage features (for example, [Proxmox](../configs/proxmox.md)) require additional configuration files such as `proxmox.yaml`.
When running Homepage on Kubernetes, these files must be provided via a `ConfigMap` and mounted into the container at `/app/config`.
### ConfigMap example
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: homepage
data:
proxmox.yaml: |
pve:
url: https://proxmox.host.or.ip:8006
token: username@pam!Token ID
secret: secret
```
Mount the file into `/app/config` by updating the `Deployment`:
```yaml
volumeMounts:
- mountPath: /app/config/proxmox.yaml
name: homepage-config
subPath: proxmox.yaml
```

81
docs/configs/proxmox.md Normal file
View File

@@ -0,0 +1,81 @@
---
title: Proxmox
description: Proxmox Configuration
---
The Proxmox connection is configured in the `proxmox.yaml` file. See [Create token](#create-token) section below for details on how to generate the required API token.
To configure multiple nodes, ensure the key name in the `proxmox.yaml` matches the `proxmoxNode` field used in your service configuration.
```yaml
pve: # must match your actual Proxmox node name
url: https://proxmox.host.or.ip:8006
token: username@pam!Token ID
secret: secret
```
## Services
Once the Proxmox connection is configured, individual services can be configured to pull statistics of VMs or LXCs. Only CPU and Memory are currently supported.
### Configuration Options
- `proxmoxNode`: The name of the Proxmox node where your VM/LXC is running, must match with a node configured in the `proxmox.yaml`
- `proxmoxVMID`: The ID of the Proxmox VM or LXC container
- `proxmoxType`: (Optional) The type of Proxmox virtual machine. Defaults to `qemu` for VMs, but can be set to `lxc` for LXC containers
#### Examples
For a QEMU VM (default):
```yaml
- HomeAssistant:
icon: home-assistant.png
href: http://homeassistant.local/
description: Home automation
proxmoxNode: pve
proxmoxVMID: 101
# proxmoxType: qemu # This is the default, so it can be omitted
```
For an LXC container:
```yaml
- Nginx:
icon: nginx.png
href: http://nginx.local/
description: Web server
proxmoxNode: pve
proxmoxVMID: 200
proxmoxType: lxc
```
## Create token
You will need to generate an API Token for new or an existing user. Here is an example of how to do this for a new user.
1. Navigate to the Proxmox portal, click on Datacenter
2. Expand Permissions, click on Groups
3. Click the Create button
4. Name the group something informative, like api-ro-users
5. Click on the Permissions "folder"
6. Click Add -> Group Permission
- Path: /
- Group: group from bullet 4 above
- Role: PVEAuditor
- Propagate: Checked
7. Expand Permissions, click on Users
8. Click the Add button
- User name: something informative like `api`
- Realm: Linux PAM standard authentication
- Group: group from bullet 4 above
9. Expand Permissions, click on API Tokens
10. Click the Add button
- User: user from bullet 8 above
- Token ID: something informative like the application or purpose like `homepage`
- Privilege Separation: Checked
11. Go back to the "Permissions" menu
12. Click Add -> API Token Permission
- Path: /
- API Token: select the Token ID created in Step 10
- Role: PVE Auditor
- Propagate: Checked

View File

@@ -97,6 +97,10 @@ Each service can have multiple widgets attached to it, for example:
slug: statuspageslug
```
!!! note
Multiple widgets per service are not yet supported with Kubernetes ingress annotations.
#### Field Visibility
Each widget can optionally provide a list of which fields should be visible via the `fields` widget property. If no fields are specified, then all fields will be displayed. The `fields` property must be a valid YAML array of strings. As an example, here is the entry for Sonarr showing only a couple of fields.
@@ -114,6 +118,47 @@ Each widget can optionally provide a list of which fields should be visible via
key: apikeyapikeyapikeyapikeyapikey
```
### Block Highlighting
Widgets can tint their metric block text automatically based on rules defined alongside the service. Attach a `highlight` section to the widget configuration and map each block to one or more numeric or string rules using the field key (for example, `queued`, `lan_users`).
```yaml
- Sonarr:
icon: sonarr.png
href: http://sonarr.host.or.ip
widget:
type: sonarr
url: http://sonarr.host.or.ip
key: ${SONARR_API_KEY}
highlight:
queued:
numeric:
- level: danger
when: gte
value: 20
- level: warn
when: gte
value: 5
- level: good
when: eq
value: 0
status:
string:
- level: danger
when: regex
value: "(failed|import) pending"
- level: good
when: equals
value: "All good"
status_code:
string:
- level: warn
when: regex
value: "^5\\d{2}$"
```
Supported numeric operators for the `when` property are `gt`, `gte`, `lt`, `lte`, `eq`, `ne`, `between`, and `outside`. String rules support `equals`, `includes`, `startsWith`, `endsWith`, and `regex`. Each rule can be inverted with `negate: true`, and string rules may pass `caseSensitive: true` or custom regex `flags`. The highlight engine does its best to coerce formatted values, but you will get the most reliable results when you pass plain numbers or strings into `<Block>`.
## Descriptions
Services may have descriptions,
@@ -134,7 +179,7 @@ Services may have descriptions,
## Icons
Services may have an icon attached to them, you can use icons from [Dashboard Icons](https://github.com/walkxcode/dashboard-icons) automatically, by passing the name of the icon, with, or without `.png` or with `.svg` to use the svg version.
Services may have an icon attached to them, you can use icons from [Dashboard Icons](https://github.com/homarr-labs/dashboard-icons) automatically, by passing the name of the icon, with, or without `.png`, `.webp` or `.svg` to specify the desired version.
You can also specify prefixed icons from:
@@ -178,6 +223,10 @@ To use a local icon, first create a Docker mount to `/app/public/icons` and then
Services may have an optional `ping` property that allows you to monitor the availability of an external host. As of v0.8.0, the ping feature attempts to use a true (ICMP) ping command on the underlying host. Currently, only IPv4 is supported.
!!! note
Because ping uses the ping command on the underlying host, in some cases you may need to install e.g. the `iputils-ping` package on the host system.
```yaml
- Group A:
- Sonarr:

View File

@@ -13,6 +13,14 @@ You can customize the title of the page if you'd like.
title: My Awesome Homepage
```
## Description
You can customize the description of the page if you'd like.
```yaml
description: A description of my awesome homepage
```
## Start URL
You can customize the start_url as required for installable apps. The default is "/".
@@ -70,7 +78,7 @@ background:
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
cardBlur: sm # sm, "", md, etc... see https://tailwindcss.com/docs/backdrop-blur
cardBlur: xs # xs, md, etc... see https://tailwindcss.com/docs/backdrop-blur
```
## Favicon
@@ -93,7 +101,7 @@ theme: dark # or light
## Color Palette
You can configured a fixed color palette (and disable the palette switcher) by passing the `color` option, like so:
You can configure a fixed color palette (and disable the palette switcher) by passing the `color` option, like so:
```yaml
color: slate
@@ -101,6 +109,20 @@ color: slate
Supported colors are: `slate`, `gray`, `zinc`, `neutral`, `stone`, `amber`, `yellow`, `lime`, `green`, `emerald`, `teal`, `cyan`, `sky`, `blue`, `indigo`, `violet`, `purple`, `fuchsia`, `pink`, `rose`, `red`, `white`
## Block Highlight Levels
You can override the default Tailwind classes applied when a widget highlight rule resolves to the `good`, `warn`, or `danger` level.
```yaml
blockHighlights:
levels:
good: "bg-emerald-500/40 text-emerald-950 dark:bg-emerald-900/60 dark:text-emerald-400"
warn: "bg-amber-300/30 text-amber-900 dark:bg-amber-900/30 dark:text-amber-200"
danger: "bg-rose-700/45 text-rose-200 dark:bg-rose-950/70 dark:text-rose-400"
```
Any unspecified level falls back to the built-in defaults.
## Layout
You can configure service and bookmarks sections to be either "column" or "row" based layouts, like so:
@@ -246,15 +268,29 @@ layout:
columns: 4
```
### Five Columns
### Full Width
You can add a fifth column to services (when `style: columns` which is default) by adding:
You can make homepage take up the entire window width by adding:
```yaml
fiveColumns: true
fullWidth: true
```
By default homepage will max out at 4 columns for services with `columns` style
### Maximum Group Columns
You can set the maximum number of columns of groups on larger screen sizes (note this is only for groups with the default `style: columns`, not groups with `style: row`) by adding:
```yaml
maxGroupColumns: 8 # default is 4 for services, 6 for bookmarks, max 8
```
By default homepage will max out at 4 columns for services and 6 for bookmarks, thus the minimum for this setting is _5_. Of course, if you're setting this to higher numbers, you may want to consider enabling the [fullWidth](#full-width) option as well.
If you want to set the maximum columns for bookmark groups separately, you can do so by adding:
```yaml
maxBookmarkGroupColumns: 6 # default is 6, max 8
```
### Collapsible sections
@@ -419,6 +455,7 @@ There are a few optional settings for the Quick Launch feature:
- `showSearchSuggestions`: show search suggestions for the internet search. If this is not specified then the setting will be inherited from the search widget. If it is not specified there either, it will default to false. For custom providers the `suggestionUrl` needs to be set in order for this to work.
- `provider`: search engine provider. If none is specified it will try to use the provider set for the Search Widget, if neither are present then internet search will be disabled.
- `hideVisitURL`: disable detecting and offering an option to open URLs. This is false by default, enabling the feature.
- `mobileButtonPosition`: enables and sets the position of the mobile quicklaunch button. Options are `top-left`, `top-right`, `bottom-left`, `bottom-right`. This is empty by default, disabling the feature.
```yaml
quicklaunch:
@@ -439,7 +476,7 @@ quicklaunch:
suggestionUrl: https://ac.ecosia.org/autocomplete?type=list&q=
```
## Homepage Version
## Homepage Version & Update Checking
By default the release version is displayed at the bottom of the page. To hide this, use the `hideVersion` setting, like so:
@@ -447,6 +484,12 @@ By default the release version is displayed at the bottom of the page. To hide t
hideVersion: true
```
You can disable checking for new versions from GitHub (enabled by default) with:
```yaml
disableUpdateCheck: true
```
## Log Path
By default the homepage logfile is written to the a `logs` subdirectory of the `config` folder. In order to customize this path, you can set the `logpath` setting. A `logs` folder will be created in that location where the logfile will be written.
@@ -457,9 +500,9 @@ logpath: /logfile/path
By default, logs are sent both to `stdout` and to a file at the path specified. This can be changed by setting the `LOG_TARGETS` environment variable to one of `both` (default), `stdout` or `file`.
## Show Docker Stats
## Show Container Stats
You can show all docker stats expanded in `settings.yaml`:
You can show all docker or proxmox stats expanded in `settings.yaml`:
```yaml
showStats: true
@@ -528,3 +571,18 @@ or per service widget (`services.yaml`) with:
```
If either value is set to true, the error message will be hidden.
## Disable Search Engine Indexing
You can request that search engines not to index your Homepage instance by enabling the `disableIndexing` setting.
```yaml
disableIndexing: true
```
When enabled, this will:
- Disallow all crawlers in `robots.txt`
- Add `<meta name="robots" content="noindex, nofollow">` tags to prevent indexing
By default this feature is disabled.

View File

@@ -15,6 +15,8 @@ services:
volumes:
- /path/to/config:/app/config # Make sure your local config directory exists
- /var/run/docker.sock:/var/run/docker.sock # (optional) For docker integrations
environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
```
### Running as non-root
@@ -36,6 +38,7 @@ services:
- /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
environment:
HOMEPAGE_ALLOWED_HOSTS: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
PUID: $PUID
PGID: $PGID
```
@@ -43,7 +46,7 @@ services:
### With Docker Run
```bash
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
docker run -p 3000:3000 -e HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest
```
### Using Environment Secrets

View File

@@ -4,27 +4,37 @@ description: Docs intro
icon: simple/docker
---
<p>
You have a few options for deploying homepage, depending on your needs. We offer docker images for a majority of platforms. You can also install and run homepage from source if Docker is not your thing. It can even be installed on Kubernetes with Helm.
</p>
!!! warning
!!! info
Please note that when using features such as widgets, Homepage can access personal information (for example from your home automation system) and Homepage currently does not (and is not planned to) include any authentication layer itself. Thus, we recommend homepage be deployed behind a reverse proxy including authentication, SSL etc, and / or behind a VPN.
<br>
<div class="grid cards" style="margin: 0 auto;" markdown>
:simple-docker: [&nbsp; Install on Docker :octicons-arrow-right-24:](docker.md)
[:simple-docker: &nbsp; Install on Docker :octicons-arrow-right-24:](docker.md)
{ .card }
:simple-kubernetes: [&nbsp; Install on Kubernetes :octicons-arrow-right-24:](k8s.md)
[:simple-kubernetes: &nbsp; Install on Kubernetes :octicons-arrow-right-24:](k8s.md)
{ .card }
:simple-unraid: [&nbsp; Install on UNRAID :octicons-arrow-right-24:](unraid.md)
[:simple-unraid: &nbsp; Install on UNRAID :octicons-arrow-right-24:](unraid.md)
{ .card }
:simple-nextdotjs: [&nbsp; Building from source :octicons-arrow-right-24:](source.md)
[:simple-nextdotjs: &nbsp; Building from source :octicons-arrow-right-24:](source.md)
{ .card }
</div>
### `HOMEPAGE_ALLOWED_HOSTS`
As of v1.0 there is one required environment variable to access homepage via a URL other than `localhost`, <code>HOMEPAGE_ALLOWED_HOSTS</code>. The setting helps prevent certain kinds of attacks when retrieving data from the homepage API proxy.
The value is a comma-separated (no spaces) list of allowed hosts (sometimes with the port) that can host your homepage install. See the [docker](docker.md), [kubernetes](k8s.md) and [source](source.md) installation pages for more information about where / how to set the variable.
`localhost:3000` and `127.0.0.1:3000` are always included, but you can add a domain or IP address to this list to allow that host such as `HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev,192.168.1.2:1234`, etc.
If you are seeing errors about host validation, check the homepage logs and ensure that the host exactly as output in the logs is in the `HOMEPAGE_ALLOWED_HOSTS` list.
This can be disabled by setting `HOMEPAGE_ALLOWED_HOSTS` to `*` but this is not recommended.

View File

@@ -3,85 +3,6 @@ title: Kubernetes Installation
description: Install on Kubernetes
---
## Install with Helm
There is an [unofficial helm chart](https://github.com/jameswynn/helm-charts/tree/main/charts/homepage) that creates all the necessary manifests, including the service account and RBAC entities necessary for service discovery.
```sh
helm repo add jameswynn https://jameswynn.github.io/helm-charts
helm install homepage jameswynn/homepage -f values.yaml
```
The helm chart allows for all the configurations to be inlined directly in your `values.yaml`:
```yaml
config:
bookmarks:
- Developer:
- Github:
- abbr: GH
href: https://github.com/
services:
- My First Group:
- My First Service:
href: http://localhost/
description: Homepage is awesome
- My Second Group:
- My Second Service:
href: http://localhost/
description: Homepage is the best
- My Third Group:
- My Third Service:
href: http://localhost/
description: Homepage is 😎
widgets:
# show the kubernetes widget, with the cluster summary and individual nodes
- kubernetes:
cluster:
show: true
cpu: true
memory: true
showLabel: true
label: "cluster"
nodes:
show: true
cpu: true
memory: true
showLabel: true
- search:
provider: duckduckgo
target: _blank
kubernetes:
mode: cluster
settings:
# The service account is necessary to allow discovery of other services
serviceAccount:
create: true
name: homepage
# This enables the service account to access the necessary resources
enableRbac: true
ingress:
main:
enabled: true
annotations:
# Example annotations to add Homepage to your Homepage!
gethomepage.dev/enabled: "true"
gethomepage.dev/name: "Homepage"
gethomepage.dev/description: "Dynamically Detected Homepage"
gethomepage.dev/group: "Dynamic"
gethomepage.dev/icon: "homepage.png"
hosts:
- host: homepage.example.com
paths:
- path: /
pathType: Prefix
```
## Install with Kubernetes Manifests
If you don't want to use the unofficial Helm chart, you can also create your own Kubernetes manifest(s) and apply them with `kubectl apply -f filename.yaml`.
@@ -216,6 +137,14 @@ rules:
verbs:
- get
- list
- apiGroups:
- gateway.networking.k8s.io
resources:
- httproutes
- gateways
verbs:
- get
- list
- apiGroups:
- metrics.k8s.io
resources:
@@ -294,6 +223,9 @@ spec:
- name: homepage
image: "ghcr.io/gethomepage/homepage:latest"
imagePullPolicy: Always
env:
- name: HOMEPAGE_ALLOWED_HOSTS
value: gethomepage.dev # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
ports:
- name: http
containerPort: 3000

View File

@@ -9,7 +9,13 @@ First, clone the repository:
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):
If `pnpm` is not installed, install it:
```bash
npm install -g pnpm
```
Then install dependencies and build the production bundle:
```bash
pnpm install
@@ -21,5 +27,9 @@ If this is your first time starting, copy the `src/skeleton` directory to `confi
Finally, run the server:
```bash
pnpm start
HOMEPAGE_ALLOWED_HOSTS=gethomepage.dev:1234 pnpm start
```
When updating homepage versions you will need to re-build the static files i.e. repeat the process above.
See [HOMEPAGE_ALLOWED_HOSTS](index.md#homepage_allowed_hosts) for more information on this environment variable.

View File

@@ -28,7 +28,7 @@ These companies help the Homepage project by providing services, tools, and reso
</div>
<div style="margin-bottom: 16px;">
<a href="https://crowdin.com/project/homepage"><img src="https://support.crowdin.com/assets/logos/core-logo/png/crowdin-core-logo-cWhite.png" alt="Crowdin" style="max-width: 100%; height: 64px; display: block;" /></a>
<a href="https://crowdin.com/project/gethomepage"><img src="https://support.crowdin.com/assets/logos/core-logo/png/crowdin-core-logo-cWhite.png" alt="Crowdin" style="max-width: 100%; height: 64px; display: block;" /></a>
<p>
Crowdin provides the translation platform for the project. Making it easy to translate the project into multiple languages.
</p>

View File

@@ -286,3 +286,13 @@ body[data-md-color-scheme="default"] {
.md-tabs__link {
transform: translateZ(0);
}
.grid.cards .card {
padding: 0;
}
.grid.cards .card a {
display: block;
padding: 0.8rem;
text-decoration: none;
}

View File

@@ -12,14 +12,17 @@ hide:
- Check config/logs/homepage.log, on docker simply e.g. `docker logs homepage`. This may provide some insight into the reason for an error.
- Check the browser error console, this can also sometimes provide useful information.
- Consider setting the `ENV` variable `LOG_LEVEL` to `debug`.
- If certain widgets are failing when connecting to public APIs, consider [disabling IPv6](#disabling-ipv6).
## Service Widget Errors
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 check:
1. **URLs should not end with a / or other API path. Each widget will handle the path on its own.**. Including a trailing slash can result in an error.
1. URLs should not end with a / or other API path. Each widget will handle the path on its own.
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. All services with a widget require a unique name as well as a unique group (and all subgroups) name.
3. 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
@@ -27,7 +30,7 @@ All service widgets work essentially the same, that is, homepage makes a proxied
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.
4. 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
@@ -64,3 +67,17 @@ All service widgets work essentially the same, that is, homepage makes a proxied
## Missing custom icons
If, after correctly adding and mapping your custom icons via the [Icons](../configs/services.md#icons) instructions, you are still unable to see your icons please try recreating your container.
## Disabling IPv6
If you are having issues with certain widgets that are unable to reach public APIs (e.g. weather), in certain setups you may need to disable IPv6. You can set the environment variable `HOMEPAGE_PROXY_DISABLE_IPV6` to `true` to disable IPv6 for the homepage proxy.
Alternatively, you can use the `sysctls` option in your docker-compose file to disable IPv6 for the homepage container completely:
```yaml
services:
homepage:
...
sysctls:
- net.ipv6.conf.all.disable_ipv6=1
```

View File

@@ -46,9 +46,9 @@ See the [pre-commit documentation](https://pre-commit.com/#install) to get start
In general, homepage is meant to be a dashboard for 'self-hosted' services and we believe it is a small way we can help showcase this kind of software. While exceptions are made, mostly when there is no viable
self-hosted / open-source alternative, we ask that any widgets, etc. are developed primarily for a self-hosted tool.
## New Feature Guidelines
## New Feature or Enhancement Guidelines {#new-feature-guidelines}
- New features should usually be linked to an existing feature request. The purpose of this requirement is to avoid the addition (and maintenance) of features that might only benefit a small number of users.
- New features or enhancements, **no matter how small**, must be linked to an existing feature request with some comments or 'up-votes' that demonstrate community interest. The purpose of this requirement is to avoid the addition (and maintenance) of features that might only benefit a small number of users.
- If you have ideas for a larger feature you may want to open a discussion first.
## Service Widget Guidelines
@@ -62,3 +62,4 @@ To ensure cohesiveness of various widgets, the following should be used as a gui
- Minimize the number of API calls
- Avoid the use of custom proxy unless absolutely necessary
- Widgets should be 'read-only', as in they should not make write changes using the relevant tool's API. Homepage widgets are designed to surface information, not to be a (usually worse) replacement for the tool itself.
- Widgets should not allow manually overriding the "refresh interval" setting, as misconfigured refresh intervals can easily lead to performance issues for users.

View File

@@ -225,20 +225,8 @@ const widgetExample = {
#### `method`
The `method` property is a string that represents the HTTP method that should be used to make the API request. The default value is `GET`.
```js
const widgetExample = {
api: "{url}/api/{endpoint}",
mappings: {
// `/api/stats`
stats: {
endpoint: "stats",
method: "POST",
},
},
};
```
The `method` represents the HTTP method that should be used to make the API request. The default value is `GET`. Note that `POST` requests are not allowed via the
widget API and require the use of a custom proxy.
#### `headers`
@@ -251,7 +239,6 @@ const widgetExample = {
// `/api/stats`
stats: {
endpoint: "stats",
method: "POST",
headers: {
"Content-Type": "application/json",
},
@@ -271,7 +258,6 @@ const widgetExample = {
// `/api/graphql`
stats: {
endpoint: "graphql",
method: "POST",
body: {
query: `
query {

View File

@@ -34,7 +34,7 @@ Homepage uses the [next-i18next](https://github.com/i18next/next-i18next) librar
Homepage uses translated and localized strings for **all text and numerical content** in widgets. English is the default language, and other languages can be added via [Crowdin](https://crowdin.com/project/gethomepage). To add the English translations for your widget, follow these steps:
Open the `public/locales/en/common.js` file.
Open the `public/locales/en/common.json` file.
Add a new object for your widget to the bottom of the list, like this:

View File

@@ -150,7 +150,7 @@ This will render the widget with placeholders for the data, i.e., a skeleton vie
!!! tip "Translation Tips"
The `label` prop in the `Block` component corresponds to the translation key we defined earlier in the `common.js` file. All text and numerical content should be translated.
The `label` prop in the `Block` component corresponds to the translation key we defined earlier in the `common.json` file. All text and numerical content should be translated.
---

View File

@@ -32,7 +32,7 @@ More detail on configuring service widgets can be found in the [Service Widgets
## Info Widgets
Info widgets are used to display information in the header, often about your system or environment. Info widgets are defined your `widgets.yaml` file. Here's an example:
Info widgets are used to display information in the header, often about your system or environment. Info widgets are defined in your `widgets.yaml` file. Here's an example:
```yaml
- openmeteo:

View File

@@ -22,9 +22,8 @@ An optional 'site' parameter can be supplied, if it is not the widget will use t
```yaml
- unifi_console:
url: https://unifi.host.or.ip:port
site: Site Name # optional
username: user
password: pass
site: Site Name # optional
key: unifiapikey # required if using API key instead of username/password
```
_Added in v0.4.18, updated in 0.6.7_

View File

@@ -0,0 +1,16 @@
---
title: APC UPS Monitoring
description: Lightweight monitoring widget for APC UPSs using apcupsd daemon
---
This widget extracts UPS information from an apcupsd daemon.
Only works for [APC/Schneider](https://www.se.com/us/en/product-range/61915-smartups/#products) UPS products.
[!NOTE]
By default apcupsd daemon is bound to 127.0.0.1. Edit `/etc/apcupsd.conf` and change `NISIP` to an IP accessible from your homepage docker (usually your internal LAN interface).
```yaml
widget:
type: apcups
url: tcp://your.acpupsd.host:3551
```

View File

@@ -17,9 +17,15 @@ The account you made the API token for also needs the following **Assigned globa
Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`.
| Authentik Version | Homepage Widget Version |
| ----------------- | ----------------------- |
| < 2025.8.0 | 1 (default) |
| >= 2025.8.0 | 2 |
```yaml
widget:
type: authentik
url: http://authentik.host.or.ip:port
key: api_token
version: 2 # optional, default is 1
```

View File

@@ -0,0 +1,17 @@
---
title: Backrest
description: Backrest Widget Configuration
---
[Backrest](https://garethgeorge.github.io/backrest/) is a web-based frontend for
the [Restic](https://restic.net/) backup tool.
**Allowed fields:** `["num_success_latest","num_failure_latest","num_success_30","num_plans","num_failure_30","bytes_added_30"]`
```yaml
widget:
type: backrest
url: http://backrest.host.or.ip
username: admin # optional if auth is enabled in Backrest
password: admin # optional if auth is enabled in Backrest
```

View File

@@ -7,7 +7,9 @@ Learn more about [Beszel](https://github.com/henrygd/beszel)
The widget has two modes, a single system with detailed info if `systemId` is provided, or an overview of all systems if `systemId` is not provided.
The `systemID` in the `id` field on the collections page of Beszel.
The `systemID` is the `id` field on the collections page of Beszel under the PocketBase admin panel. You can also use the 'nice name' from the Beszel UI.
A "superuser" is currently required to access the data from the Beszel API.
Allowed fields for 'overview' mode: `["systems", "up"]`
Allowed fields for a single system: `["name", "status", "updated", "cpu", "memory", "disk", "network"]`

View File

@@ -22,6 +22,7 @@ widget:
service_group: Media # group name where widget exists
service_name: Sonarr # service name for that widget
color: teal # optional - defaults to pre-defined color for the service (teal for sonarr)
baseUrl: https://sonarr.domain.url # optional - adds links to sonarr/radarr pages
params: # optional - additional params for the service
unmonitored: true # optional - defaults to false, used with *arr stack
- type: ical # Show calendar events from another service

View File

@@ -0,0 +1,17 @@
---
title: Checkmk
description: Checkmk Widget Configuration
---
Learn more about [Checkmk](https://github.com/Checkmk/checkmk).
To setup authentication, follow the official [Checkmk API](https://docs.checkmk.com/latest/en/rest_api.html?lquery=api#bearerauth) documentation.
```yaml
widget:
type: checkmk
url: http://checkmk.host.or.ip:port
site: your-site-name-cla-by-default
username: username
password: password
```

View File

@@ -8,6 +8,9 @@ Learn more about [Crowdsec](https://crowdsec.net).
See the [crowdsec docs](https://docs.crowdsec.net/docs/local_api/intro/#machines) for information about registering a machine,
in most instances you can use the default credentials (`/etc/crowdsec/local_api_credentials.yaml`).
!!! note
Without the `limit24h` option, the widget will fetch all alerts which is limited to 100 by the API to avoid performance issues.
Allowed fields: `["alerts", "bans"]`.
```yaml
@@ -16,4 +19,5 @@ widget:
url: http://crowdsechostorip:port
username: localhost # machine_id in crowdsec
password: password
limit24h: true # optional, limits alerts to last 24h. Default: false
```

View File

@@ -19,27 +19,22 @@ widget:
requestBody: # optional, can be string or object, see below
display: # optional, default to block, see below
mappings:
- field: key # needs to be YAML string or object
- field: key
label: Field 1
format: text # optional - defaults to text
- field: # needs to be YAML string or object
path:
to: key2
- field: path.to.key2
format: number # optional - defaults to text
label: Field 2
- field: # needs to be YAML string or object
path:
to:
another: key3
- field: path.to.another.key3
label: Field 3
format: percent # optional - defaults to text
- field: key # needs to be YAML string or object
- field: key
label: Field 4
format: date # optional - defaults to text
locale: nl # optional
dateStyle: long # optional - defaults to "long". Allowed values: `["full", "long", "medium", "short"]`.
timeStyle: medium # optional - Allowed values: `["full", "long", "medium", "short"]`.
- field: key # needs to be YAML string or object
- field: key
label: Field 5
format: relativeDate # optional - defaults to text
locale: nl # optional
@@ -49,9 +44,7 @@ widget:
label: Field 6
format: text
additionalField: # optional
field:
hourly:
time: other key
field: hourly.time.key
color: theme # optional - defaults to "". Allowed values: `["theme", "adaptive", "black", "white"]`.
format: date # optional
- field: key
@@ -62,10 +55,12 @@ widget:
format: size
```
Supported formats for the values are `text`, `number`, `float`, `percent`, `bytes`, `bitrate`, `size`, `date` and `relativeDate`.
Supported formats for the values are `text`, `number`, `float`, `percent`, `duration`, `bytes`, `bitrate`, `size`, `date` and `relativeDate`.
The `dateStyle` and `timeStyle` options of the `date` format are passed directly to [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat) and the `style` and `numeric` options of `relativeDate` are passed to [Intl.RelativeTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/RelativeTimeFormat).
The `duration` format expects the duration to be specified in seconds. The `scale` transformation tool can be used if a conversion is required.
The `size` format will return the length of the array or string, or the number of keys in an object. This is then formatted as `number`.
## Example
@@ -101,9 +96,16 @@ mappings:
label: Name
- field: status # Alive
label: Status
- field:
origin: name # Earth (C-137)
- field: origin.name # Earth (C-137)
label: Origin
- field: locations.1.name # Citadel of Ricks
label: Location
```
Note that older versions of the widget accepted fields as a yaml object, which is still supported. E.g.:
```yaml
mappings:
- field:
locations:
1: name # Citadel of Ricks
@@ -136,7 +138,15 @@ You can manipulate data with the following tools `remap`, `scale`, `prefix` and
prefix: "$"
```
## List View
## Display Options
The widget supports different display modes that can be set using the `display` property.
### Block View (Default)
The default display mode is `block`, which shows fields in a block format.
### List View
You can change the default block view to a list view by setting the `display` option to `list`.
@@ -160,13 +170,54 @@ The list view can optionally display an additional field next to the primary fie
- any: true # will map all other values
to: Unknown
additionalField:
field:
hourly:
time: key
field: hourly.time.key
color: theme
format: date
```
### Dynamic List View
To display a list of items from an array in the API response, set the `display` property to `dynamic-list` and configure the `mappings` object with the following properties:
```yaml
widget:
type: customapi
url: https://example.com/api/servers
display: dynamic-list
mappings:
items: data # optional, the path to the array in the API response. Omit this option if the array is at the root level
name: id # required, field in each item to use as the item name (left side)
label: ip_address # required, field in each item to use as the item label (right side)
limit: 5 # optional, limit the number of items to display
format: text # optional - format of the label field
target: https://example.com/server/{id} # optional, makes items clickable with template support
```
This configuration would work with an API that returns a response like:
```json
{
"data": [
{ "id": "server1", "name": "Server 1", "ip_address": "192.168.0.1" },
{ "id": "server2", "name": "Server 2", "ip_address": "192.168.0.2" }
]
}
```
The widget would display a list with two items:
- "Server 1" on the left and "192.168.0.1" on the right, clickable to "https://example.com/server/server1"
- "Server 2" on the left and "192.168.0.2" on the right, clickable to "https://example.com/server/server2"
For nested fields in the items, you can use dot notation:
```yaml
mappings:
items: data.results.servers
name: details.id
label: details.name
```
## Custom Headers
Pass custom headers using the `headers` option, for example:

View File

@@ -18,7 +18,7 @@ To access these system metrics you need to connect to the DiskStation (`DSM`) wi
3. Under the `User Groups` tab of the user config dialogue check the box for `Administrators`.
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.
6. Now _only_ allow login to the `DSM` application, either by
6. Now _only_ allow login to the `DSM` and `Download Station` applications, either by
- 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 `By IP` for this app to limit the source of login attempts to one or more IP addresses/subnets.

View File

@@ -17,6 +17,7 @@ widget:
enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true
enableUser: true # optional, defaults to false
enableMediaControl: false # optional, defaults to true
showEpisodeNumber: true # optional, defaults to false
expandOneStreamToTwoRows: false # optional, defaults to true
```

View File

@@ -0,0 +1,19 @@
---
title: Filebrowser
description: Filebrowser Widget Configuration
---
Learn more about [Filebrowser](https://filebrowser.org).
If you are using [Proxy header authentication](https://filebrowser.org/configuration/authentication-method#proxy-header) you have to set `authHeader` and `username`.
Allowed fields: `["available", "used", "total"]`.
```yaml
widget:
type: filebrowser
url: http://filebrowserhostorip:port
username: username
password: password
authHeader: X-My-Header # If using Proxy header authentication
```

View File

@@ -0,0 +1,17 @@
---
title: Firefly III
description: Firefly III Widget Configuration
---
Learn more about [Firefly III](https://www.firefly-iii.org/).
Find your API key under `Options > Profile > OAuth > Personal Access Tokens`.
Allowed fields: `["networth" ,"budget"]`.
```yaml
widget:
type: firefly
url: https://firefly.host.or.ip
key: personalaccesstoken.personalaccesstoken.personalaccesstoken
```

View File

@@ -13,7 +13,7 @@ Home Network > Network > Network Settings > Access Settings in the Home Network
Credentials are not needed and, as such, you may want to consider using `http` instead of `https` as those requests are significantly faster.
Allowed fields (limited to a max of 4): `["connectionStatus", "uptime", "maxDown", "maxUp", "down", "up", "received", "sent", "externalIPAddress"]`.
Allowed fields (limited to a max of 4): `["connectionStatus", "uptime", "maxDown", "maxUp", "down", "up", "received", "sent", "externalIPAddress", "externalIPv6Address", "externalIPv6Prefix"]`.
```yaml
widget:

View File

@@ -14,4 +14,5 @@ widget:
type: gamedig
serverType: csgo # see https://github.com/gamedig/node-gamedig#games-list
url: udp://server.host.or.ip:port
gameToken: # optional, a token used by gamedig with certain games
```

View File

@@ -15,7 +15,7 @@ See the [official docs](https://github.com/ghostfolio/ghostfolio#authorization-b
_Note that the Bearer token is valid for 6 months, after which a new one must be generated._
Allowed fields: `["gross_percent_today", "gross_percent_1y", "gross_percent_max"]`
Allowed fields: `["gross_percent_today", "gross_percent_1y", "gross_percent_max", "net_worth"]`
```yaml
widget:

View File

@@ -7,7 +7,7 @@ Learn more about [Gitea](https://gitea.com).
API token requires `notifications`, `repository` and `issue` permissions. See the [gitea documentation](https://docs.gitea.com/development/api-usage#generating-and-listing-api-tokens) for details on generating tokens.
Allowed fields: `["notifications", "issues", "pulls"]`.
Allowed fields: `["repositories", "notifications", "issues", "pulls"]`.
```yaml
widget:

View File

@@ -9,9 +9,10 @@ Learn more about [Gluetun](https://github.com/qdm12/gluetun).
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", "port_forwarded"]`.
Default fields: `["public_ip", "region", "country"]`.
To setup authentication, follow [the official Gluetun documentation](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md#authentication).
To setup authentication, follow [the official Gluetun documentation](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md#authentication). Note that to use the api key method, you must add the route `GET /v1/publicip/ip` to the `routes` array in your Gluetun config.toml. Similarly, if you want to include the `port_forwarded` field, you must add the route `GET /v1/openvpn/portforwarded` to your Gluetun config.toml.
```yaml
widget:

View File

@@ -5,11 +5,18 @@ description: Grafana Widget Configuration
Learn more about [Grafana](https://github.com/grafana/grafana).
| Grafana Version | Homepage Widget Version |
| --------------- | ----------------------- |
| <= v10.4 | 1 (default) |
| > v10.4 | 2 |
Allowed fields: `["dashboards", "datasources", "totalalerts", "alertstriggered"]`.
```yaml
widget:
type: grafana
version: 2 # optional, default is 1
alerts: alertmanager # optional, default is grafana
url: http://grafana.host.or.ip:port
username: username
password: password

View File

@@ -10,12 +10,11 @@ Learn more about [Immich](https://github.com/immich-app/immich).
| < v1.118 | 1 (default) |
| >= v1.118 | 2 |
Find your API key under `Account Settings > API Keys`.
Find your API key under `Account Settings > API Keys`. The key should have the
`server.statistics` permission.
Allowed fields: `["users" ,"photos", "videos", "storage"]`.
Note that API key must be from admin user.
```yaml
widget:
type: immich

View File

@@ -8,12 +8,14 @@ search:
You can also find a list of all available service widgets in the sidebar navigation.
- [Adguard Home](adguard-home.md)
- [APC UPS](apcups.md)
- [ArgoCD](argocd.md)
- [Atsumeru](atsumeru.md)
- [Audiobookshelf](audiobookshelf.md)
- [Authentik](authentik.md)
- [Autobrr](autobrr.md)
- [Azure DevOps](azuredevops.md)
- [Backrest](backrest.md)
- [Bazarr](bazarr.md)
- [Beszel](beszel.md)
- [Caddy](caddy.md)
@@ -21,6 +23,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [Calibre-Web](calibre-web.md)
- [ChangeDetection.io](changedetectionio.md)
- [Channels DVR Server](channelsdvrserver.md)
- [Checkmk](checkmk.md)
- [Cloudflared](cloudflared.md)
- [Coin Market Cap](coin-market-cap.md)
- [CrowdSec](crowdsec.md)
@@ -32,7 +35,9 @@ You can also find a list of all available service widgets in the sidebar navigat
- [Emby](emby.md)
- [ESPHome](esphome.md)
- [EVCC](evcc.md)
- [Filebrowser](filebrowser.md)
- [Fileflows](fileflows.md)
- [Firefly III](firefly.md)
- [Flood](flood.md)
- [FreshRSS](freshrss.md)
- [Frigate](frigate.md)
@@ -49,6 +54,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [HDHomeRun](hdhomerun.md)
- [Headscale](headscale.md)
- [Healthchecks](healthchecks.md)
- [Karakeep](karakeep.md)
- [Home Assistant](homeassistant.md)
- [HomeBox](homebox.md)
- [Homebridge](homebridge.md)
@@ -58,8 +64,10 @@ You can also find a list of all available service widgets in the sidebar navigat
- [JDownloader](jdownloader.md)
- [Jellyfin](jellyfin.md)
- [Jellyseerr](jellyseerr.md)
- [Jellystat](jellystat.md)
- [Kavita](kavita.md)
- [Komga](komga.md)
- [Komodo](komodo.md)
- [Kopia](kopia.md)
- [Lidarr](lidarr.md)
- [Linkwarden](linkwarden.md)
@@ -114,6 +122,7 @@ You can also find a list of all available service widgets in the sidebar navigat
- [ruTorrent](rutorrent.md)
- [SABnzbd](sabnzbd.md)
- [Scrutiny](scrutiny.md)
- [Slskd](slskd.md)
- [Sonarr](sonarr.md)
- [Speedtest Tracker](speedtest-tracker.md)
- [Stash](stash.md)
@@ -126,14 +135,17 @@ You can also find a list of all available service widgets in the sidebar navigat
- [TDarr](tdarr.md)
- [Traefik](traefik.md)
- [Transmission](transmission.md)
- [Trilium](trilium.md)
- [TrueNAS](truenas.md)
- [TubeArchivist](tubearchivist.md)
- [UniFi Controller](unifi-controller.md)
- [Unmanic](unmanic.md)
- [Unraid](unraid.md)
- [Uptime Kuma](uptime-kuma.md)
- [UptimeRobot](uptimerobot.md)
- [UrBackup](urbackup.md)
- [Vikunja](vikunja.md)
- [Wallos](wallos.md)
- [Watchtower](watchtower.md)
- [WGEasy](wgeasy.md)
- [WhatsUpDocker](whatsupdocker.md)

View File

@@ -1,6 +1,6 @@
---
title: JDownloader
description: NextPVR Widget Configuration
description: JDownloader Widget Configuration
---
Learn more about [JDownloader](https://jdownloader.org/).

View File

@@ -17,6 +17,7 @@ widget:
enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true
enableUser: true # optional, defaults to false
enableMediaControl: false # optional, defaults to true
showEpisodeNumber: true # optional, defaults to false
expandOneStreamToTwoRows: false # optional, defaults to true
```

View File

@@ -7,7 +7,8 @@ Learn more about [Jellyseerr](https://github.com/Fallenbagel/jellyseerr).
Find your API key under `Settings > General > API Key`.
Allowed fields: `["pending", "approved", "available"]`.
Allowed fields: `["pending", "approved", "available", "issues"]`.
Default fields: `["pending", "approved", "available"]`.
```yaml
widget:

View File

@@ -0,0 +1,18 @@
---
title: Jellystat
description: Jellystat Widget Configuration
---
Learn more about [Jellystat](https://github.com/CyferShepard/Jellystat). The widget supports (at least) Jellystat version 1.1.6
You can create an API key from inside Jellystat at `Settings > API Key`.
Allowed fields: `["songs", "movies", "episodes", "other"]`.
```yaml
widget:
type: jellystat
url: http://jellystat.host.or.ip
key: apikeyapikeyapikeyapikeyapikey
days: 30 # optional, defaults to 30
```

View File

@@ -0,0 +1,17 @@
---
title: Karakeep
description: Karakeep Widget Configuration
---
Learn more about [Karakeep](https://karakeep.app) (formerly known as Hoarder).
Generate an API key for your user at `User Settings > API Keys`.
Allowed fields: `["bookmarks", "favorites", "archived", "highlights", "lists", "tags"]` (maximum of 4).
```yaml
widget:
type: karakeep
url: http[s]://karakeep.host.or.ip[:port]
key: karakeep_api_key
```

View File

@@ -15,4 +15,5 @@ widget:
url: http://kavita.host.or.ip:port
username: username
password: password
key: kavitaapikey # Optional, e.g. if not using username and password
```

View File

@@ -9,10 +9,16 @@ Uses the same username and password used to login from the web.
Allowed fields: `["libraries", "series", "books"]`.
| Komga API Version | Homepage Widget Version |
| ----------------- | ----------------------- |
| < v2 | 1 (default) |
| >= v2 | 2 |
```yaml
widget:
type: komga
url: http://komga.host.or.ip:port
username: username
password: password
key: komgaapikey # optional
```

View File

@@ -0,0 +1,22 @@
---
title: Komodo
description: Komodo Widget Configuration
---
This widget shows either details about all containers or stacks (if `showStacks` is true) managed by [Komodo](https://komo.do/) or the number of running servers, containers and stacks when `showSummary` is enabled.
The api key and secret can be found in the Komodo settings.
Allowed fields (max 4): `["total", "running", "stopped", "unhealthy", "unknown"]`.
Allowed fields with `showStacks` (max 4): `["total", "running", "down", "unhealthy", "unknown"]`.
Allowed fields with `showSummary`: `["servers", "stacks", "containers"]`.
```yaml
widget:
type: komodo
url: http://komodo.hostname.or.ip:port
key: K-xxxxxx...
secret: S-xxxxxx...
showSummary: true # optional, default: false. Takes precedence over showStacks
showStacks: true # optional, default: false
```

View File

@@ -3,7 +3,7 @@ title: Omada
description: Omada Widget Configuration
---
The widget supports controller versions 3, 4 and 5.
The widget supports controller versions 3, 4, 5 and 6.
Allowed fields: `["connectedAp", "activeUser", "alerts", "connectedGateways", "connectedSwitches"]`.

View File

@@ -20,4 +20,6 @@ widget:
type: peanut
url: http://peanut.host.or.ip:port
key: nameofyourups
username: username # only needed if set
password: password # only needed if set
```

View File

@@ -7,12 +7,16 @@ Learn more about [Portainer](https://github.com/portainer/portainer).
You'll need to make sure you have the correct environment set for the integration to work properly. From the Environments section inside of Portainer, click the one you'd like to connect to and observe the ID at the end of the URL (should be), something like `#!/endpoints/1`, here `1` is the value to set as the `env` value. In order to generate an API key, please follow the steps outlined here https://docs.portainer.io/api/access.
Allowed fields: `["running", "stopped", "total"]`.
Allowed fields:
- For Docker mode (default): `["running", "stopped", "total"]`
- For Kubernetes mode (`kubernetes: true`): `["applications", "services", "namespaces"]`
```yaml
widget:
type: portainer
url: https://portainer.host.or.ip:9443
env: 1
kubernetes: true # optional, defaults to false
key: ptr_accesskeyaccesskeyaccesskeyaccesskey
```

View File

@@ -7,34 +7,7 @@ Learn more about [Proxmox](https://www.proxmox.com/en/).
This widget shows the running and total counts of both QEMU VMs and LX Containers in the Proxmox cluster. It also shows the CPU and memory usage of the first node in the cluster.
You will need to generate an API Token for new or an existing user. Here is an example of how to do this for a new user.
1. Navigate to the Proxmox portal, click on Datacenter
2. Expand Permissions, click on Groups
3. Click the Create button
4. Name the group something informative, like api-ro-users
5. Click on the Permissions "folder"
6. Click Add -> Group Permission
- Path: /
- Group: group from bullet 4 above
- Role: PVEAuditor
- Propagate: Checked
7. Expand Permissions, click on Users
8. Click the Add button
- User name: something informative like `api`
- Realm: Linux PAM standard authentication
- Group: group from bullet 4 above
9. Expand Permissions, click on API Tokens
10. Click the Add button
- User: user from bullet 8 above
- Token ID: something informative like the application or purpose like `homepage`
- Privilege Separation: Checked
11. Go back to the "Permissions" menu
12. Click Add -> API Token Permission
- Path: /
- API Token: select the Token ID created in Step 10
- Role: PVE Auditor
- Propagate: Checked
See the [Proxmox configuration documentation](../../configs/proxmox.md#create-token) for details on creating API tokens.
Use `username@pam!Token ID` as the `username` (e.g `api@pam!homepage`) setting and `Secret` as the `password` setting.

View File

@@ -5,6 +5,8 @@ description: Proxmox Backup Server Widget Configuration
Learn more about [Proxmox Backup Server](https://www.proxmox.com/en/proxmox-backup-server/overview).
Create a user and an API token similar to the [Proxmox VE description](proxmox.md). The "Audit" role is required for both the user and token (not group).
Allowed fields: `["datastore_usage", "failed_tasks_24h", "cpu_usage", "memory_usage"]`.
```yaml
@@ -13,4 +15,5 @@ widget:
url: https://proxmoxbackupserver.host:port
username: api_token_id
password: api_token_secret
datastore: datastore_name #optional; if ommitted, will display a combination of all datastores used / total
```

View File

@@ -16,4 +16,5 @@ widget:
username: username
password: password
enableLeechProgress: true # optional, defaults to false
enableLeechSize: true # optional, defaults to false
```

View File

@@ -10,7 +10,5 @@ If more than (4) fields are provided, only the first (4) will be used.
widget:
type: romm
url: http://romm.host.or.ip
username: username # optional
password: password # optional
fields: ["platforms", "totalRoms", "saves", "states"] # optional - default fields shown
```

View File

@@ -0,0 +1,25 @@
---
title: Slskd
description: Slskd Widget Configuration
---
Learn more about [Slskd](https://github.com/slskd/slskd).
Generate an API key for slskd with `openssl rand -base64 48`.
Add it to your `path/to/config/slskd.yml` in `web > authentication > api_keys`:
```yaml
homepage_widget:
key: <generated key>
role: readonly
cidr: <homepage subnet>
```
Allowed fields: `["slskStatus", "updateStatus", "downloads", "uploads", "sharedFiles"]` (maximum of 4).
```yaml
widget:
type: slskd
url: http[s]://slskd.host.or.ip[:5030]
key: generatedapikey
```

View File

@@ -8,7 +8,12 @@ Learn more about [Speedtest Tracker](https://github.com/alexjustesen/speedtest-t
No extra configuration is required.
This widget is compatible with both [alexjustesen/speedtest-tracker](https://github.com/alexjustesen/speedtest-tracker) and [henrywhitaker3/Speedtest-Tracker](https://github.com/henrywhitaker3/Speedtest-Tracker).
Version 1 of the widget is compatible with both [alexjustesen/speedtest-tracker](https://github.com/alexjustesen/speedtest-tracker) and [henrywhitaker3/Speedtest-Tracker](https://github.com/henrywhitaker3/Speedtest-Tracker), while version 2 is only compatible with [alexjustesen/speedtest-tracker](https://github.com/alexjustesen/speedtest-tracker).
| Speedtest Version (AJ) | Speedtest Version (HW) | Homepage Widget Version |
| ---------------------- | ---------------------- | ----------------------- |
| < 1.2.1 | ≤ 1.12.0 | 1 (default) |
| >= 1.2.1 | N/A | 2 |
Allowed fields: `["download", "upload", "ping"]`.
@@ -16,5 +21,7 @@ Allowed fields: `["download", "upload", "ping"]`.
widget:
type: speedtest
url: http://speedtest.host.or.ip
version: 1 # optional, default is 1
key: speedtestapikey # required for version 2
bitratePrecision: 3 # optional, default is 0
```

View File

@@ -0,0 +1,19 @@
---
title: Trilium
description: Trilium Widget Configuration
---
Learn more about [Trilium](https://github.com/TriliumNext/Notes).
This widget is compatible with [TriliumNext](https://github.com/TriliumNext/Notes) versions >= [v0.94.0](https://github.com/TriliumNext/Notes/releases/tag/v0.94.0).
Find (or create) your ETAPI key under `Options > ETAPI > Create new ETAPI token`.
Allowed fields: `["version", "notesCount", "dbSize"]`
```yaml
widget:
type: trilium
url: https://trilium.host.or.ip
key: etapi_token
```

View File

@@ -19,15 +19,14 @@ Allowed fields: `["uptime", "wan", "lan", "lan_users", "lan_devices", "wlan", "w
!!! hint
If you enter e.g. incorrect credentials and receive an "API Error", you may need to recreate the container to clear the cache.
If you enter e.g. incorrect credentials and receive an "API Error", you may need to recreate the container or restart the service to clear the cache.
```yaml
widget:
type: unifi
url: https://unifi.host.or.ip:port
username: username
password: password
site: Site Name # optional
username: user
password: pass
key: unifiapikey # required if using API key instead of username/password
```
_Added in v0.4.18, updated in 0.6.7_

View File

@@ -0,0 +1,28 @@
---
title: Unraid
description: Unraid Widget Configuration
---
Learn more about [Unraid](https://unraid.net/).
The Unraid widget allows you to monitor the resources of an Unraid server.
**Minimum Requirements:**
- Unraid 7.2 -or- Unraid Connect plugin 2025.08.19.1850
- API key with the **ADMIN** role: [Managing API Keys](https://docs.unraid.net/go/managing-api-keys)
The widget can display metrics for selected Unraid pools. If using one of the "pool" fields, you must also add the pool name to the settings.
**Allowed fields:** `["cpu","memoryPercent","memoryAvailable","memoryUsed","notifications","arrayFree","arrayUsedSpace","arrayUsedPercent","status","pool1UsedSpace","pool1FreeSpace","pool1UsedPercent","pool2UsedSpace","pool2FreeSpace","pool2UsedPercent","pool3UsedSpace","pool3FreeSpace","pool3UsedPercent","pool4UsedSpace","pool4FreeSpace","pool4UsedPercent"]`
```yaml
widget:
type: unraid
url: https://unraid.host.or.ip
key: api-key
pool1: pool1name # required only if using pool1 fields
pool2: pool2name # required only if using pool2 fields
pool3: pool3name # required only if using pool3 fields
pool4: pool4name # required only if using pool4 fields
```

View File

@@ -0,0 +1,23 @@
---
title: Wallos
description: Wallos Widget Configuration
---
Learn more about [Wallos](https://github.com/ellite/wallos).
If you're using more than one currency to record subscriptions then you should also have your "Fixer API" key set-up (`Settings > Fixer API Key`).
> **Please Note:** The monthly cost displayed is the total cost of subscriptions in that month, **not** the _"monthly"_ average cost.
Get your API key under `Profile > API Key`.
Allowed fields: `["activeSubscriptions", "nextRenewingSubscription", "previousMonthlyCost", "thisMonthlyCost", "nextMonthlyCost"]`.
Default fields: `["activeSubscriptions", "nextRenewingSubscription", "thisMonthlyCost", "nextMonthlyCost"]`.
```yaml
widget:
type: wallos
url: http://wallos.host.or.ip
key: apikeyapikeyapikeyapikeyapikey
```

View File

@@ -11,10 +11,17 @@ Note: by default `["connected", "enabled", "total"]` are displayed.
To detect if a device is connected the time since the last handshake is queried. `threshold` is the time to wait in minutes since the last handshake to consider a device connected. Default is 2 minutes.
| Wg-Easy API Version | Homepage Widget Version |
| ------------------- | ----------------------- |
| < v15 | 1 (default) |
| >= v15 | 2 |
```yaml
widget:
type: wgeasy
url: http://wg.easy.or.ip
version: 2 # optional, default is 1
username: yourwgusername # required for v15 and above
password: yourwgeasypassword
threshold: 2 # optional
```

View File

@@ -0,0 +1,28 @@
---
title: Your Spotify
description: Your Spotify Widget Configuration
---
Learn more about [Your Spotify](https://github.com/Yooooomi/your_spotify).
Find your API key under `Settings > Account > Public token`, click `Generate` if not yet generated, copy key after
`?token=`.
Allowed fields: `["songs", "time", "artists"]`.
```yaml
widget:
type: yourspotify
url: http://your-spotify-server.host.or.ip # if using lsio image, add /api/
key: apikeyapikeyapikeyapikeyapikey
interval: month # optional, defaults to week
```
#### Interval
Allowed values for `interval`: `day`, `week`, `month`, `year`, `all`.
!!! note
`interval` is different from predefined intervals you see in `Your Spotify`'s UI.
For example, `This week` in UI means _from the start of this week_, here `week` means _past 7 days_.

View File

@@ -46,6 +46,10 @@ config:
docker:
settings:
env:
- name: HOMEPAGE_ALLOWED_HOSTS
value: "homepage.k3d.localhost:8080"
serviceAccount:
create: true
name: homepage

View File

@@ -23,6 +23,12 @@ Set the `mode` in the `kubernetes.yaml` to `cluster`.
mode: default
```
To enable Kubernetes gateway-api compatibility, set `route` to `gateway`.
```yaml
route: gateway
```
## Widgets
The Kubernetes widget can show a high-level overview of the cluster,

View File

@@ -25,18 +25,21 @@ nav:
- configs/services.md
- configs/kubernetes.md
- configs/docker.md
- configs/proxmox.md
- configs/custom-css-js.md
- "Widgets":
- widgets/index.md
- "Service Widgets":
- widgets/services/index.md
- widgets/services/adguard-home.md
- widgets/services/apcups.md
- widgets/services/argocd.md
- widgets/services/atsumeru.md
- widgets/services/audiobookshelf.md
- widgets/services/authentik.md
- widgets/services/autobrr.md
- widgets/services/azuredevops.md
- widgets/services/backrest.md
- widgets/services/bazarr.md
- widgets/services/beszel.md
- widgets/services/caddy.md
@@ -44,6 +47,7 @@ nav:
- widgets/services/calibre-web.md
- widgets/services/changedetectionio.md
- widgets/services/channelsdvrserver.md
- widgets/services/checkmk.md
- widgets/services/cloudflared.md
- widgets/services/coin-market-cap.md
- widgets/services/crowdsec.md
@@ -55,7 +59,9 @@ nav:
- widgets/services/emby.md
- widgets/services/esphome.md
- widgets/services/evcc.md
- widgets/services/filebrowser.md
- widgets/services/fileflows.md
- widgets/services/firefly.md
- widgets/services/flood.md
- widgets/services/freshrss.md
- widgets/services/frigate.md
@@ -72,6 +78,7 @@ nav:
- widgets/services/hdhomerun.md
- widgets/services/headscale.md
- widgets/services/healthchecks.md
- widgets/services/karakeep.md
- widgets/services/homeassistant.md
- widgets/services/homebox.md
- widgets/services/homebridge.md
@@ -81,8 +88,10 @@ nav:
- widgets/services/jdownloader.md
- widgets/services/jellyfin.md
- widgets/services/jellyseerr.md
- widgets/services/jellystat.md
- widgets/services/kavita.md
- widgets/services/komga.md
- widgets/services/komodo.md
- widgets/services/kopia.md
- widgets/services/lidarr.md
- widgets/services/linkwarden.md
@@ -137,6 +146,7 @@ nav:
- widgets/services/rutorrent.md
- widgets/services/sabnzbd.md
- widgets/services/scrutiny.md
- widgets/services/slskd.md
- widgets/services/sonarr.md
- widgets/services/speedtest-tracker.md
- widgets/services/spoolman.md
@@ -151,18 +161,22 @@ nav:
- widgets/services/tdarr.md
- widgets/services/traefik.md
- widgets/services/transmission.md
- widgets/services/trilium.md
- widgets/services/truenas.md
- widgets/services/tubearchivist.md
- widgets/services/unifi-controller.md
- widgets/services/unmanic.md
- widgets/services/unraid.md
- widgets/services/uptime-kuma.md
- widgets/services/uptimerobot.md
- widgets/services/urbackup.md
- widgets/services/vikunja.md
- widgets/services/wallos.md
- widgets/services/watchtower.md
- widgets/services/wgeasy.md
- widgets/services/whatsupdocker.md
- widgets/services/xteve.md
- widgets/services/yourspotify.md
- widgets/services/zabbix.md
- "Information Widgets":
- widgets/info/index.md

View File

@@ -131,8 +131,8 @@ module.exports = {
? BIBIT_UNITS
: BIT_UNITS
: options.binary
? BIBYTE_UNITS
: BYTE_UNITS;
? BIBYTE_UNITS
: BYTE_UNITS;
if (value === 0) return `0 ${sizes[0]}/s`;

8660
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,9 @@
{
"name": "homepage",
"version": "0.9.6",
"version": "1.7.0",
"private": true,
"scripts": {
"preinstall": "npx only-allow pnpm",
"dev": "next dev",
"build": "next build",
"start": "next start",
@@ -10,57 +11,62 @@
"telemetry": "next telemetry disable"
},
"dependencies": {
"@headlessui/react": "^1.7.18",
"@kubernetes/client-node": "^0.17.1",
"cal-parser": "^1.0.2",
"@headlessui/react": "^2.2.9",
"@kubernetes/client-node": "^1.0.0",
"classnames": "^2.5.1",
"compare-versions": "^6.1.0",
"dockerode": "^4.0.2",
"follow-redirects": "^1.15.9",
"gamedig": "^5.1.4",
"i18next": "^21.10.0",
"compare-versions": "^6.1.1",
"dockerode": "^4.0.7",
"follow-redirects": "^1.15.11",
"gamedig": "^5.3.2",
"i18next": "^25.5.3",
"ical.js": "^2.1.0",
"js-yaml": "^4.1.0",
"json-rpc-2.0": "^1.7.0",
"luxon": "^3.5.0",
"luxon": "^3.6.1",
"memory-cache": "^0.2.0",
"minecraft-ping-js": "^1.0.2",
"next": "^12.3.4",
"minecraftstatuspinger": "^1.2.2",
"next": "^15.5.2",
"next-i18next": "^12.1.0",
"ping": "^0.4.4",
"pretty-bytes": "^6.1.1",
"raw-body": "^3.0.0",
"pretty-bytes": "^7.1.0",
"raw-body": "^3.0.1",
"react": "^18.3.1",
"react-dom": "^18.2.0",
"react-i18next": "^11.18.6",
"react-icons": "^4.12.0",
"recharts": "^2.12.6",
"rrule": "^2.8.1",
"swr": "^1.3.0",
"systeminformation": "^5.23.8",
"tough-cookie": "^4.1.3",
"urbackup-server-api": "^0.52.1",
"winston": "^3.11.0",
"react-dom": "^18.3.1",
"react-i18next": "^15.5.3",
"react-icons": "^5.4.0",
"recharts": "^3.1.2",
"swr": "^2.3.3",
"systeminformation": "^5.27.7",
"tough-cookie": "^6.0.0",
"urbackup-server-api": "^0.8.9",
"winston": "^3.17.0",
"xml-js": "^1.6.11"
},
"devDependencies": {
"@tailwindcss/forms": "^0.5.8",
"autoprefixer": "^10.4.20",
"eslint": "^8.57.1",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-next": "^14.2.3",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.31.0",
"eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react": "^7.37.2",
"eslint-plugin-react-hooks": "^4.6.2",
"postcss": "^8.4.47",
"prettier": "^3.2.5",
"tailwind-scrollbar": "^3.0.5",
"tailwindcss": "^3.4.14",
"typescript": "^5.6.3"
"@tailwindcss/forms": "^0.5.10",
"@tailwindcss/postcss": "^4.1.14",
"eslint": "^9.25.1",
"eslint-config-next": "^15.2.4",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-prettier": "^5.5.4",
"eslint-plugin-react": "^7.37.4",
"eslint-plugin-react-hooks": "^5.2.0",
"postcss": "^8.5.6",
"prettier": "^3.6.2",
"prettier-plugin-organize-imports": "^4.3.0",
"tailwind-scrollbar": "^4.0.2",
"tailwindcss": "^4.0.9",
"typescript": "^5.7.3"
},
"optionalDependencies": {
"osx-temperature-sensor": "^1.0.8"
},
"pnpm": {
"onlyBuiltDependencies": [
"osx-temperature-sensor",
"sharp"
]
}
}

5489
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,5 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
"@tailwindcss/postcss": {},
},
};

View File

@@ -108,8 +108,8 @@
"songs": "Liedjies"
},
"esphome": {
"offline": "Vanlyn",
"offline_alt": "Vanlyn",
"offline": "Vanlyn af",
"offline_alt": "Vanlyn af",
"online": "Aanlyn",
"total": "Totaal",
"unknown": "Onbekend"
@@ -148,7 +148,9 @@
"up": "Op",
"received": "Ontvang",
"sent": "Gestuur",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Voorvoegsel"
},
"caddy": {
"upstreams": "Stroomop",
@@ -176,7 +178,7 @@
"connectedAp": "Gekoppelde APs",
"activeUser": "Aktiewe toestelle",
"alerts": "Waarskuwings",
"connectedGateway": "Gekoppelde poorte",
"connectedGateways": "Gekoppelde poorte",
"connectedSwitches": "Gekoppelde skakelaars"
},
"nzbget": {
@@ -187,7 +189,7 @@
"plex": {
"streams": "Aktiewe Strome",
"albums": "Albums",
"movies": "Flieks",
"movies": "Movies",
"tv": "TV Programme"
},
"sabnzbd": {
@@ -240,15 +242,15 @@
"wanted": "Gesoek",
"queued": "In ry",
"series": "Reekse",
"queue": "Tou",
"queue": "Toustaan",
"unknown": "Onbekend"
},
"radarr": {
"wanted": "Gesoek",
"missing": "Vermis",
"queued": "In ry",
"movies": "Flieks",
"queue": "Tou",
"movies": "Movies",
"queue": "Toustaan",
"unknown": "Onbekend"
},
"lidarr": {
@@ -273,7 +275,8 @@
"jellyseerr": {
"pending": "Afwagtend",
"approved": "Goedgekeur",
"available": "Beskikbaar"
"available": "Beskikbaar",
"issues": "Oop Kwessies"
},
"overseerr": {
"pending": "Afwagtend",
@@ -300,7 +303,7 @@
"latency": "Latensie"
},
"speedtest": {
"upload": "Laai Op",
"upload": "Oplaai",
"download": "Aflaai",
"ping": "Pieng"
},
@@ -357,8 +360,14 @@
"services": "Dienste",
"middleware": "Filtreerprogramme"
},
"trilium": {
"version": "Weergawe",
"notesCount": "Notas",
"dbSize": "Databasis Grootte",
"unknown": "Onbekend"
},
"navidrome": {
"nothing_streaming": "Geen aktiewe strome nie",
"nothing_streaming": "Geen Aktiewe Strome",
"please_wait": "Wag Asseblief"
},
"npm": {
@@ -387,7 +396,7 @@
},
"jackett": {
"configured": "Opgestel",
"errored": "Fout"
"errored": "Gefout"
},
"strelaysrv": {
"numActiveSessions": "Sessies",
@@ -410,7 +419,7 @@
"version": "Weergawe",
"status": "Status",
"up": "Aanlyn",
"down": "Vanlyn"
"down": "Vanlyn af"
},
"miniflux": {
"read": "Gelees",
@@ -547,7 +556,7 @@
"indexers": "Indekseerders"
},
"tubearchivist": {
"downloads": "Tou",
"downloads": "Toustaan",
"videos": "Videos",
"channels": "Kanale",
"playlists": "Snitlyste"
@@ -555,7 +564,7 @@
"truenas": {
"load": "Stelsellading",
"uptime": "Optyd",
"alerts": "Waarskuwings"
"alerts": "Opletberigte"
},
"pyload": {
"speed": "Spoed",
@@ -566,7 +575,8 @@
"gluetun": {
"public_ip": "Publieke IP",
"region": "Streek",
"country": "Land"
"country": "Land",
"port_forwarded": "Poort Aangestuur"
},
"hdhomerun": {
"channels": "Kanale",
@@ -702,6 +712,10 @@
"processed": "Verwerk",
"time": "Tyd"
},
"firefly": {
"networth": "Netto Waarde",
"budget": "Begroting"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Databronne",
@@ -745,7 +759,8 @@
"ghostfolio": {
"gross_percent_today": "Vandag",
"gross_percent_1y": "Een jaar",
"gross_percent_max": "Alle tyd"
"gross_percent_max": "Alle tyd",
"net_worth": "Net Worth"
},
"audiobookshelf": {
"podcasts": "Podsendinge",
@@ -760,7 +775,7 @@
},
"whatsupdocker": {
"monitoring": "Monitering",
"updates": "Opdatering"
"updates": "Opdaterings"
},
"calibreweb": {
"books": "Boeke",
@@ -794,7 +809,7 @@
"gamedig": {
"status": "Status",
"online": "Aanlyn",
"offline": "Vanlyn",
"offline": "Vanlyn af",
"name": "Naam",
"map": "Kaart",
"currentPlayers": "Huidige Spelers",
@@ -850,7 +865,8 @@
"physicalRelease": "Fisiese Vrylating",
"digitalRelease": "Digitale Vrylating",
"noEventsToday": "Geen gebeure vir vandag nie!",
"noEventsFound": "Geen gebeure gevind nie"
"noEventsFound": "Geen gebeure gevind nie",
"errorWhenLoadingData": "Fout tydens laai van kalenderdata"
},
"romm": {
"platforms": "Platform",
@@ -864,7 +880,7 @@
"domains": "Domeine",
"mailboxes": "Posbusse",
"mails": "E-posse",
"storage": "Bergplek"
"storage": "Stoor plek"
},
"netdata": {
"warnings": "Waarskuwings",
@@ -879,7 +895,8 @@
"gitea": {
"notifications": "Kennisgewings",
"issues": "Kwessies",
"pulls": "Trek Versoeke"
"pulls": "Trek Versoeke",
"repositories": "Bewaarplekke"
},
"stash": {
"scenes": "Tonele",
@@ -893,7 +910,7 @@
"galleries": "Galerye",
"performers": "Kunstenaars",
"studios": "Ateljees",
"movies": "Flieks",
"movies": "Movies",
"tags": "Merkers",
"oCount": "O Tel"
},
@@ -911,13 +928,13 @@
"totalValue": "Totale Waarde"
},
"crowdsec": {
"alerts": "Waarskuwings",
"alerts": "Opletberigte",
"bans": "Verbanne"
},
"wgeasy": {
"connected": "Gekoppel",
"enabled": "Geaktiveer",
"disabled": "Onaktief",
"disabled": "Gediaktiveer",
"total": "Totaal"
},
"swagdashboard": {
@@ -929,7 +946,7 @@
"myspeed": {
"ping": "Pieng",
"download": "Aflaai",
"upload": "Laai Op"
"upload": "Oplaai"
},
"stocks": {
"stocks": "Aandele",
@@ -950,7 +967,7 @@
},
"zabbix": {
"unclassified": "Nie geklassifiseer nie",
"information": "Informasie",
"information": "Inligting",
"warning": "Waarskuwing",
"average": "Gemiddeld",
"high": "Hoog",
@@ -973,7 +990,7 @@
"headscale": {
"name": "Naam",
"address": "Adres",
"last_seen": "Laaste Gesien",
"last_seen": "Laas gesien",
"status": "Status",
"online": "Aanlyn",
"offline": "Vanlyn"
@@ -982,6 +999,9 @@
"name": "Naam",
"systems": "Stelsels",
"up": "Op",
"down": "Af",
"paused": "Onderbreek",
"pending": "Afwagtend",
"status": "Status",
"updated": "Opgedateer",
"cpu": "SVE",
@@ -996,7 +1016,7 @@
"healthy": "Gesond",
"degraded": "Gedegradeer",
"progressing": "Vorderend",
"missing": "Vermis",
"missing": "Afwesig",
"suspended": "Geskors"
},
"spoolman": {
@@ -1007,5 +1027,98 @@
"issues": "Kwessies",
"merges": "Saamvleg Versoeke",
"projects": "Projekte"
},
"apcups": {
"status": "Status",
"load": "Las",
"bcharge": "Batterylading",
"timeleft": "Oorblywende Tyd"
},
"karakeep": {
"bookmarks": "Boekmerke",
"favorites": "Gunstelinge",
"archived": "Geargiveer",
"highlights": "Hoogtepunte",
"lists": "Lyste",
"tags": "Merkers"
},
"slskd": {
"slskStatus": "Netwerk",
"connected": "Gekoppel",
"disconnected": "Ontkoppel",
"updateStatus": "Opdateer",
"update_yes": "Beskikbaar",
"update_no": "Op Datum",
"downloads": "Aflaaie",
"uploads": "Oplaaie",
"sharedFiles": "Lêers"
},
"jellystat": {
"songs": "Liedjies",
"movies": "Movies",
"episodes": "Episode",
"other": "Ander"
},
"checkmk": {
"serviceErrors": "Diensprobleme",
"hostErrors": "Gasheerprobleme"
},
"komodo": {
"total": "Totaal",
"running": "Lopend",
"stopped": "Gestop",
"down": "Af",
"unhealthy": "Ongesond",
"unknown": "Onbekend",
"servers": "Bedieners",
"stacks": "Stapels",
"containers": "Houers"
},
"filebrowser": {
"available": "Beskikbaar",
"used": "Gebruik",
"total": "Totaal"
},
"wallos": {
"activeSubscriptions": "Intekeninge",
"thisMonthlyCost": "Hierdie Maand",
"nextMonthlyCost": "Volgende Maand",
"previousMonthlyCost": "Vorige Maand",
"nextRenewingSubscription": "Volgende paaiement"
},
"unraid": {
"STARTED": "Begin",
"STOPPED": "Gestop",
"NEW_ARRAY": "Nuwe Skikking",
"RECON_DISK": "Rekonstruksie van Skyf",
"DISABLE_DISK": "Skyf Gedeaktiveer",
"SWAP_DSBL": "Ruil Gedeaktiveer",
"INVALID_EXPANSION": "Ongeldige Uitbreiding",
"PARITY_NOT_BIGGEST": "Pariteit nie die Grootste nie",
"TOO_MANY_MISSING_DISKS": "Te Veel Ontbrekende Skywe",
"NEW_DISK_TOO_SMALL": "Nuwe Skyf te Klein",
"NO_DATA_DISKS": "Geen Data Skywe",
"notifications": "Kennisgewings",
"status": "Status",
"cpu": "SVE",
"memoryUsed": "Geheue Gebruik",
"memoryAvailable": "Geheue Beskikbaar",
"arrayUsed": "Skikking Gebruik",
"arrayFree": "Skikking Vry",
"poolUsed": "{{pool}} Gebruik",
"poolFree": "{{pool}} Vry"
},
"backrest": {
"num_plans": "Planne",
"num_success_30": "Suksesse",
"num_failure_30": "Mislukkings",
"num_success_latest": "Slaag",
"num_failure_latest": "Mislukking",
"bytes_added_30": "Grepe bygevoeg"
},
"yourspotify": {
"songs": "Liedjies",
"time": "Tyd",
"artists": "Kunstenaars"
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -61,15 +61,15 @@
"wlan_devices": "WLAN Enheder",
"lan_users": "LAN Brugere",
"wlan_users": "WLAN Brugere",
"up": "OP",
"up": "UP",
"down": "NED",
"wait": "Vent venligst",
"wait": "Please wait",
"empty_data": "Subsystem status ukendt"
},
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "RAM",
"mem": "MEM",
"cpu": "CPU",
"running": "Kører",
"offline": "Offline",
@@ -83,7 +83,7 @@
"partial": "Delvis"
},
"ping": {
"error": "Fejl",
"error": "Error",
"ping": "Ping",
"down": "Ned",
"up": "Op",
@@ -91,11 +91,11 @@
},
"siteMonitor": {
"http_status": "HTTP-status",
"error": "Fejl",
"error": "Error",
"response": "Response",
"down": "Ned",
"up": "Op",
"not_available": "Ikke tilgængelig"
"down": "Down",
"up": "Up",
"not_available": "Not Available"
},
"emby": {
"playing": "Afspiller",
@@ -112,7 +112,7 @@
"offline_alt": "Offline",
"online": "Online",
"total": "Total",
"unknown": "Ukendt"
"unknown": "Unknown"
},
"evcc": {
"pv_power": "Produktion",
@@ -141,14 +141,16 @@
"connectionStatusDisconnecting": "Disconnecting",
"connectionStatusDisconnected": "Disconnected",
"connectionStatusConnected": "Connected",
"uptime": "Oppetid",
"uptime": "Uptime",
"maxDown": "Max. Down",
"maxUp": "Max. Up",
"down": "Ned",
"up": "Op",
"down": "Down",
"up": "Up",
"received": "Modtaget",
"sent": "Sendt",
"externalIPAddress": "Ekstern IP"
"externalIPAddress": "Ekstern IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@@ -166,17 +168,17 @@
"passes": "Bestået"
},
"tautulli": {
"playing": "Afspiller",
"transcoding": "Transcoder",
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "Ingen Aktive Streams",
"no_active": "No Active Streams",
"plex_connection_error": "Tjek Plex-forbindelse"
},
"omada": {
"connectedAp": "Forbundne APs",
"activeUser": "Aktive enheder",
"alerts": "Advarsler",
"connectedGateway": "Forbundne gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Forbundne switches"
},
"nzbget": {
@@ -187,11 +189,11 @@
"plex": {
"streams": "Aktive Streams",
"albums": "Albums",
"movies": "Film",
"movies": "Movies",
"tv": "TV-Shows"
},
"sabnzbd": {
"rate": "Sats",
"rate": "Rate",
"queue": "Kø",
"timeleft": "Resterende tid"
},
@@ -239,26 +241,26 @@
"sonarr": {
"wanted": "Ønsket",
"queued": "I Kø",
"series": "Serier",
"queue": "",
"unknown": "Ukendt"
"series": "Series",
"queue": "Queue",
"unknown": "Unknown"
},
"radarr": {
"wanted": "Ønsket",
"wanted": "Wanted",
"missing": "Mangler",
"queued": "I Kø",
"movies": "Film",
"queue": "",
"unknown": "Ukendt"
"queued": "Queued",
"movies": "Movies",
"queue": "Queue",
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Ønsket",
"queued": "I Kø",
"wanted": "Wanted",
"queued": "Queued",
"artists": "Artister"
},
"readarr": {
"wanted": "Ønsket",
"queued": "I Kø",
"wanted": "Wanted",
"queued": "Queued",
"books": "Bøger"
},
"bazarr": {
@@ -271,15 +273,16 @@
"available": "Tilgængelig"
},
"jellyseerr": {
"pending": "Afventer",
"approved": "Godkendt",
"available": "Tilgængelig"
"pending": "Pending",
"approved": "Approved",
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Afventer",
"pending": "Pending",
"processing": "Behandler",
"approved": "Godkendt",
"available": "Tilgængelig"
"approved": "Approved",
"available": "Available"
},
"netalertx": {
"total": "Total",
@@ -294,8 +297,8 @@
"gravity": "Tyngdekraft"
},
"adguard": {
"queries": "Forespørgsler",
"blocked": "Blokerede",
"queries": "Queries",
"blocked": "Blocked",
"filtered": "Filtreret",
"latency": "Latenstid"
},
@@ -305,15 +308,15 @@
"ping": "Ping"
},
"portainer": {
"running": "Kører",
"running": "Running",
"stopped": "Stoppede",
"total": "Total"
},
"suwayomi": {
"download": "Hentet",
"download": "Downloaded",
"nondownload": "Non-Downloaded",
"read": "Læst",
"unread": "Ulæst",
"read": "Read",
"unread": "Unread",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
@@ -334,7 +337,7 @@
"ago": "{{value}} Siden"
},
"technitium": {
"totalQueries": "Forespørgsler",
"totalQueries": "Queries",
"totalNoError": "Success",
"totalServerFailure": "Failures",
"totalNxDomain": "NX Domains",
@@ -342,12 +345,12 @@
"totalAuthoritative": "Authoritative",
"totalRecursive": "Recursive",
"totalCached": "Cached",
"totalBlocked": "Blokerede",
"totalBlocked": "Blocked",
"totalDropped": "Dropped",
"totalClients": "Klienter"
},
"tdarr": {
"queue": "",
"queue": "Queue",
"processed": "Behandlet",
"errored": "Fejlet",
"saved": "Gemt"
@@ -357,8 +360,14 @@
"services": "Tjenester",
"middleware": "Middleware"
},
"trilium": {
"version": "Version",
"notesCount": "Notes",
"dbSize": "Database Size",
"unknown": "Unknown"
},
"navidrome": {
"nothing_streaming": "Ingen Aktive Streams",
"nothing_streaming": "No Active Streams",
"please_wait": "Vent venligst"
},
"npm": {
@@ -375,35 +384,35 @@
},
"gotify": {
"apps": "Applikationer",
"clients": "Klienter",
"clients": "Clients",
"messages": "Beskeder"
},
"prowlarr": {
"enableIndexers": "Indeksører",
"numberOfGrabs": "Grab",
"numberOfQueries": "Forespørgsler",
"numberOfQueries": "Queries",
"numberOfFailGrabs": "Fejl Grabs",
"numberOfFailQueries": "Fejl Forespørgsler"
},
"jackett": {
"configured": "Konfigureret",
"errored": "Fejlet"
"errored": "Errored"
},
"strelaysrv": {
"numActiveSessions": "Sessioner",
"numConnections": "Forbindelser",
"dataRelayed": "Videresendt",
"transferRate": "Sats"
"transferRate": "Rate"
},
"mastodon": {
"user_count": "Brugere",
"user_count": "Users",
"status_count": "Indlæg",
"domain_count": "Domæner"
},
"medusa": {
"wanted": "Ønsket",
"queued": "I Kø",
"series": "Serier"
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
},
"minecraft": {
"players": "Afspillere",
@@ -414,34 +423,34 @@
},
"miniflux": {
"read": "Læst",
"unread": "Ulæst"
"unread": "Unread"
},
"authentik": {
"users": "Brugere",
"users": "Users",
"loginsLast24H": "Login (24 timer)",
"failedLoginsLast24H": "Mislykkede logins (24 timer)"
},
"proxmox": {
"mem": "RAM",
"mem": "MEM",
"cpu": "CPU",
"lxc": "LXC",
"vms": "VMs"
},
"glances": {
"cpu": "CPU",
"load": "Belastning",
"wait": "Vent venligst",
"load": "Load",
"wait": "Please wait",
"temp": "TEMP",
"_temp": "Temp",
"warn": "Advar",
"uptime": "OP",
"uptime": "UP",
"total": "Total",
"free": "Fri",
"used": "Brugt",
"free": "Free",
"used": "Used",
"days": "d",
"hours": "t",
"hours": "h",
"crit": "Crit",
"read": "Læst",
"read": "Read",
"write": "Skriv",
"gpu": "GPU",
"mem": "Ram",
@@ -462,57 +471,57 @@
"1-day": "Overvejende Solrigt",
"1-night": "Overvejende Skyfrit",
"2-day": "Delvist Overskyet",
"2-night": "Delvist Overskyet",
"2-night": "Partly Cloudy",
"3-day": "Skyet",
"3-night": "Skyet",
"3-night": "Cloudy",
"45-day": "Tåget",
"45-night": "Tåget",
"48-day": "Tåget",
"48-night": "Tåget",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"51-day": "Let Støvregn",
"51-night": "Let Støvregn",
"51-night": "Light Drizzle",
"53-day": "Støvregn",
"53-night": "Støvregn",
"53-night": "Drizzle",
"55-day": "Kraftig Støvregn",
"55-night": "Kraftig Støvregn",
"55-night": "Heavy Drizzle",
"56-day": "Let Frysende Støvregn",
"56-night": "Let Frysende Støvregn",
"56-night": "Light Freezing Drizzle",
"57-day": "Frysende Støvregn",
"57-night": "Frysende Støvregn",
"57-night": "Freezing Drizzle",
"61-day": "Let Regn",
"61-night": "Let Regn",
"61-night": "Light Rain",
"63-day": "Regn",
"63-night": "Regn",
"63-night": "Rain",
"65-day": "Kraftig Regn",
"65-night": "Kraftig Regn",
"65-night": "Heavy Rain",
"66-day": "Frysende Regn",
"66-night": "Frysende Regn",
"67-day": "Frysende Regn",
"67-night": "Frysende Regn",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Let Sne",
"71-night": "Let Sne",
"71-night": "Light Snow",
"73-day": "Sne",
"73-night": "Sne",
"73-night": "Snow",
"75-day": "Kraftig Sne",
"75-night": "Kraftig Sne",
"75-night": "Heavy Snow",
"77-day": "Snekorn",
"77-night": "Snekorn",
"77-night": "Snow Grains",
"80-day": "Lette Byger",
"80-night": "Lette Byger",
"80-night": "Light Showers",
"81-day": "Byger",
"81-night": "Byger",
"81-night": "Showers",
"82-day": "Kraftige Byger",
"82-night": "Kraftige Byger",
"82-night": "Heavy Showers",
"85-day": "Snebyger",
"85-night": "Snebyger",
"86-day": "Snebyger",
"86-night": "Snebyger",
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Tordenvejr",
"95-night": "Tordenvejr",
"95-night": "Thunderstorm",
"96-day": "Tordenvejr Med Hagl",
"96-night": "Tordenvejr Med Hagl",
"99-day": "Tordenvejr Med Hagl",
"99-night": "Tordenvejr Med Hagl"
"96-night": "Thunderstorm With Hail",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail"
},
"homebridge": {
"available_update": "System",
@@ -521,15 +530,15 @@
"up_to_date": "Opdateret",
"child_bridges": "Underbroer",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Op",
"pending": "Afventer",
"down": "Ned"
"up": "Up",
"pending": "Pending",
"down": "Down"
},
"healthchecks": {
"new": "Ny",
"up": "Op",
"up": "Up",
"grace": "Henstandsperiode",
"down": "Ned",
"down": "Down",
"paused": "Pause",
"status": "Status",
"last_ping": "Sidste Ping",
@@ -541,35 +550,36 @@
"containers_failed": "Fejlet"
},
"autobrr": {
"approvedPushes": "Godkendt",
"approvedPushes": "Approved",
"rejectedPushes": "Afviste",
"filters": "Filtre",
"indexers": "Indeksører"
"indexers": "Indexers"
},
"tubearchivist": {
"downloads": "",
"downloads": "Queue",
"videos": "Videoer",
"channels": "Kanaler",
"playlists": "Afspilningslister"
},
"truenas": {
"load": "Systembelastning",
"uptime": "Oppetid",
"alerts": "Advarsler"
"uptime": "Uptime",
"alerts": "Alerts"
},
"pyload": {
"speed": "Hastighed",
"active": "Aktive",
"queue": "",
"active": "Active",
"queue": "Queue",
"total": "Total"
},
"gluetun": {
"public_ip": "Offentlig IP",
"region": "Område",
"country": "Land"
"country": "Land",
"port_forwarded": "Port Forwarded"
},
"hdhomerun": {
"channels": "Kanaler",
"channels": "Channels",
"hd": "HD",
"tunerCount": "Tuners",
"channelNumber": "Channel",
@@ -582,8 +592,8 @@
},
"scrutiny": {
"passed": "Bestået",
"failed": "Fejlet",
"unknown": "Ukendt"
"failed": "Failed",
"unknown": "Unknown"
},
"paperlessngx": {
"inbox": "Indbakke",
@@ -598,18 +608,18 @@
"low_battery": "Lavt batteriniveau"
},
"nextdns": {
"wait": "Vent venligst",
"wait": "Please Wait",
"no_devices": "Ingen Enhedsdata Modtaget"
},
"mikrotik": {
"cpuLoad": "CPU Belastning",
"memoryUsed": "Hukommelse Brugt",
"uptime": "Oppetid",
"uptime": "Uptime",
"numberOfLeases": "Leasinger"
},
"xteve": {
"streams_all": "Alle Streams",
"streams_active": "Aktive Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Kanaler"
},
"opendtu": {
@@ -619,7 +629,7 @@
"limit": "Begrænsning"
},
"opnsense": {
"cpu": "CPU Belastning",
"cpu": "CPU Load",
"memory": "Aktiv Hukommelse",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
@@ -644,8 +654,8 @@
"load": "Belastning Gns",
"memory": "Hukommelse Forbrug",
"wanStatus": "WAN Status",
"up": "Op",
"down": "Ned",
"up": "Up",
"down": "Down",
"temp": "Temp",
"disk": "Disk Forbrug",
"wanIP": "WAN IP"
@@ -657,51 +667,55 @@
"memory_usage": "Hukommelse"
},
"immich": {
"users": "Brugere",
"users": "Users",
"photos": "Billeder",
"videos": "Videoer",
"videos": "Videos",
"storage": "Lager"
},
"uptimekuma": {
"up": "Sider Oppe",
"down": "Sider Nede",
"uptime": "Oppetid",
"uptime": "Uptime",
"incident": "Hændelse",
"m": "m"
},
"atsumeru": {
"series": "Serier",
"series": "Series",
"archives": "Arkiver",
"chapters": "Kapitler",
"categories": "Kategorier"
},
"komga": {
"libraries": "Biblioteker",
"series": "Serier",
"books": "Bøger"
"series": "Series",
"books": "Books"
},
"diskstation": {
"days": "Dage",
"uptime": "Oppetid",
"volumeAvailable": "Tilgængelig"
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"mylar": {
"series": "Serier",
"series": "Series",
"issues": "Problemer",
"wanted": "Ønsket"
"wanted": "Wanted"
},
"photoprism": {
"albums": "Albums",
"photos": "Billeder",
"videos": "Videoer",
"photos": "Photos",
"videos": "Videos",
"people": "Mennesker"
},
"fileflows": {
"queue": "",
"processing": "Behandler",
"processed": "Behandlet",
"queue": "Queue",
"processing": "Processing",
"processed": "Processed",
"time": "Tid"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Kontrolpanel",
"datasources": "Data Kilder",
@@ -721,7 +735,7 @@
"size": "Størrelse",
"lastrun": "Sidst Kørt",
"nextrun": "Næste Kørsel",
"failed": "Fejlet"
"failed": "Failed"
},
"unmanic": {
"active_workers": "Aktive Arbejdere",
@@ -738,20 +752,21 @@
"targets_total": "Totale Mål"
},
"gatus": {
"up": "Sider Oppe",
"down": "Sider Nede",
"uptime": "Oppetid"
"up": "Sites Up",
"down": "Sites Down",
"uptime": "Uptime"
},
"ghostfolio": {
"gross_percent_today": "I dag",
"gross_percent_today": "Today",
"gross_percent_1y": "Et År",
"gross_percent_max": "Altid"
"gross_percent_max": "Altid",
"net_worth": "Net Worth"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"books": "Bøger",
"books": "Books",
"podcastsDuration": "Varighed",
"booksDuration": "Varighed"
"booksDuration": "Duration"
},
"homeassistant": {
"people_home": "Personer Hjemme",
@@ -760,23 +775,23 @@
},
"whatsupdocker": {
"monitoring": "Overvåger",
"updates": "Opdateringer"
"updates": "Updates"
},
"calibreweb": {
"books": "Bøger",
"books": "Books",
"authors": "Forfattere",
"categories": "Kategorier",
"series": "Serier"
"categories": "Categories",
"series": "Series"
},
"jdownloader": {
"downloadCount": "",
"downloadBytesRemaining": "Manglende",
"downloadTotalBytes": "Størrelse",
"downloadSpeed": "Hastighed"
"downloadCount": "Queue",
"downloadBytesRemaining": "Remaining",
"downloadTotalBytes": "Size",
"downloadSpeed": "Speed"
},
"kavita": {
"seriesCount": "Serier",
"totalFiles": "Filer"
"seriesCount": "Series",
"totalFiles": "Files"
},
"azuredevops": {
"result": "Resultat",
@@ -784,12 +799,12 @@
"buildId": "Build ID",
"succeeded": "Lykkedes",
"notStarted": "Ikke Startet",
"failed": "Fejlet",
"failed": "Failed",
"canceled": "Annulleret",
"inProgress": "I Gang",
"totalPrs": "Total PRs",
"myPrs": "Mine PRs",
"approved": "Godkendt"
"approved": "Approved"
},
"gamedig": {
"status": "Status",
@@ -798,7 +813,7 @@
"name": "Navn",
"map": "Kort",
"currentPlayers": "Nuværende Spillere",
"players": "Afspillere",
"players": "Players",
"maxPlayers": "Maks spillere",
"bots": "Bots",
"ping": "Ping"
@@ -811,46 +826,47 @@
},
"mealie": {
"recipes": "Opskrifter",
"users": "Brugere",
"categories": "Kategorier",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
},
"openmediavault": {
"downloading": "Downloader",
"total": "Total",
"running": "Kører",
"stopped": "Stoppede",
"passed": "Bestået",
"failed": "Fejlet"
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
},
"openwrt": {
"uptime": "Oppetid",
"uptime": "Uptime",
"cpuLoad": "CPU Load Avg (5m)",
"up": "Op",
"down": "Ned",
"up": "Up",
"down": "Down",
"bytesTx": "Transmitted",
"bytesRx": "Modtaget"
"bytesRx": "Received"
},
"uptimerobot": {
"status": "Status",
"uptime": "Oppetid",
"uptime": "Uptime",
"lastDown": "Seneste Nedetid",
"downDuration": "Nedetid Varighed",
"sitesUp": "Sider Oppe",
"sitesDown": "Sider Nede",
"paused": "Pause",
"sitesUp": "Sites Up",
"sitesDown": "Sites Down",
"paused": "Paused",
"notyetchecked": "Endnu Ikke Kontrolleret",
"up": "Op",
"up": "Up",
"seemsdown": "Synes Ned",
"down": "Ned",
"unknown": "Ukendt"
"down": "Down",
"unknown": "Unknown"
},
"calendar": {
"inCinemas": "I biografen",
"physicalRelease": "Fysisk udgivelse",
"digitalRelease": "Digitale udgivelser",
"noEventsToday": "No events for today!",
"noEventsFound": "No events found"
"noEventsFound": "No events found",
"errorWhenLoadingData": "Error when loading calendar data"
},
"romm": {
"platforms": "Platforme",
@@ -861,10 +877,10 @@
"totalfilesize": "Total Size"
},
"mailcow": {
"domains": "Domæner",
"domains": "Domains",
"mailboxes": "Mailboxes",
"mails": "Mails",
"storage": "Lager"
"storage": "Storage"
},
"netdata": {
"warnings": "Advarsler",
@@ -873,13 +889,14 @@
"plantit": {
"events": "Events",
"plants": "Plants",
"photos": "Billeder",
"photos": "Photos",
"species": "Species"
},
"gitea": {
"notifications": "Notifications",
"issues": "Problemer",
"pulls": "Pull Requests"
"issues": "Issues",
"pulls": "Pull Requests",
"repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -893,13 +910,13 @@
"galleries": "Galleries",
"performers": "Performers",
"studios": "Studios",
"movies": "Film",
"movies": "Movies",
"tags": "Tags",
"oCount": "O Count"
},
"tandoor": {
"users": "Brugere",
"recipes": "Opskrifter",
"users": "Users",
"recipes": "Recipes",
"keywords": "Keywords"
},
"homebox": {
@@ -907,17 +924,17 @@
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Brugere",
"users": "Users",
"totalValue": "Total Value"
},
"crowdsec": {
"alerts": "Advarsler",
"alerts": "Alerts",
"bans": "Bans"
},
"wgeasy": {
"connected": "Connected",
"enabled": "Aktiveret",
"disabled": "Deaktiveret",
"enabled": "Enabled",
"disabled": "Disabled",
"total": "Total"
},
"swagdashboard": {
@@ -940,7 +957,7 @@
},
"frigate": {
"cameras": "Cameras",
"uptime": "Oppetid",
"uptime": "Uptime",
"version": "Version"
},
"linkwarden": {
@@ -971,21 +988,24 @@
"tasksInProgress": "Tasks In Progress"
},
"headscale": {
"name": "Navn",
"address": "Adresse",
"last_seen": "Sidst Set",
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Status",
"online": "Online",
"offline": "Offline"
},
"beszel": {
"name": "Navn",
"name": "Name",
"systems": "Systems",
"up": "Op",
"up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Status",
"updated": "Opdateret",
"updated": "Updated",
"cpu": "CPU",
"memory": "RAM",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
},
@@ -993,10 +1013,10 @@
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Sund",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Mangler",
"missing": "Missing",
"suspended": "Suspended"
},
"spoolman": {
@@ -1004,8 +1024,101 @@
},
"gitlab": {
"groups": "Groups",
"issues": "Problemer",
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Load",
"bcharge": "Battery Charge",
"timeleft": "Time Left"
},
"karakeep": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
},
"jellystat": {
"songs": "Songs",
"movies": "Movies",
"episodes": "Episodes",
"other": "Other"
},
"checkmk": {
"serviceErrors": "Service issues",
"hostErrors": "Host issues"
},
"komodo": {
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"down": "Down",
"unhealthy": "Unhealthy",
"unknown": "Unknown",
"servers": "Servers",
"stacks": "Stacks",
"containers": "Containers"
},
"filebrowser": {
"available": "Available",
"used": "Used",
"total": "Total"
},
"wallos": {
"activeSubscriptions": "Subscriptions",
"thisMonthlyCost": "This Month",
"nextMonthlyCost": "Next Month",
"previousMonthlyCost": "Prev. Month",
"nextRenewingSubscription": "Next Payment"
},
"unraid": {
"STARTED": "Started",
"STOPPED": "Stopped",
"NEW_ARRAY": "New Array",
"RECON_DISK": "Reconstructing Disk",
"DISABLE_DISK": "Disk Disabled",
"SWAP_DSBL": "Swap Disable",
"INVALID_EXPANSION": "Invalid Expansion",
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
"NO_DATA_DISKS": "No Data Disks",
"notifications": "Notifications",
"status": "Status",
"cpu": "CPU",
"memoryUsed": "Memory Used",
"memoryAvailable": "Memory Available",
"arrayUsed": "Array Used",
"arrayFree": "Array Free",
"poolUsed": "{{pool}} Used",
"poolFree": "{{pool}} Free"
},
"backrest": {
"num_plans": "Plans",
"num_success_30": "Successes",
"num_failure_30": "Failures",
"num_success_latest": "Succeeding",
"num_failure_latest": "Failing",
"bytes_added_30": "Bytes Added"
},
"yourspotify": {
"songs": "Songs",
"time": "Time",
"artists": "Artists"
}
}

View File

@@ -47,7 +47,7 @@
"load": "Last",
"temp": "TEMP",
"max": "Max",
"uptime": "UP"
"uptime": "BETRIEBSZEIT"
},
"unifi": {
"users": "Benutzer",
@@ -61,7 +61,7 @@
"wlan_devices": "WLAN-Geräte",
"lan_users": "LAN-Benutzer",
"wlan_users": "WLAN-Benutzer",
"up": "UP",
"up": "Gesendet",
"down": "EMPFANGEN",
"wait": "Bitte warten",
"empty_data": "Subsystem-Status unbekannt"
@@ -85,16 +85,16 @@
"ping": {
"error": "Fehler",
"ping": "Ping",
"down": "Empfangen",
"up": "Senden",
"down": "Offline",
"up": "Online",
"not_available": "Nicht verfügbar"
},
"siteMonitor": {
"http_status": "HTTP-Status",
"error": "Fehler",
"response": "Antwort",
"down": "Empfangen",
"up": "Senden",
"down": "Offline",
"up": "Online",
"not_available": "Nicht verfügbar"
},
"emby": {
@@ -111,7 +111,7 @@
"offline": "Offline",
"offline_alt": "Offline",
"online": "Online",
"total": "Gesamt",
"total": "Total",
"unknown": "Unbekannt"
},
"evcc": {
@@ -144,11 +144,13 @@
"uptime": "Betriebszeit",
"maxDown": "Max. Down",
"maxUp": "Max. Up",
"down": "Empfangen",
"up": "Senden",
"down": "Download",
"up": "Upload",
"received": "Empfangen",
"sent": "Gesendet",
"externalIPAddress": "Externe IP"
"externalIPAddress": "Externe IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Präfix"
},
"caddy": {
"upstreams": "Upstreams",
@@ -163,10 +165,10 @@
"shows": "Serien",
"recordings": "Aufnahmen",
"scheduled": "Geplant",
"passes": "Pässe"
"passes": "Durchläufe"
},
"tautulli": {
"playing": "Wiedergabe",
"playing": "Spielt",
"transcoding": "Transcodiert",
"bitrate": "Bitrate",
"no_active": "Keine aktiven Streams",
@@ -176,7 +178,7 @@
"connectedAp": "Verbundene APs",
"activeUser": "Aktive Geräte",
"alerts": "Warnungen",
"connectedGateway": "Verbundene Gateways",
"connectedGateways": "Verbundene Gateways",
"connectedSwitches": "Verbundene Switche"
},
"nzbget": {
@@ -191,7 +193,7 @@
"tv": "TV-Serien"
},
"sabnzbd": {
"rate": "Datenrate",
"rate": "Rate",
"queue": "Warteschlange",
"timeleft": "Verbleibende Zeit"
},
@@ -271,18 +273,19 @@
"available": "Verfügbar"
},
"jellyseerr": {
"pending": "Ausstehend",
"pending": "Wartend",
"approved": "Genehmigt",
"available": "Verfügbar"
"available": "Verfügbar",
"issues": "Offene Issues"
},
"overseerr": {
"pending": "Ausstehend",
"pending": "Wartend",
"processing": "Wird verarbeitet",
"approved": "Genehmigt",
"available": "Verfügbar"
},
"netalertx": {
"total": "Gesamt",
"total": "Total",
"connected": "Verbunden",
"new_devices": "Neue Geräte",
"down_alerts": "Down-Warnungen"
@@ -307,7 +310,7 @@
"portainer": {
"running": "Wird ausgeführt",
"stopped": "Gestoppt",
"total": "Gesamt"
"total": "Total"
},
"suwayomi": {
"download": "Heruntergeladen",
@@ -350,13 +353,19 @@
"queue": "Warteschlange",
"processed": "Verarbeitet",
"errored": "Fehlgeschlagen",
"saved": "Gespeichert"
"saved": "Eingespart"
},
"traefik": {
"routers": "Router",
"services": "Dienste",
"middleware": "Middleware"
},
"trilium": {
"version": "Version",
"notesCount": "Notizen",
"dbSize": "Datenbankgröße",
"unknown": "Unbekannt"
},
"navidrome": {
"nothing_streaming": "Keine aktiven Streams",
"please_wait": "Bitte warten"
@@ -364,7 +373,7 @@
"npm": {
"enabled": "Aktiviert",
"disabled": "Deaktiviert",
"total": "Gesamt"
"total": "Total"
},
"coinmarketcap": {
"configure": "Konfiguriere eine oder mehrere Kryptowährungen zur Beobachtung",
@@ -375,7 +384,7 @@
},
"gotify": {
"apps": "Programme",
"clients": "Benutzer",
"clients": "Endgeräte",
"messages": "Nachrichten"
},
"prowlarr": {
@@ -393,7 +402,7 @@
"numActiveSessions": "Sitzungen",
"numConnections": "Verbindungen",
"dataRelayed": "Weitergeleitet",
"transferRate": "Datenrate"
"transferRate": "Rate"
},
"mastodon": {
"user_count": "Benutzer",
@@ -431,21 +440,21 @@
"cpu": "CPU",
"load": "Last",
"wait": "Bitte warten",
"temp": "TEMP",
"temp": "Temp",
"_temp": "Temperatur",
"warn": "Warnung",
"uptime": "UP",
"total": "Gesamt",
"uptime": "Betriebszeit",
"total": "Total",
"free": "Frei",
"used": "In Benutzung",
"used": "Benutzt",
"days": "d",
"hours": "h",
"crit": "Krit",
"read": "Gelesen",
"read": "Lesen",
"write": "Schreiben",
"gpu": "GPU",
"mem": "RAM",
"swap": "Swap"
"swap": "Auslagerung"
},
"quicklaunch": {
"bookmark": "Lesezeichen",
@@ -466,37 +475,37 @@
"3-day": "Bewölkt",
"3-night": "Bewölkt",
"45-day": "neblig",
"45-night": "neblig",
"48-day": "neblig",
"48-night": "neblig",
"45-night": "Nebel",
"48-day": "Nebel",
"48-night": "Nebel",
"51-day": "leichter Nieselregen",
"51-night": "leichter Nieselregen",
"51-night": "Leichter Nieselregen",
"53-day": "Nieselregen",
"53-night": "Nieselregen",
"55-day": "starker Nieselregen",
"55-night": "starker Nieselregen",
"55-night": "Starker Nieselregen",
"56-day": "leichter gefrierender Nieselregen",
"56-night": "leichter gefrierender Nieselregen",
"56-night": "Leicht gefrierender Nieselregen",
"57-day": "gefrierender Nieselregen",
"57-night": "gefrierender Nieselregen",
"57-night": "Gefrierender Nieselregen",
"61-day": "leichter Regen",
"61-night": "leichter Regen",
"61-night": "Leichter Regen",
"63-day": "Regen",
"63-night": "Regen",
"65-day": "starker Regen",
"65-night": "starker Regen",
"65-night": "Starker Regen",
"66-day": "Gefrierender Regen",
"66-night": "Gefrierender Regen",
"67-day": "Gefrierender Regen",
"67-night": "Gefrierender Regen",
"71-day": "Leichter Schneefall",
"71-night": "Leichter Schneefall",
"71-night": "Leichter Schnee",
"73-day": "Schnee",
"73-night": "Schnee",
"75-day": "Starker Schneefall",
"75-night": "Starker Schneefall",
"75-night": "Starker Schnee",
"77-day": "Schneegriesel",
"77-night": "Schneegriesel",
"77-night": "Schneekörner",
"80-day": "Leichte Schauer",
"80-night": "Leichte Schauer",
"81-day": "Schauer",
@@ -508,11 +517,11 @@
"86-day": "Schneeschauer",
"86-night": "Schneeschauer",
"95-day": "Gewitter",
"95-night": "Gewitter",
"95-night": "Sturm",
"96-day": "Gewitter mit Hagel",
"96-night": "Gewitter mit Hagel",
"99-day": "Gewitter mit Hagel",
"99-night": "Gewitter mit Hagel"
"96-night": "Sturm mit Hagel",
"99-day": "Sturm mit Hagel",
"99-night": "Sturm mit Hagel"
},
"homebridge": {
"available_update": "System",
@@ -521,15 +530,15 @@
"up_to_date": "Aktuell",
"child_bridges": "Unter-Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Senden",
"pending": "Ausstehend",
"down": "Empfangen"
"up": "Online",
"pending": "Wartend",
"down": "Offline"
},
"healthchecks": {
"new": "Neu",
"up": "Senden",
"up": "Online",
"grace": "In Karenzzeit",
"down": "Empfangen",
"down": "Offline",
"paused": "Pausiert",
"status": "Status",
"last_ping": "Letzter Ping",
@@ -544,7 +553,7 @@
"approvedPushes": "Genehmigt",
"rejectedPushes": "Abgelehnt",
"filters": "Filter",
"indexers": "Indexer"
"indexers": "Indexierer"
},
"tubearchivist": {
"downloads": "Warteschlange",
@@ -555,18 +564,19 @@
"truenas": {
"load": "Systemlast",
"uptime": "Betriebszeit",
"alerts": "Warnungen"
"alerts": "Alarme"
},
"pyload": {
"speed": "Datenrate",
"active": "Aktiv",
"queue": "Warteschlange",
"total": "Gesamt"
"total": "Total"
},
"gluetun": {
"public_ip": "Öffentliche IP",
"region": "Region",
"country": "Land"
"country": "Land",
"port_forwarded": "Port weitergeleitet"
},
"hdhomerun": {
"channels": "Kanäle",
@@ -582,12 +592,12 @@
},
"scrutiny": {
"passed": "Bestanden",
"failed": "Fehlgeschlagen",
"failed": "Fehlerhaft",
"unknown": "Unbekannt"
},
"paperlessngx": {
"inbox": "Posteingang",
"total": "Gesamt"
"total": "Total"
},
"peanut": {
"battery_charge": "Akkuladung",
@@ -619,10 +629,10 @@
"limit": "Grenze"
},
"opnsense": {
"cpu": "CPU-Auslastung",
"memory": "Aktiver RAM",
"wanUpload": "WAN-Upload",
"wanDownload": "WAN-Download"
"cpu": "CPU-Last",
"memory": "RAM aktiv",
"wanUpload": "WAN Up",
"wanDownload": "WAN Down"
},
"moonraker": {
"printer_state": "Druckerstatus",
@@ -644,9 +654,9 @@
"load": "Durchschnittliche Last",
"memory": "Speichernutzung",
"wanStatus": "WAN-Status",
"up": "Senden",
"down": "Empfangen",
"temp": "Temperatur",
"up": "Online",
"down": "Offline",
"temp": "Temp",
"disk": "Datenträgernutzung",
"wanIP": "WAN-IP"
},
@@ -663,11 +673,11 @@
"storage": "Speicher"
},
"uptimekuma": {
"up": "Seiten verfügbar",
"down": "Seiten nicht verfügbar",
"up": "Up",
"down": "Down",
"uptime": "Betriebszeit",
"incident": "Vorfall",
"m": "min"
"m": "m"
},
"atsumeru": {
"series": "Serien",
@@ -699,9 +709,13 @@
"fileflows": {
"queue": "Warteschlange",
"processing": "Wird verarbeitet",
"processed": "Verarbeitet",
"processed": "Wird verarbeitet",
"time": "Zeit"
},
"firefly": {
"networth": "Reinvermögen",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Datenquellen",
@@ -721,7 +735,7 @@
"size": "Größe",
"lastrun": "Letzter Durchlauf",
"nextrun": "Nächster Durchlauf",
"failed": "Fehlgeschlagen"
"failed": "Fehlerhaft"
},
"unmanic": {
"active_workers": "Aktive Worker",
@@ -738,14 +752,15 @@
"targets_total": "Alle Ziele"
},
"gatus": {
"up": "Seiten verfügbar",
"down": "Seiten nicht verfügbar",
"up": "Seiten online",
"down": "Seiten offline",
"uptime": "Betriebszeit"
},
"ghostfolio": {
"gross_percent_today": "Heute",
"gross_percent_1y": "Ein Jahr",
"gross_percent_max": "Gesamt"
"gross_percent_max": "Gesamt",
"net_worth": ""
},
"audiobookshelf": {
"podcasts": "Podcasts",
@@ -784,7 +799,7 @@
"buildId": "Build-ID",
"succeeded": "Erfolgreich",
"notStarted": "Nicht gestartet",
"failed": "Fehlgeschlagen",
"failed": "Fehlerhaft",
"canceled": "Abgebrochen",
"inProgress": "In Bearbeitung",
"totalPrs": "PRs gesamt",
@@ -817,17 +832,17 @@
},
"openmediavault": {
"downloading": "Wird heruntergeladen",
"total": "Gesamt",
"total": "Total",
"running": "Wird ausgeführt",
"stopped": "Gestoppt",
"passed": "Bestanden",
"failed": "Fehlgeschlagen"
"passed": "Erfolgreich",
"failed": "Fehlerhaft"
},
"openwrt": {
"uptime": "Betriebszeit",
"cpuLoad": "CPU-Last (5 min-Durchschnitt)",
"up": "Senden",
"down": "Empfangen",
"up": "Online",
"down": "Offline",
"bytesTx": "Übertragen",
"bytesRx": "Empfangen"
},
@@ -836,13 +851,13 @@
"uptime": "Betriebszeit",
"lastDown": "Letzter Ausfall",
"downDuration": "Ausfalldauer",
"sitesUp": "Seiten verfügbar",
"sitesDown": "Seiten nicht verfügbar",
"sitesUp": "Seiten online",
"sitesDown": "Seiten offline",
"paused": "Pausiert",
"notyetchecked": "Noch nicht geprüft",
"up": "Senden",
"up": "Online",
"seemsdown": "Scheint nicht verfügbar",
"down": "Empfangen",
"down": "Unbekannt",
"unknown": "Unbekannt"
},
"calendar": {
@@ -850,7 +865,8 @@
"physicalRelease": "Physische Version",
"digitalRelease": "Digitale Version",
"noEventsToday": "Heute keine Ereignisse!",
"noEventsFound": "Keine Termine gefunden"
"noEventsFound": "Keine Termine gefunden",
"errorWhenLoadingData": "Fehler beim Laden der Kalenderdaten"
},
"romm": {
"platforms": "Plattformen",
@@ -861,7 +877,7 @@
"totalfilesize": "Gesamtgröße"
},
"mailcow": {
"domains": "Domänen",
"domains": "Domains",
"mailboxes": "Postfächer",
"mails": "E-Mails",
"storage": "Speicher"
@@ -879,7 +895,8 @@
"gitea": {
"notifications": "Benachrichtigungen",
"issues": "Probleme",
"pulls": "Pull-Requests"
"pulls": "Pull-Requests",
"repositories": "Repositories"
},
"stash": {
"scenes": "Szenen",
@@ -894,7 +911,7 @@
"performers": "Darsteller",
"studios": "Studios",
"movies": "Filme",
"tags": "Schlagwörter",
"tags": "Tags",
"oCount": "O-Anzahl"
},
"tandoor": {
@@ -911,14 +928,14 @@
"totalValue": "Gesamtwert"
},
"crowdsec": {
"alerts": "Warnungen",
"alerts": "Alarme",
"bans": "Banns"
},
"wgeasy": {
"connected": "Verbunden",
"enabled": "Aktiviert",
"disabled": "Deaktiviert",
"total": "Gesamt"
"total": "Total"
},
"swagdashboard": {
"proxied": "Proxied",
@@ -946,11 +963,11 @@
"linkwarden": {
"links": "Links",
"collections": "Sammlungen",
"tags": "Schlagwörter"
"tags": "Tags"
},
"zabbix": {
"unclassified": "Nicht klassifiziert",
"information": "Informationen",
"information": "Information",
"warning": "Warnung",
"average": "Durchschnitt",
"high": "Hoch",
@@ -981,9 +998,12 @@
"beszel": {
"name": "Name",
"systems": "Systeme",
"up": "Senden",
"up": "Up",
"down": "Down",
"paused": "Pausiert",
"pending": "Wartend",
"status": "Status",
"updated": "Aktualisiert",
"updated": "Aktuell",
"cpu": "CPU",
"memory": "RAM",
"disk": "Festplatte",
@@ -993,19 +1013,112 @@
"apps": "Anwendungen",
"synced": "Synchronisiert",
"outOfSync": "Nicht mehr synchronisiert",
"healthy": "Fehlerfrei",
"healthy": "Gesund",
"degraded": "Beeinträchtigt",
"progressing": "Fortschritt",
"missing": "Fehlend",
"suspended": "Unterbrochen"
},
"spoolman": {
"loading": "Wird geladen"
"loading": "Lädt"
},
"gitlab": {
"groups": "Gruppen",
"issues": "Probleme",
"merges": "Merge Requests",
"projects": "Projekte"
},
"apcups": {
"status": "Status",
"load": "Last",
"bcharge": "Batterieladung",
"timeleft": "Verbleibende Zeit"
},
"karakeep": {
"bookmarks": "Lesezeichen",
"favorites": "Favoriten",
"archived": "Archiviert",
"highlights": "Highlights",
"lists": "Listen",
"tags": "Tags"
},
"slskd": {
"slskStatus": "Netzwerk",
"connected": "Verbunden",
"disconnected": "Getrennt",
"updateStatus": "Update",
"update_yes": "Verfügbar",
"update_no": "Aktuell",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Dateien"
},
"jellystat": {
"songs": "Songs",
"movies": "Filme",
"episodes": "Episoden",
"other": "Andere"
},
"checkmk": {
"serviceErrors": "Dienstprobleme",
"hostErrors": "Hostprobleme"
},
"komodo": {
"total": "Gesamt",
"running": "Aktiv",
"stopped": "Angehalten",
"down": "Inaktiv",
"unhealthy": "Fehlerhaft",
"unknown": "Unbekannt",
"servers": "Server",
"stacks": "Stacks",
"containers": "Container"
},
"filebrowser": {
"available": "Verfügbar",
"used": "Benutzt",
"total": "Total"
},
"wallos": {
"activeSubscriptions": "Abonnements",
"thisMonthlyCost": "Dieser Monat",
"nextMonthlyCost": "Nächster Monat",
"previousMonthlyCost": "Vorh. Monat",
"nextRenewingSubscription": "Nächste Zahlung"
},
"unraid": {
"STARTED": "Gestartet",
"STOPPED": "Angehalten",
"NEW_ARRAY": "Neues Array",
"RECON_DISK": "Festplatte wird neu aufgebaut",
"DISABLE_DISK": "Festplatte deaktiviert",
"SWAP_DSBL": "Swap deaktivieren",
"INVALID_EXPANSION": "Üngültige Erweiterung",
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
"TOO_MANY_MISSING_DISKS": "Zu viele fehlende Festplatten",
"NEW_DISK_TOO_SMALL": "Neue Festplatte zu klein",
"NO_DATA_DISKS": "Keine Datenträger",
"notifications": "Mitteilungen",
"status": "Status",
"cpu": "CPU",
"memoryUsed": "Speichernutzung",
"memoryAvailable": "Verfügbarer Speicher",
"arrayUsed": "Array verwendet",
"arrayFree": "Array frei",
"poolUsed": "{{pool}} verwendet",
"poolFree": "{{pool}} frei"
},
"backrest": {
"num_plans": "Pläne",
"num_success_30": "Erfolgreich",
"num_failure_30": "Fehlerhaft",
"num_success_latest": "Erfolgreich",
"num_failure_latest": "Fehlgeschlagen",
"bytes_added_30": "Bytes hinzugefügt"
},
"yourspotify": {
"songs": "Titel",
"time": "Zeit",
"artists": "Künstler"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@@ -273,7 +275,8 @@
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
@@ -357,6 +360,12 @@
"services": "Services",
"middleware": "Middleware"
},
"trilium": {
"version": "Version",
"notesCount": "Notes",
"dbSize": "Database Size",
"unknown": "Unknown"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
@@ -566,7 +575,8 @@
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
"country": "Country",
"port_forwarded": "Port Forwarded"
},
"hdhomerun": {
"channels": "Channels",
@@ -702,6 +712,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@@ -745,7 +759,8 @@
"ghostfolio": {
"gross_percent_today": "Today",
"gross_percent_1y": "One year",
"gross_percent_max": "All time"
"gross_percent_max": "All time",
"net_worth": "Net Worth"
},
"audiobookshelf": {
"podcasts": "Podcasts",
@@ -850,7 +865,8 @@
"physicalRelease": "Physical release",
"digitalRelease": "Digital release",
"noEventsToday": "No events for today!",
"noEventsFound": "No events found"
"noEventsFound": "No events found",
"errorWhenLoadingData": "Error when loading calendar data"
},
"romm": {
"platforms": "Platforms",
@@ -877,9 +893,10 @@
"species": "Species"
},
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
"pulls": "Pull Requests"
"notifications": "Notifications",
"issues": "Issues",
"pulls": "Pull Requests",
"repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -982,6 +999,9 @@
"name": "Name",
"systems": "Systems",
"up": "Up",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Status",
"updated": "Updated",
"cpu": "CPU",
@@ -1007,5 +1027,98 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Load",
"bcharge":"Battery Charge",
"timeleft":"Time Left"
},
"karakeep": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
},
"jellystat": {
"songs": "Songs",
"movies": "Movies",
"episodes": "Episodes",
"other": "Other"
},
"checkmk": {
"serviceErrors": "Service issues",
"hostErrors": "Host issues"
},
"komodo": {
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"down": "Down",
"unhealthy": "Unhealthy",
"unknown": "Unknown",
"servers": "Servers",
"stacks": "Stacks",
"containers": "Containers"
},
"filebrowser": {
"available": "Available",
"used": "Used",
"total": "Total"
},
"wallos": {
"activeSubscriptions": "Subscriptions",
"thisMonthlyCost": "This Month",
"nextMonthlyCost": "Next Month",
"previousMonthlyCost": "Prev. Month",
"nextRenewingSubscription": "Next Payment"
},
"unraid": {
"STARTED": "Started",
"STOPPED": "Stopped",
"NEW_ARRAY": "New Array",
"RECON_DISK": "Reconstructing Disk",
"DISABLE_DISK": "Disk Disabled",
"SWAP_DSBL": "Swap Disable",
"INVALID_EXPANSION": "Invalid Expansion",
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
"NO_DATA_DISKS": "No Data Disks",
"notifications": "Notifications",
"status": "Status",
"cpu": "CPU",
"memoryUsed": "Memory Used",
"memoryAvailable": "Memory Available",
"arrayUsed": "Array Used",
"arrayFree": "Array Free",
"poolUsed": "{{pool}} Used",
"poolFree": "{{pool}} Free"
},
"backrest": {
"num_plans": "Plans",
"num_success_30": "Successes",
"num_failure_30": "Failures",
"num_success_latest": "Succeeding",
"num_failure_latest": "Failing",
"bytes_added_30": "Bytes Added"
},
"yourspotify": {
"songs": "Songs",
"time": "Time",
"artists": "Artists"
}
}

View File

@@ -63,14 +63,14 @@
"wlan_users": "WLAN-Uzantoj",
"up": "UP",
"down": "DOWN",
"wait": "Bonvolu atendi",
"wait": "Please wait",
"empty_data": "Subsistemostatuso nekonata"
},
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "MEM",
"cpu": "Ĉefprocesoro",
"cpu": "CPU",
"running": "Rulata",
"offline": "Malkonekta",
"error": "Eraro",
@@ -83,7 +83,7 @@
"partial": "Parta"
},
"ping": {
"error": "Eraro",
"error": "Error",
"ping": "Sondaĵo",
"down": "Down",
"up": "Up",
@@ -91,7 +91,7 @@
},
"siteMonitor": {
"http_status": "HTTP status",
"error": "Eraro",
"error": "Error",
"response": "Response",
"down": "Down",
"up": "Up",
@@ -108,11 +108,11 @@
"songs": "Kantoj"
},
"esphome": {
"offline": "Malkonekta",
"offline_alt": "Malkonekta",
"offline": "Offline",
"offline_alt": "Offline",
"online": "Online",
"total": "Totalo",
"unknown": "Nekonata"
"total": "Total",
"unknown": "Unknown"
},
"evcc": {
"pv_power": "Production",
@@ -133,7 +133,7 @@
"unread": "Unread"
},
"fritzbox": {
"connectionStatus": "Stato",
"connectionStatus": "Status",
"connectionStatusUnconfigured": "Unconfigured",
"connectionStatusConnecting": "Connecting",
"connectionStatusAuthenticating": "Authenticating",
@@ -148,7 +148,9 @@
"up": "Up",
"received": "Received",
"sent": "Sent",
"externalIPAddress": "Ext. IP"
"externalIPAddress": "Ext. IP",
"externalIPv6Address": "Ext. IPv6",
"externalIPv6Prefix": "Ext. IPv6-Prefix"
},
"caddy": {
"upstreams": "Upstreams",
@@ -166,9 +168,9 @@
"passes": "Passes"
},
"tautulli": {
"playing": "Ludante",
"transcoding": "Transkodigo",
"bitrate": "Bitrapido",
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams",
"plex_connection_error": "Check Plex Connection"
},
@@ -176,7 +178,7 @@
"connectedAp": "Connected APs",
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedGateway": "Connected gateways",
"connectedGateways": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"nzbget": {
@@ -187,7 +189,7 @@
"plex": {
"streams": "Active Streams",
"albums": "Albums",
"movies": "Filmoj",
"movies": "Movies",
"tv": "Televidprogramoj"
},
"sabnzbd": {
@@ -197,18 +199,18 @@
},
"rutorrent": {
"active": "Active",
"upload": "Alŝuti",
"download": "Elŝuti"
"upload": "Upload",
"download": "Download"
},
"transmission": {
"download": "Elŝuti",
"upload": "Alŝuti",
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"qbittorrent": {
"download": "Elŝuti",
"upload": "Alŝuti",
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
@@ -221,8 +223,8 @@
"invalid": "Invalid"
},
"deluge": {
"download": "Elŝuti",
"upload": "Alŝuti",
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
@@ -231,25 +233,25 @@
"cachemissbytes": "Cache Miss Bytes"
},
"downloadstation": {
"download": "Elŝuti",
"upload": "Alŝuti",
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Serioj",
"series": "Series",
"queue": "Queue",
"unknown": "Nekonata"
"unknown": "Unknown"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Filmoj",
"movies": "Movies",
"queue": "Queue",
"unknown": "Nekonata"
"unknown": "Unknown"
},
"lidarr": {
"wanted": "Wanted",
@@ -272,17 +274,18 @@
},
"jellyseerr": {
"pending": "Pending",
"approved": "Aprobita",
"available": "Havebla"
"approved": "Approved",
"available": "Available",
"issues": "Open Issues"
},
"overseerr": {
"pending": "Pending",
"processing": "Processing",
"approved": "Aprobita",
"available": "Havebla"
"approved": "Approved",
"available": "Available"
},
"netalertx": {
"total": "Totalo",
"total": "Total",
"connected": "Connected",
"new_devices": "New Devices",
"down_alerts": "Down Alerts"
@@ -300,14 +303,14 @@
"latency": "Latency"
},
"speedtest": {
"upload": "Alŝuti",
"download": "Elŝuti",
"ping": "Sondaĵo"
"upload": "Upload",
"download": "Download",
"ping": "Ping"
},
"portainer": {
"running": "Rulata",
"running": "Running",
"stopped": "Stopped",
"total": "Totalo"
"total": "Total"
},
"suwayomi": {
"download": "Downloaded",
@@ -357,6 +360,12 @@
"services": "Servoj",
"middleware": "Middleware"
},
"trilium": {
"version": "Version",
"notesCount": "Notes",
"dbSize": "Database Size",
"unknown": "Unknown"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
@@ -364,7 +373,7 @@
"npm": {
"enabled": "Enabled",
"disabled": "Disabled",
"total": "Totalo"
"total": "Total"
},
"coinmarketcap": {
"configure": "Configure one or more crypto currencies to track",
@@ -375,7 +384,7 @@
},
"gotify": {
"apps": "Applications",
"clients": "Klientoj",
"clients": "Clients",
"messages": "Mesaĝoj"
},
"prowlarr": {
@@ -396,48 +405,48 @@
"transferRate": "Rate"
},
"mastodon": {
"user_count": "Uzantoj",
"user_count": "Users",
"status_count": "Afiŝoj",
"domain_count": "Domains"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Serioj"
"series": "Series"
},
"minecraft": {
"players": "Players",
"version": "Version",
"status": "Stato",
"status": "Status",
"up": "Online",
"down": "Malkonekta"
"down": "Offline"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
},
"authentik": {
"users": "Uzantoj",
"users": "Users",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
},
"proxmox": {
"mem": "MEM",
"cpu": "Ĉefprocesoro",
"cpu": "CPU",
"lxc": "LXC",
"vms": "VMs"
},
"glances": {
"cpu": "Ĉefprocesoro",
"load": "Ŝarĝo",
"wait": "Bonvolu atendi",
"cpu": "CPU",
"load": "Load",
"wait": "Please wait",
"temp": "TEMP",
"_temp": "Temp",
"warn": "Warn",
"uptime": "UP",
"total": "Totalo",
"free": "Libera",
"used": "Uzata",
"total": "Total",
"free": "Free",
"used": "Used",
"days": "d",
"hours": "h",
"crit": "Crit",
@@ -462,13 +471,13 @@
"1-day": "Mainly Sunny",
"1-night": "Mainly Clear",
"2-day": "Nubeta",
"2-night": "Nubeta",
"2-night": "Partly Cloudy",
"3-day": "Nuba",
"3-night": "Nuba",
"3-night": "Cloudy",
"45-day": "Nebula",
"45-night": "Nebula",
"48-day": "Nebula",
"48-night": "Nebula",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-day": "Drizzle",
@@ -482,19 +491,19 @@
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Pluvo",
"63-night": "Pluvo",
"63-night": "Rain",
"65-day": "Pluvego",
"65-night": "Pluvego",
"65-night": "Heavy Rain",
"66-day": "Frosta pluvo",
"66-night": "Frosta pluvo",
"67-day": "Frosta pluvo",
"67-night": "Frosta pluvo",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Neĝo",
"73-night": "Neĝo",
"73-night": "Snow",
"75-day": "Neĝego",
"75-night": "Neĝego",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
@@ -508,11 +517,11 @@
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Fulmotondro",
"95-night": "Fulmotondro",
"95-night": "Thunderstorm",
"96-day": "Fulmotondro kun hajlo",
"96-night": "Fulmotondro kun hajlo",
"99-day": "Fulmotondro kun hajlo",
"99-night": "Fulmotondro kun hajlo"
"96-night": "Thunderstorm With Hail",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail"
},
"homebridge": {
"available_update": "Sistemo",
@@ -531,7 +540,7 @@
"grace": "In Grace Period",
"down": "Down",
"paused": "Paused",
"status": "Stato",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
@@ -541,7 +550,7 @@
"containers_failed": "Failed"
},
"autobrr": {
"approvedPushes": "Aprobita",
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"filters": "Filtriloj",
"indexers": "Indexers"
@@ -561,15 +570,16 @@
"speed": "Speed",
"active": "Active",
"queue": "Queue",
"total": "Totalo"
"total": "Total"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Regiono",
"country": "Lando"
"country": "Lando",
"port_forwarded": "Port Forwarded"
},
"hdhomerun": {
"channels": "Kanaloj",
"channels": "Channels",
"hd": "HD",
"tunerCount": "Tuners",
"channelNumber": "Channel",
@@ -577,17 +587,17 @@
"signalStrength": "Strength",
"signalQuality": "Quality",
"symbolQuality": "Quality",
"networkRate": "Bitrapido",
"networkRate": "Bitrate",
"clientIP": "Client"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Nekonata"
"unknown": "Unknown"
},
"paperlessngx": {
"inbox": "Inbox",
"total": "Totalo"
"total": "Total"
},
"peanut": {
"battery_charge": "Battery Charge",
@@ -631,14 +641,14 @@
"layers": "Layers"
},
"octoprint": {
"printer_state": "Stato",
"printer_state": "Status",
"temp_tool": "Tool temp",
"temp_bed": "Bed temp",
"job_completion": "Completion"
},
"cloudflared": {
"origin_ip": "Origin IP",
"status": "Stato"
"status": "Status"
},
"pfsense": {
"load": "Load Avg",
@@ -653,11 +663,11 @@
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "Ĉefprocesoro",
"cpu_usage": "CPU",
"memory_usage": "Memory"
},
"immich": {
"users": "Uzantoj",
"users": "Users",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
@@ -670,23 +680,23 @@
"m": "m"
},
"atsumeru": {
"series": "Serioj",
"series": "Series",
"archives": "Archives",
"chapters": "Chapters",
"categories": "Categories"
},
"komga": {
"libraries": "Libraries",
"series": "Serioj",
"books": "Libroj"
"series": "Series",
"books": "Books"
},
"diskstation": {
"days": "Tagoj",
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Havebla"
"volumeAvailable": "Available"
},
"mylar": {
"series": "Serioj",
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
},
@@ -702,6 +712,10 @@
"processed": "Processed",
"time": "Time"
},
"firefly": {
"networth": "Net Worth",
"budget": "Budget"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
@@ -717,7 +731,7 @@
"numshares": "Shared Items"
},
"kopia": {
"status": "Stato",
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
@@ -745,11 +759,12 @@
"ghostfolio": {
"gross_percent_today": "Today",
"gross_percent_1y": "One year",
"gross_percent_max": "All time"
"gross_percent_max": "All time",
"net_worth": "Net Worth"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"books": "Libroj",
"books": "Books",
"podcastsDuration": "Duration",
"booksDuration": "Duration"
},
@@ -763,10 +778,10 @@
"updates": "Updates"
},
"calibreweb": {
"books": "Libroj",
"books": "Books",
"authors": "Authors",
"categories": "Categories",
"series": "Serioj"
"series": "Series"
},
"jdownloader": {
"downloadCount": "Queue",
@@ -775,12 +790,12 @@
"downloadSpeed": "Speed"
},
"kavita": {
"seriesCount": "Serioj",
"seriesCount": "Series",
"totalFiles": "Files"
},
"azuredevops": {
"result": "Result",
"status": "Stato",
"status": "Status",
"buildId": "Build ID",
"succeeded": "Succeeded",
"notStarted": "Not Started",
@@ -789,19 +804,19 @@
"inProgress": "In Progress",
"totalPrs": "Total PRs",
"myPrs": "My PRs",
"approved": "Aprobita"
"approved": "Approved"
},
"gamedig": {
"status": "Stato",
"status": "Status",
"online": "Online",
"offline": "Malkonekta",
"offline": "Offline",
"name": "Name",
"map": "Map",
"currentPlayers": "Current players",
"players": "Players",
"maxPlayers": "Max players",
"bots": "Bots",
"ping": "Sondaĵo"
"ping": "Ping"
},
"urbackup": {
"ok": "Ok",
@@ -811,14 +826,14 @@
},
"mealie": {
"recipes": "Recipes",
"users": "Uzantoj",
"users": "Users",
"categories": "Categories",
"tags": "Tags"
},
"openmediavault": {
"downloading": "Downloading",
"total": "Totalo",
"running": "Rulata",
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"passed": "Passed",
"failed": "Failed"
@@ -832,7 +847,7 @@
"bytesRx": "Received"
},
"uptimerobot": {
"status": "Stato",
"status": "Status",
"uptime": "Uptime",
"lastDown": "Last Downtime",
"downDuration": "Downtime Duration",
@@ -843,14 +858,15 @@
"up": "Up",
"seemsdown": "Seems Down",
"down": "Down",
"unknown": "Nekonata"
"unknown": "Unknown"
},
"calendar": {
"inCinemas": "In cinemas",
"physicalRelease": "Physical release",
"digitalRelease": "Digital release",
"noEventsToday": "No events for today!",
"noEventsFound": "No events found"
"noEventsFound": "No events found",
"errorWhenLoadingData": "Error when loading calendar data"
},
"romm": {
"platforms": "Platforms",
@@ -879,7 +895,8 @@
"gitea": {
"notifications": "Notifications",
"issues": "Issues",
"pulls": "Pull Requests"
"pulls": "Pull Requests",
"repositories": "Repositories"
},
"stash": {
"scenes": "Scenes",
@@ -893,12 +910,12 @@
"galleries": "Galleries",
"performers": "Performers",
"studios": "Studios",
"movies": "Filmoj",
"movies": "Movies",
"tags": "Tags",
"oCount": "O Count"
},
"tandoor": {
"users": "Uzantoj",
"users": "Users",
"recipes": "Recipes",
"keywords": "Keywords"
},
@@ -907,7 +924,7 @@
"totalWithWarranty": "With Warranty",
"locations": "Locations",
"labels": "Labels",
"users": "Uzantoj",
"users": "Users",
"totalValue": "Total Value"
},
"crowdsec": {
@@ -918,7 +935,7 @@
"connected": "Connected",
"enabled": "Enabled",
"disabled": "Disabled",
"total": "Totalo"
"total": "Total"
},
"swagdashboard": {
"proxied": "Proxied",
@@ -927,9 +944,9 @@
"banned": "Banned"
},
"myspeed": {
"ping": "Sondaĵo",
"download": "Elŝuti",
"upload": "Alŝuti"
"ping": "Ping",
"download": "Download",
"upload": "Upload"
},
"stocks": {
"stocks": "Stocks",
@@ -950,7 +967,7 @@
},
"zabbix": {
"unclassified": "Not classified",
"information": "Informo",
"information": "Information",
"warning": "Warning",
"average": "Average",
"high": "High",
@@ -974,17 +991,20 @@
"name": "Name",
"address": "Address",
"last_seen": "Last Seen",
"status": "Stato",
"status": "Status",
"online": "Online",
"offline": "Malkonekta"
"offline": "Offline"
},
"beszel": {
"name": "Name",
"systems": "Systems",
"up": "Up",
"status": "Stato",
"down": "Down",
"paused": "Paused",
"pending": "Pending",
"status": "Status",
"updated": "Updated",
"cpu": "Ĉefprocesoro",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
@@ -993,7 +1013,7 @@
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"healthy": "Sana",
"healthy": "Healthy",
"degraded": "Degraded",
"progressing": "Progressing",
"missing": "Missing",
@@ -1007,5 +1027,98 @@
"issues": "Issues",
"merges": "Merge Requests",
"projects": "Projects"
},
"apcups": {
"status": "Status",
"load": "Load",
"bcharge": "Battery Charge",
"timeleft": "Time Left"
},
"karakeep": {
"bookmarks": "Bookmarks",
"favorites": "Favorites",
"archived": "Archived",
"highlights": "Highlights",
"lists": "Lists",
"tags": "Tags"
},
"slskd": {
"slskStatus": "Network",
"connected": "Connected",
"disconnected": "Disconnected",
"updateStatus": "Update",
"update_yes": "Available",
"update_no": "Up to Date",
"downloads": "Downloads",
"uploads": "Uploads",
"sharedFiles": "Files"
},
"jellystat": {
"songs": "Songs",
"movies": "Movies",
"episodes": "Episodes",
"other": "Other"
},
"checkmk": {
"serviceErrors": "Service issues",
"hostErrors": "Host issues"
},
"komodo": {
"total": "Total",
"running": "Running",
"stopped": "Stopped",
"down": "Down",
"unhealthy": "Unhealthy",
"unknown": "Unknown",
"servers": "Servers",
"stacks": "Stacks",
"containers": "Containers"
},
"filebrowser": {
"available": "Available",
"used": "Used",
"total": "Total"
},
"wallos": {
"activeSubscriptions": "Subscriptions",
"thisMonthlyCost": "This Month",
"nextMonthlyCost": "Next Month",
"previousMonthlyCost": "Prev. Month",
"nextRenewingSubscription": "Next Payment"
},
"unraid": {
"STARTED": "Started",
"STOPPED": "Stopped",
"NEW_ARRAY": "New Array",
"RECON_DISK": "Reconstructing Disk",
"DISABLE_DISK": "Disk Disabled",
"SWAP_DSBL": "Swap Disable",
"INVALID_EXPANSION": "Invalid Expansion",
"PARITY_NOT_BIGGEST": "Parity Not Biggest",
"TOO_MANY_MISSING_DISKS": "Too Many Missing Disks",
"NEW_DISK_TOO_SMALL": "New Disk Too Small",
"NO_DATA_DISKS": "No Data Disks",
"notifications": "Notifications",
"status": "Status",
"cpu": "CPU",
"memoryUsed": "Memory Used",
"memoryAvailable": "Memory Available",
"arrayUsed": "Array Used",
"arrayFree": "Array Free",
"poolUsed": "{{pool}} Used",
"poolFree": "{{pool}} Free"
},
"backrest": {
"num_plans": "Plans",
"num_success_30": "Successes",
"num_failure_30": "Failures",
"num_success_latest": "Succeeding",
"num_failure_latest": "Failing",
"bytes_added_30": "Bytes Added"
},
"yourspotify": {
"songs": "Songs",
"time": "Time",
"artists": "Artists"
}
}

View File

@@ -43,7 +43,7 @@
"mem": "MEM",
"total": "Total",
"free": "Libre",
"used": "Usado",
"used": "Utilizado",
"load": "Carga",
"temp": "TEMP",
"max": "Máx.",
@@ -63,7 +63,7 @@
"wlan_users": "Usuarios WLAN",
"up": "ACTIVO",
"down": "CAÍDO",
"wait": "Espera, por favor",
"wait": "Espere, por favor",
"empty_data": "Se desconoce el estado del subsistema"
},
"docker": {
@@ -83,7 +83,7 @@
"partial": "Parcial"
},
"ping": {
"error": "Fallo",
"error": "Error",
"ping": "Ping",
"down": "Inactivo",
"up": "Activo",
@@ -91,10 +91,10 @@
},
"siteMonitor": {
"http_status": "Estado HTTP",
"error": "Fallo",
"error": "Error",
"response": "Respuesta",
"down": "Inactivo",
"up": "Activo",
"up": "Activos",
"not_available": "No disponible"
},
"emby": {
@@ -108,8 +108,8 @@
"songs": "Canciones"
},
"esphome": {
"offline": "Desconectado",
"offline_alt": "Desconectado",
"offline": "Fuera de línea",
"offline_alt": "Fuera de línea",
"online": "En línea",
"total": "Total",
"unknown": "Desconocido"
@@ -145,10 +145,12 @@
"maxDown": "Descarga máxima",
"maxUp": "Subida máxima",
"down": "Inactivo",
"up": "Activo",
"up": "Activos",
"received": "Recibido",
"sent": "Enviado",
"externalIPAddress": "IP ext."
"externalIPAddress": "IP ext.",
"externalIPv6Address": "IPv6 ext.",
"externalIPv6Prefix": "Prefijo IPv6 ext."
},
"caddy": {
"upstreams": "Upstream (desarrollo de software)",
@@ -176,7 +178,7 @@
"connectedAp": "AP conectados",
"activeUser": "Dispositivos activos",
"alerts": "Alertas",
"connectedGateway": "Puertas de enlace conectadas",
"connectedGateways": "Puertas de enlace conectadas",
"connectedSwitches": "Conmutadores conectados"
},
"nzbget": {
@@ -203,13 +205,13 @@
"transmission": {
"download": "Descarga",
"upload": "Subida",
"leech": "Descargas",
"leech": "Descargando",
"seed": "Semillas"
},
"qbittorrent": {
"download": "Descarga",
"upload": "Subida",
"leech": "Descargas",
"leech": "Descargando",
"seed": "Semillas"
},
"qnap": {
@@ -223,7 +225,7 @@
"deluge": {
"download": "Descarga",
"upload": "Subida",
"leech": "Descargas",
"leech": "Descargando",
"seed": "Semillas"
},
"develancacheui": {
@@ -233,14 +235,14 @@
"downloadstation": {
"download": "Descarga",
"upload": "Subida",
"leech": "Descargas",
"leech": "Descargando",
"seed": "Semillas"
},
"sonarr": {
"wanted": "Buscando",
"queued": "En cola",
"series": "Series",
"queue": "En cola",
"queue": "Cola",
"unknown": "Desconocido"
},
"radarr": {
@@ -248,7 +250,7 @@
"missing": "Faltantes",
"queued": "En cola",
"movies": "Películas",
"queue": "En cola",
"queue": "Cola",
"unknown": "Desconocido"
},
"lidarr": {
@@ -273,7 +275,8 @@
"jellyseerr": {
"pending": "Pendiente",
"approved": "Aprobado",
"available": "Disponible"
"available": "Disponible",
"issues": "Issues Abiertos"
},
"overseerr": {
"pending": "Pendiente",
@@ -305,19 +308,19 @@
"ping": "Ping"
},
"portainer": {
"running": "Ejecutando",
"running": "En ejecución",
"stopped": "Detenido",
"total": "Total"
},
"suwayomi": {
"download": "Descargado",
"nondownload": "Non-Downloaded",
"read": "Leer",
"unread": "Sin leer",
"downloadedread": "Downloaded & Read",
"downloadedunread": "Downloaded & Unread",
"nondownloadedread": "Non-Downloaded & Read",
"nondownloadedunread": "Non-Downloaded & Unread"
"nondownload": "No descargado",
"read": "Leído",
"unread": "No leídos",
"downloadedread": "Descargado y leído",
"downloadedunread": "Descargado y no leído",
"nondownloadedread": "No descargado y leído",
"nondownloadedunread": "No descargado y no leído"
},
"tailscale": {
"address": "Dirección",
@@ -347,7 +350,7 @@
"totalClients": "Clientes"
},
"tdarr": {
"queue": "En cola",
"queue": "Cola",
"processed": "Procesado",
"errored": "Error",
"saved": "Guardado"
@@ -357,13 +360,19 @@
"services": "Servicios",
"middleware": "Software intermedio"
},
"trilium": {
"version": "Versión",
"notesCount": "Notas",
"dbSize": "Tamaño de la base de datos",
"unknown": "Desconocido"
},
"navidrome": {
"nothing_streaming": "Sin transmisiones activas",
"please_wait": "Por favor, espera"
},
"npm": {
"enabled": "Activado",
"disabled": "Desactivado",
"enabled": "Activos",
"disabled": "Inactivos",
"total": "Total"
},
"coinmarketcap": {
@@ -387,7 +396,7 @@
},
"jackett": {
"configured": "Configurado",
"errored": "Error"
"errored": "Con fallo"
},
"strelaysrv": {
"numActiveSessions": "Sesiones",
@@ -410,7 +419,7 @@
"version": "Versión",
"status": "Estado",
"up": "En línea",
"down": "Desconectado"
"down": "Fuera de línea"
},
"miniflux": {
"read": "Leer",
@@ -430,7 +439,7 @@
"glances": {
"cpu": "CPU",
"load": "Carga",
"wait": "Espera, por favor",
"wait": "Por favor, espera",
"temp": "TEMP",
"_temp": "Temperatura",
"warn": "Advertir",
@@ -441,7 +450,7 @@
"days": "d",
"hours": "h",
"crit": "Crít.",
"read": "Leer",
"read": "Leído",
"write": "Escribir",
"gpu": "GPU",
"mem": "Memoria",
@@ -453,7 +462,7 @@
"search": "Buscar",
"custom": "Personalizado",
"visit": "Visitar",
"url": "Enlace",
"url": "URL",
"searchsuggestion": "Sugerencia"
},
"wmo": {
@@ -462,13 +471,13 @@
"1-day": "Mayormente soleado",
"1-night": "Mayormente despejado",
"2-day": "Parcialmente nuboso",
"2-night": "Parcialmente nuboso",
"2-night": "Parcialmente nublado",
"3-day": "Nublado",
"3-night": "Nublado",
"45-day": "Niebla",
"45-night": "Niebla",
"48-day": "Niebla",
"48-night": "Niebla",
"45-night": "Neblinoso",
"48-day": "Neblinoso",
"48-night": "Neblinoso",
"51-day": "Llovizna ligera",
"51-night": "Llovizna ligera",
"53-day": "Llovizna",
@@ -484,29 +493,29 @@
"63-day": "Lluvia",
"63-night": "Lluvia",
"65-day": "Lluvia torrencial",
"65-night": "Lluvia torrencial",
"65-night": "Lluvia fuerte",
"66-day": "Granizo",
"66-night": "Granizo",
"67-day": "Granizo",
"67-night": "Granizo",
"66-night": "Lluvia helada",
"67-day": "Lluvia helada",
"67-night": "Lluvia helada",
"71-day": "Nevada leve",
"71-night": "Nevada leve",
"71-night": "Nieve ligera",
"73-day": "Nevada",
"73-night": "Nevada",
"73-night": "Nieve",
"75-day": "Nevada intensa",
"75-night": "Nevada intensa",
"75-night": "Nieve intensa",
"77-day": "Granizada",
"77-night": "Granizada",
"80-day": "Llovizna",
"80-night": "Llovizna",
"80-night": "Chubascos ligeros",
"81-day": "Lluvia",
"81-night": "Lluvia",
"81-night": "Chubascos",
"82-day": "Lluvias torrenciales",
"82-night": "Lluvias torrenciales",
"82-night": "Chubascos fuertes",
"85-day": "Lluvia de nieve",
"85-night": "Lluvia de nieve",
"86-day": "Lluvia de nieve",
"86-night": "Lluvia de nieve",
"85-night": "Chubascos de nieve",
"86-day": "Chubascos de nieve",
"86-night": "Chubascos de nieve",
"95-day": "Tormenta",
"95-night": "Tormenta",
"96-day": "Tormenta con granizo",
@@ -547,7 +556,7 @@
"indexers": "Indexadores"
},
"tubearchivist": {
"downloads": "En cola",
"downloads": "Cola",
"videos": "Videos",
"channels": "Canales",
"playlists": "Listas de reproducción"
@@ -560,13 +569,14 @@
"pyload": {
"speed": "Velocidad",
"active": "Activo",
"queue": "En cola",
"queue": "Cola",
"total": "Total"
},
"gluetun": {
"public_ip": "IP pública",
"region": "Región",
"country": "País"
"country": "País",
"port_forwarded": "Puerto redireccionado"
},
"hdhomerun": {
"channels": "Canales",
@@ -646,7 +656,7 @@
"wanStatus": "Estado de la WAN",
"up": "Activo",
"down": "Inactivo",
"temp": "Temperatura",
"temp": "Temp",
"disk": "Uso del disco",
"wanIP": "IP de la WAN"
},
@@ -697,11 +707,15 @@
"people": "Personas"
},
"fileflows": {
"queue": "En cola",
"queue": "Cola",
"processing": "Procesando",
"processed": "Procesado",
"time": "Tiempo"
},
"firefly": {
"networth": "Patrimonio neto",
"budget": "Presupuesto"
},
"grafana": {
"dashboards": "Tableros",
"datasources": "Fuentes de datos",
@@ -745,7 +759,8 @@
"ghostfolio": {
"gross_percent_today": "Hoy",
"gross_percent_1y": "Un año",
"gross_percent_max": "Todo el tiempo"
"gross_percent_max": "Todo el tiempo",
"net_worth": "Net Worth"
},
"audiobookshelf": {
"podcasts": "Podcasts",
@@ -787,21 +802,21 @@
"failed": "Fallido",
"canceled": "Cancelado",
"inProgress": "En curso",
"totalPrs": "RP totales",
"myPrs": "Mis logros",
"totalPrs": "PRs totales",
"myPrs": "Mis PRs",
"approved": "Aprobado"
},
"gamedig": {
"status": "Estado",
"online": "En línea",
"offline": "Desconectado",
"offline": "Fuera de línea",
"name": "Nombre",
"map": "Mapa",
"currentPlayers": "Jugadores actuales",
"players": "Jugadores",
"maxPlayers": "Jugadores máximos",
"bots": "Bots",
"ping": "Ping"
"ping": "Latencia"
},
"urbackup": {
"ok": "OK",
@@ -839,18 +854,19 @@
"sitesUp": "Sitios activos",
"sitesDown": "Sitios inactivos",
"paused": "Pausado",
"notyetchecked": "Aún no verificado",
"notyetchecked": "Aún no comprobado",
"up": "Activo",
"seemsdown": "Parece caída",
"seemsdown": "Parece caído",
"down": "Inactivo",
"unknown": "Desconocido"
},
"calendar": {
"inCinemas": "En cine",
"inCinemas": "En cines",
"physicalRelease": "Lanzamiento en físico",
"digitalRelease": "Lanzamiento en digital",
"noEventsToday": "¡Sin eventos para hoy!",
"noEventsFound": "No se encontraron eventos"
"noEventsFound": "No se encontraron eventos",
"errorWhenLoadingData": "Error al cargar los datos del calendario"
},
"romm": {
"platforms": "Plataformas",
@@ -878,8 +894,9 @@
},
"gitea": {
"notifications": "Notificaciones",
"issues": "Números",
"pulls": "Solicitudes de cambios"
"issues": "Incidencias",
"pulls": "Solicitudes de cambios",
"repositories": "Repositorios"
},
"stash": {
"scenes": "Escenas",
@@ -915,9 +932,9 @@
"bans": "Baneos"
},
"wgeasy": {
"connected": "Conectado",
"enabled": "Activado",
"disabled": "Desactivado",
"connected": "Conectados",
"enabled": "Activo",
"disabled": "Inactivos",
"total": "Total"
},
"swagdashboard": {
@@ -927,7 +944,7 @@
"banned": "Baneado"
},
"myspeed": {
"ping": "Ping",
"ping": "Latencia",
"download": "Descarga",
"upload": "Subida"
},
@@ -976,36 +993,132 @@
"last_seen": "Visto por última vez",
"status": "Estado",
"online": "En línea",
"offline": "Desconectado"
"offline": "Fuera de línea"
},
"beszel": {
"name": "Nombre",
"systems": "Systems",
"systems": "Sistemas",
"up": "Activo",
"down": "Inactivo",
"paused": "Pausado",
"pending": "Pendiente",
"status": "Estado",
"updated": "Actualizado",
"cpu": "CPU",
"memory": "MEM",
"disk": "Disk",
"network": "NET"
"disk": "Disco",
"network": "RED"
},
"argocd": {
"apps": "Apps",
"synced": "Synced",
"outOfSync": "Out Of Sync",
"synced": "Sincronizado",
"outOfSync": "Desincronizado",
"healthy": "Saludable",
"degraded": "Degraded",
"progressing": "Progressing",
"degraded": "Degradado",
"progressing": "Progresando",
"missing": "Faltantes",
"suspended": "Suspended"
"suspended": "Suspendido"
},
"spoolman": {
"loading": "Cargando"
},
"gitlab": {
"groups": "Groups",
"issues": "Números",
"merges": "Merge Requests",
"projects": "Projects"
"groups": "Grupos",
"issues": "Incidencias",
"merges": "Solicitudes de fusión",
"projects": "Proyectos"
},
"apcups": {
"status": "Estado",
"load": "Carga",
"bcharge": "Carga de la batería",
"timeleft": "Tiempo restante"
},
"karakeep": {
"bookmarks": "Marcadores",
"favorites": "Favoritos",
"archived": "Archivado",
"highlights": "Destacados",
"lists": "Listas",
"tags": "Etiquetas"
},
"slskd": {
"slskStatus": "Red",
"connected": "Conectado",
"disconnected": "Desconectado",
"updateStatus": "Actualización",
"update_yes": "Disponible",
"update_no": "Actualizado",
"downloads": "Descargas",
"uploads": "Subidas",
"sharedFiles": "Archivos"
},
"jellystat": {
"songs": "Canciones",
"movies": "Películas",
"episodes": "Episodios",
"other": "Otros"
},
"checkmk": {
"serviceErrors": "Problemas de servicio",
"hostErrors": "Problemas de host"
},
"komodo": {
"total": "Total",
"running": "En ejecución",
"stopped": "Detenido",
"down": "Inactivo",
"unhealthy": "En mal estado",
"unknown": "Desconocido",
"servers": "Servidores",
"stacks": "Stacks",
"containers": "Contenedores"
},
"filebrowser": {
"available": "Disponible",
"used": "Usado",
"total": "Total"
},
"wallos": {
"activeSubscriptions": "Suscripciones",
"thisMonthlyCost": "Este mes",
"nextMonthlyCost": "Próximo mes",
"previousMonthlyCost": "Mes anterior",
"nextRenewingSubscription": "Próximo pago"
},
"unraid": {
"STARTED": "Iniciado",
"STOPPED": "Detenido",
"NEW_ARRAY": "Nueva matriz",
"RECON_DISK": "Reconstruyendo disco",
"DISABLE_DISK": "Disco deshabilitado",
"SWAP_DSBL": "Swap deshabilitado",
"INVALID_EXPANSION": "Expansión inválida",
"PARITY_NOT_BIGGEST": "Paridad no es el más grande",
"TOO_MANY_MISSING_DISKS": "Demasiados discos faltantes",
"NEW_DISK_TOO_SMALL": "Nuevo disco demasiado pequeño",
"NO_DATA_DISKS": "Sin discos de datos",
"notifications": "Notificaciones",
"status": "Estado",
"cpu": "CPU",
"memoryUsed": "Memoria usada",
"memoryAvailable": "Memoria disponible",
"arrayUsed": "Matriz usada",
"arrayFree": "Matriz libre",
"poolUsed": "{{pool}} Usado",
"poolFree": "{{pool}} Libre"
},
"backrest": {
"num_plans": "Planes",
"num_success_30": "Éxitos",
"num_failure_30": "Fallos",
"num_success_latest": "Exitosa",
"num_failure_latest": "Fallida",
"bytes_added_30": "Bytes Añadidos"
},
"yourspotify": {
"songs": "Canciones",
"time": "Tiempo",
"artists": "Artistas"
}
}

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