mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-05 21:47:48 +01:00
Compare commits
426 Commits
v0.10.2
...
06d8d9bd1d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06d8d9bd1d | ||
|
|
4031178831 | ||
|
|
b65c8399d8 | ||
|
|
6b63cfd491 | ||
|
|
196c51bf73 | ||
|
|
17c9b2631e | ||
|
|
1a21189643 | ||
|
|
b6b428363c | ||
|
|
e707fa46cf | ||
|
|
3d040362cb | ||
|
|
57b193b037 | ||
|
|
8a75c9b6e3 | ||
|
|
0dafc792f7 | ||
|
|
afc0fe29ee | ||
|
|
817a9bbce5 | ||
|
|
3ef7031eb0 | ||
|
|
6faf32eae9 | ||
|
|
455e86571a | ||
|
|
7d1e0c087a | ||
|
|
d48ef4c038 | ||
|
|
4a2eeaa8b9 | ||
|
|
faa2e6bb36 | ||
|
|
438543d8cd | ||
|
|
5a350cc9ce | ||
|
|
529814cf03 | ||
|
|
9b5275a854 | ||
|
|
e623196ac0 | ||
|
|
973b1f7aaf | ||
|
|
81a322cc99 | ||
|
|
36e82a8b90 | ||
|
|
1383e22acd | ||
|
|
a756a01d63 | ||
|
|
937efc9f1b | ||
|
|
fe6f32f072 | ||
|
|
226603770c | ||
|
|
2f48d21bfd | ||
|
|
4457baffa5 | ||
|
|
91d12c401c | ||
|
|
3f8da51aeb | ||
|
|
837717461f | ||
|
|
effedc28ed | ||
|
|
76b477572e | ||
|
|
6c6660b91b | ||
|
|
6886040798 | ||
|
|
1fb4850bef | ||
|
|
06cf76d724 | ||
|
|
7aeda56af4 | ||
|
|
2058b7fcae | ||
|
|
1e06e93e47 | ||
|
|
8f756d4084 | ||
|
|
02089a35ee | ||
|
|
f7a6b7dbf4 | ||
|
|
4028194830 | ||
|
|
4c04a7a45f | ||
|
|
ce344a9db5 | ||
|
|
8e90ece498 | ||
|
|
151ad552ca | ||
|
|
251cb65e12 | ||
|
|
8ebd0d0b2e | ||
|
|
c20f71738b | ||
|
|
78b73e8166 | ||
|
|
547ef0c4c5 | ||
|
|
11d148fff0 | ||
|
|
eb61d69626 | ||
|
|
876304cda5 | ||
|
|
65dce6d387 | ||
|
|
7b60a60d4e | ||
|
|
8d37cad871 | ||
|
|
cd25ae3258 | ||
|
|
a27cdbc284 | ||
|
|
e772ef0ad1 | ||
|
|
8cc00ae09a | ||
|
|
f4efc71350 | ||
|
|
b663e56174 | ||
|
|
5fe5a3869e | ||
|
|
a9ec5aa1e7 | ||
|
|
44405b4aae | ||
|
|
842cec2fee | ||
|
|
c6ad937619 | ||
|
|
a6ab095ff9 | ||
|
|
9a085bcb17 | ||
|
|
6d7be1c7f2 | ||
|
|
25cd51cee9 | ||
|
|
495de204d1 | ||
|
|
8e5f4d55c9 | ||
|
|
184fd65c76 | ||
|
|
15817f9b27 | ||
|
|
79671ac30e | ||
|
|
1d5db612fd | ||
|
|
d30016304b | ||
|
|
f0fd125e37 | ||
|
|
9ed4b85d5a | ||
|
|
f607d806d0 | ||
|
|
c0ddb5f816 | ||
|
|
fc563532e1 | ||
|
|
98248903c6 | ||
|
|
5870111d11 | ||
|
|
bb23c25690 | ||
|
|
4084c8dafc | ||
|
|
cb1dde1b79 | ||
|
|
1691711a52 | ||
|
|
b5d8f6c01c | ||
|
|
db86b5408a | ||
|
|
4be2c2868b | ||
|
|
c6197a9f92 | ||
|
|
dd861d7d1c | ||
|
|
e65f8c46f9 | ||
|
|
082e1316c1 | ||
|
|
a4b5e72d82 | ||
|
|
0e79501ddc | ||
|
|
4814ee48ef | ||
|
|
5b7a36666c | ||
|
|
75b27a644b | ||
|
|
b3bde11e3a | ||
|
|
8fdf2b074c | ||
|
|
20c4400a9b | ||
|
|
1a7e57bfb6 | ||
|
|
07f70a79be | ||
|
|
a2e3aa7085 | ||
|
|
085d91b3f7 | ||
|
|
9417929c99 | ||
|
|
6bc5f0f499 | ||
|
|
fa2efb1ac9 | ||
|
|
8c4e73e122 | ||
|
|
0c000c1ecd | ||
|
|
bbb013e0ce | ||
|
|
d581d70d1a | ||
|
|
612d05fd4d | ||
|
|
0d6ecae51b | ||
|
|
c48cf71d59 | ||
|
|
7f630fd77f | ||
|
|
aa942dbd73 | ||
|
|
7426a12cdf | ||
|
|
cbf2e1a509 | ||
|
|
d0165326a6 | ||
|
|
dba3a1f893 | ||
|
|
f5ecd6d787 | ||
|
|
1d990ef7c7 | ||
|
|
767e7c58b4 | ||
|
|
c393982e84 | ||
|
|
927b943fa4 | ||
|
|
50f6d5f0e7 | ||
|
|
0482bf7b17 | ||
|
|
e215e7d70e | ||
|
|
0a44a2dade | ||
|
|
0fe76b5af8 | ||
|
|
e51db24418 | ||
|
|
1a1039194c | ||
|
|
00bb1a3f37 | ||
|
|
73aa2018a8 | ||
|
|
8ce9e57ed8 | ||
|
|
6e16adc460 | ||
|
|
352c54ecc4 | ||
|
|
a64c83209a | ||
|
|
1147fc858f | ||
|
|
fcfb9c2237 | ||
|
|
34bffe980a | ||
|
|
5759596a37 | ||
|
|
30abf4e422 | ||
|
|
0e96778740 | ||
|
|
fc99a0d1db | ||
|
|
417d69d39d | ||
|
|
8f4013012a | ||
|
|
0c6c40dae7 | ||
|
|
1a46baae69 | ||
|
|
0fa3d7e57b | ||
|
|
be7e1115cc | ||
|
|
dc0fede4d2 | ||
|
|
7850fe4651 | ||
|
|
524cb7695c | ||
|
|
35be5559b3 | ||
|
|
75ff2e674f | ||
|
|
edab958328 | ||
|
|
2334021da0 | ||
|
|
1079d33ad1 | ||
|
|
42c69db7da | ||
|
|
27a392dcce | ||
|
|
74c2a2462b | ||
|
|
0d47fa8215 | ||
|
|
ee07a7dcbe | ||
|
|
6cf3abd45e | ||
|
|
ea37ab2f78 | ||
|
|
564a0880b0 | ||
|
|
f8768711da | ||
|
|
6abb3d8758 | ||
|
|
3f160cc4ae | ||
|
|
81547f8806 | ||
|
|
d5f66e12fc | ||
|
|
9c7e177b4f | ||
|
|
49ad01733c | ||
|
|
6c82883fa9 | ||
|
|
3c6f99d5ae | ||
|
|
b28cc0b7f6 | ||
|
|
2509d8c235 | ||
|
|
a0868e3201 | ||
|
|
7e8752243c | ||
|
|
41dc2e77cb | ||
|
|
8b50296dad | ||
|
|
61a669c85d | ||
|
|
af7803fd04 | ||
|
|
937cecf24e | ||
|
|
c562016cce | ||
|
|
2376184b14 | ||
|
|
7272823d20 | ||
|
|
3223b1fb87 | ||
|
|
38f60a7566 | ||
|
|
63e521ae93 | ||
|
|
cf54c7b824 | ||
|
|
4a9ca62efd | ||
|
|
a35da39c03 | ||
|
|
d99c3cb691 | ||
|
|
1fe4f49771 | ||
|
|
0a1bf3b2be | ||
|
|
23e9982a7a | ||
|
|
e2c997f29d | ||
|
|
ae9fbdcb8b | ||
|
|
a60dbb7abc | ||
|
|
6597ec566b | ||
|
|
52399e21e1 | ||
|
|
dbc26e835c | ||
|
|
a59ee5a605 | ||
|
|
f46568ec2a | ||
|
|
5e946ed2c2 | ||
|
|
6741eb723d | ||
|
|
1666106dcd | ||
|
|
eda06965fa | ||
|
|
954ab54493 | ||
|
|
30cb893354 | ||
|
|
4567427b9c | ||
|
|
ee7e8fab61 | ||
|
|
313835c0e6 | ||
|
|
999dade861 | ||
|
|
2cabe77b55 | ||
|
|
0a50d5a6aa | ||
|
|
e19dcc2729 | ||
|
|
cadf1433af | ||
|
|
6bae078a8d | ||
|
|
77bbdc6a04 | ||
|
|
1f8fd1c69d | ||
|
|
5d557844cc | ||
|
|
a4b07b91fe | ||
|
|
d853bbfe44 | ||
|
|
7fd5e6ccb1 | ||
|
|
aed602ad70 | ||
|
|
fa28a11658 | ||
|
|
a3b693e2b6 | ||
|
|
708c4e64d1 | ||
|
|
11a6b5d0b8 | ||
|
|
ce0102eb6f | ||
|
|
42f1ed3c47 | ||
|
|
dca23e8547 | ||
|
|
8d20f22932 | ||
|
|
071b5275bc | ||
|
|
de9c015f7f | ||
|
|
b4dc53c7c0 | ||
|
|
934ad3a6f1 | ||
|
|
6fbe080b28 | ||
|
|
4047f8d6e8 | ||
|
|
59cd5564f8 | ||
|
|
5f19e4af91 | ||
|
|
5ea46881ee | ||
|
|
9545757bb9 | ||
|
|
95507aab54 | ||
|
|
564dfb7ce3 | ||
|
|
7b72442114 | ||
|
|
65370a7668 | ||
|
|
6e9339b14c | ||
|
|
241c786710 | ||
|
|
801ce479d8 | ||
|
|
16730ffec2 | ||
|
|
b35dd80e8c | ||
|
|
82b159bf14 | ||
|
|
6292a0709c | ||
|
|
42af93bef3 | ||
|
|
964991781c | ||
|
|
607a14083e | ||
|
|
133a0a6539 | ||
|
|
0d0f465e16 | ||
|
|
16c1b2da9b | ||
|
|
4761a56b3d | ||
|
|
9d40b67d49 | ||
|
|
97f4bcbdb0 | ||
|
|
ea1375e575 | ||
|
|
733a3140d1 | ||
|
|
b5ac617597 | ||
|
|
9b06212a92 | ||
|
|
6b4182ab96 | ||
|
|
8656b8e2f1 | ||
|
|
dd8e9270f2 | ||
|
|
90dd8e5967 | ||
|
|
6fca9e342d | ||
|
|
66a8b1c21e | ||
|
|
a0dc8c9ccb | ||
|
|
8190260400 | ||
|
|
7ced73b206 | ||
|
|
a2f4dd289b | ||
|
|
0c7cac74ea | ||
|
|
d81fcee31f | ||
|
|
f7889eab27 | ||
|
|
91518d972d | ||
|
|
a090f98fab | ||
|
|
5629440acf | ||
|
|
471800d5bc | ||
|
|
6ab57b7b14 | ||
|
|
f767ff047f | ||
|
|
26242d657d | ||
|
|
3ff61cfad6 | ||
|
|
9c1ac747be | ||
|
|
859bd459a8 | ||
|
|
544b9aef2f | ||
|
|
bea02fc8c7 | ||
|
|
1f282a1a93 | ||
|
|
bb5cb36491 | ||
|
|
9a6489c117 | ||
|
|
955baf9cb1 | ||
|
|
e9630afa30 | ||
|
|
4c91dfa71b | ||
|
|
f33ff582fd | ||
|
|
b8b5c1a4cb | ||
|
|
03cd98b1d6 | ||
|
|
f7def5c2ce | ||
|
|
d26ec27942 | ||
|
|
548b5f8081 | ||
|
|
b466be684f | ||
|
|
99cde187d8 | ||
|
|
d55a5e5efe | ||
|
|
fdf405fe0a | ||
|
|
9b8dd94aae | ||
|
|
8b1f1c391f | ||
|
|
a8961c3345 | ||
|
|
7f910814f8 | ||
|
|
862b0e5821 | ||
|
|
d682b6a4bf | ||
|
|
bee16c7eb6 | ||
|
|
9097da2341 | ||
|
|
58391ff33f | ||
|
|
666d075ec4 | ||
|
|
7b7c7a5b80 | ||
|
|
1dd5a9e1b0 | ||
|
|
0fd4ac17cd | ||
|
|
94738e2c0d | ||
|
|
1c24bd7449 | ||
|
|
2881114816 | ||
|
|
f1ec02fb6f | ||
|
|
68480a65db | ||
|
|
63b9d395dd | ||
|
|
a5bdfd92d7 | ||
|
|
48e2c494eb | ||
|
|
d95709de95 | ||
|
|
cf90312089 | ||
|
|
bcdd4a149b | ||
|
|
96af6cf804 | ||
|
|
b63d740ed1 | ||
|
|
fea4b27bb4 | ||
|
|
455103a9f1 | ||
|
|
277fbe8051 | ||
|
|
477392aa29 | ||
|
|
e46377f461 | ||
|
|
f283b83e6e | ||
|
|
0a1265455b | ||
|
|
05af70d11b | ||
|
|
91d5fc8e42 | ||
|
|
2a95f88cdf | ||
|
|
0615799c6c | ||
|
|
839f6d4baf | ||
|
|
cc6fe63d40 | ||
|
|
ae500fd983 | ||
|
|
873c265205 | ||
|
|
07dff4c8a5 | ||
|
|
cbacf458b2 | ||
|
|
cae304b7eb | ||
|
|
e6a821ecc3 | ||
|
|
49036a9738 | ||
|
|
0197b449ed | ||
|
|
dc3382447c | ||
|
|
6beaf665fb | ||
|
|
b9622f75b0 | ||
|
|
cd8c7d9016 | ||
|
|
9021182c2c | ||
|
|
fe462a71d6 | ||
|
|
1e556e105d | ||
|
|
b5f4daa8ef | ||
|
|
fd50241e2a | ||
|
|
6a0fbba407 | ||
|
|
2ee5fd123b | ||
|
|
86a13817df | ||
|
|
2f7d948a5c | ||
|
|
1b79e51194 | ||
|
|
2d98ac30f2 | ||
|
|
1a85175b15 | ||
|
|
6f429a6a4b | ||
|
|
3020a2d1fd | ||
|
|
a6e85240c6 | ||
|
|
98e816204a | ||
|
|
a0b5ac318a | ||
|
|
101461b7b5 | ||
|
|
ba6f50f21d | ||
|
|
dd3a229559 | ||
|
|
630d5024ac | ||
|
|
d239687e2e | ||
|
|
81a3dfbfe4 | ||
|
|
034720f47a | ||
|
|
0717607a97 | ||
|
|
ee5442c15c | ||
|
|
b2158b0921 | ||
|
|
a158866ca1 | ||
|
|
4f27ffbe2d | ||
|
|
10bc8a15a9 | ||
|
|
5d63b3d212 | ||
|
|
43decb0ed9 | ||
|
|
e4d42b5393 | ||
|
|
f717e59085 | ||
|
|
fd05ae377c | ||
|
|
cc9b4782f2 | ||
|
|
14cda38dbb | ||
|
|
27e3c9f1ed | ||
|
|
607c4b7750 | ||
|
|
1c6480586c | ||
|
|
31c04006da | ||
|
|
499ab4d701 | ||
|
|
fbb35d3dc8 | ||
|
|
94936ed09d | ||
|
|
31a511de02 | ||
|
|
2d91b2b748 | ||
|
|
7dabd0335f | ||
|
|
d0937fe6a8 |
@@ -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/
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
12
.github/DISCUSSION_TEMPLATE/support.yml
vendored
12
.github/DISCUSSION_TEMPLATE/support.yml
vendored
@@ -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.*
|
||||
|
||||
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -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.
|
||||
|
||||
2
.github/workflows/crowdin.yml
vendored
2
.github/workflows/crowdin.yml
vendored
@@ -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:
|
||||
|
||||
167
.github/workflows/docker-publish.yml
vendored
167
.github/workflows/docker-publish.yml
vendored
@@ -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
|
||||
|
||||
24
.github/workflows/docs-publish.yml
vendored
24
.github/workflows/docs-publish.yml
vendored
@@ -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
|
||||
|
||||
2
.github/workflows/reaction-comments.yml
vendored
2
.github/workflows/reaction-comments.yml
vendored
@@ -5,8 +5,6 @@ on:
|
||||
types: [created, edited]
|
||||
pull_request_review_comment:
|
||||
types: [created, edited]
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
|
||||
permissions:
|
||||
actions: write
|
||||
|
||||
12
.github/workflows/repo-maintenance.yml
vendored
12
.github/workflows/repo-maintenance.yml
vendored
@@ -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);
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
5
.prettierrc.js
Normal file
5
.prettierrc.js
Normal file
@@ -0,0 +1,5 @@
|
||||
const config = {
|
||||
plugins: [require("prettier-plugin-organize-imports")],
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
32
.vscode/launch.json
vendored
32
.vscode/launch.json
vendored
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
81
Dockerfile
81
Dockerfile
@@ -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"]
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
.md-typeset[data-page-id="landing"] .md-header-anchor {
|
||||
display: none;
|
||||
}
|
||||
@@ -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 you’re 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 you’re 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).
|
||||
|
||||
@@ -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
81
docs/configs/proxmox.md
Normal 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
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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: [ Install on Docker :octicons-arrow-right-24:](docker.md)
|
||||
[:simple-docker: Install on Docker :octicons-arrow-right-24:](docker.md)
|
||||
{ .card }
|
||||
|
||||
:simple-kubernetes: [ Install on Kubernetes :octicons-arrow-right-24:](k8s.md)
|
||||
[:simple-kubernetes: Install on Kubernetes :octicons-arrow-right-24:](k8s.md)
|
||||
{ .card }
|
||||
|
||||
:simple-unraid: [ Install on UNRAID :octicons-arrow-right-24:](unraid.md)
|
||||
[:simple-unraid: Install on UNRAID :octicons-arrow-right-24:](unraid.md)
|
||||
{ .card }
|
||||
|
||||
:simple-nextdotjs: [ Building from source :octicons-arrow-right-24:](source.md)
|
||||
[:simple-nextdotjs: 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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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_
|
||||
|
||||
16
docs/widgets/services/apcups.md
Normal file
16
docs/widgets/services/apcups.md
Normal 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
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
|
||||
17
docs/widgets/services/backrest.md
Normal file
17
docs/widgets/services/backrest.md
Normal 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
|
||||
```
|
||||
@@ -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"]`
|
||||
|
||||
@@ -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
|
||||
|
||||
17
docs/widgets/services/checkmk.md
Normal file
17
docs/widgets/services/checkmk.md
Normal 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
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
19
docs/widgets/services/filebrowser.md
Normal file
19
docs/widgets/services/filebrowser.md
Normal 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
|
||||
```
|
||||
17
docs/widgets/services/firefly.md
Normal file
17
docs/widgets/services/firefly.md
Normal 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
|
||||
```
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: JDownloader
|
||||
description: NextPVR Widget Configuration
|
||||
description: JDownloader Widget Configuration
|
||||
---
|
||||
|
||||
Learn more about [JDownloader](https://jdownloader.org/).
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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:
|
||||
|
||||
18
docs/widgets/services/jellystat.md
Normal file
18
docs/widgets/services/jellystat.md
Normal 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
|
||||
```
|
||||
17
docs/widgets/services/karakeep.md
Normal file
17
docs/widgets/services/karakeep.md
Normal 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
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
22
docs/widgets/services/komodo.md
Normal file
22
docs/widgets/services/komodo.md
Normal 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
|
||||
```
|
||||
@@ -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"]`.
|
||||
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -16,4 +16,5 @@ widget:
|
||||
username: username
|
||||
password: password
|
||||
enableLeechProgress: true # optional, defaults to false
|
||||
enableLeechSize: true # optional, defaults to false
|
||||
```
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
25
docs/widgets/services/slskd.md
Normal file
25
docs/widgets/services/slskd.md
Normal 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
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
|
||||
19
docs/widgets/services/trilium.md
Normal file
19
docs/widgets/services/trilium.md
Normal 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
|
||||
```
|
||||
@@ -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_
|
||||
|
||||
28
docs/widgets/services/unraid.md
Normal file
28
docs/widgets/services/unraid.md
Normal 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
|
||||
```
|
||||
23
docs/widgets/services/wallos.md
Normal file
23
docs/widgets/services/wallos.md
Normal 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
|
||||
```
|
||||
@@ -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
|
||||
```
|
||||
|
||||
28
docs/widgets/services/yourspotify.md
Normal file
28
docs/widgets/services/yourspotify.md
Normal 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_.
|
||||
@@ -46,6 +46,10 @@ config:
|
||||
docker:
|
||||
settings:
|
||||
|
||||
env:
|
||||
- name: HOMEPAGE_ALLOWED_HOSTS
|
||||
value: "homepage.k3d.localhost:8080"
|
||||
|
||||
serviceAccount:
|
||||
create: true
|
||||
name: homepage
|
||||
|
||||
@@ -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,
|
||||
|
||||
14
mkdocs.yml
14
mkdocs.yml
@@ -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
|
||||
|
||||
@@ -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
8660
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
86
package.json
86
package.json
@@ -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
5489
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,5 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {},
|
||||
"@tailwindcss/postcss": {},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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
@@ -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": "Kø",
|
||||
"unknown": "Ukendt"
|
||||
"series": "Series",
|
||||
"queue": "Queue",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Ønsket",
|
||||
"wanted": "Wanted",
|
||||
"missing": "Mangler",
|
||||
"queued": "I Kø",
|
||||
"movies": "Film",
|
||||
"queue": "Kø",
|
||||
"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": "Kø",
|
||||
"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": "Kø",
|
||||
"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": "Kø",
|
||||
"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": "Kø",
|
||||
"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": "Kø",
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user