Compare commits

...

78 Commits

Author SHA1 Message Date
Ben Phelps
0eab49a449 New translations common.json (Yue) (#2132) 2023-10-05 23:56:05 +00:00
shamoon
24121cd5f0 run ci on merge_group 2023-10-05 15:17:05 -07:00
Lavender Shannon
8aeded4774 Update gluetun.md (#2137)
Fixed link to control server documentation
2023-10-05 22:14:37 +00:00
Denis Papec
40522fbb96 Fix: Quicklaunch shows also services without a url (#2136)
* Fix: Quicklaunch show only services with a link

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

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

This reverts commit 30ee825611.

* Filter only bookmarks and services with href

---------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/de/
2023-10-05 09:29:14 +02:00
shamoon
6de20f0ab6 Update homepage-move.md 2023-10-05 00:26:41 -07:00
shamoon
7434d597c9 Update migration docs 2023-10-05 00:22:51 -07:00
shamoon
59dbc79656 Remove deprecated notification 2023-10-04 23:55:03 -07:00
shamoon
b475f89d85 Migrate more URLs 2023-10-04 23:24:59 -07:00
shamoon
7f9ae3d01b Updating more repo URLs 2023-10-04 23:15:59 -07:00
shamoon
b12d27551a Update repo in docs 2023-10-04 23:12:53 -07:00
shamoon
3cf88d290f Merge branch 'feature-move-notification' 2023-10-04 22:47:11 -07:00
shamoon
9f030d1540 Update ping.jsx 2023-10-04 22:46:31 -07:00
shamoon
e8f6d81d13 Update ping.jsx 2023-10-04 22:37:53 -07:00
shamoon
571f627b3b Enhancement: statusStyle improvements (#2119) 2023-10-04 22:12:57 -07:00
shamoon
861ab32ca3 Update links 2023-10-03 18:55:02 -07:00
shamoon
aa5d24b9e4 Support notification re deprecated repo 2023-10-03 16:17:17 -07:00
shamoon
7adfe2ffd9 Documentation: correct ping statusStyle info 2023-10-01 01:54:06 -07:00
しぐれ
f8d2bb8611 Documentation: remove extra Service Widgets section (#2096) 2023-10-01 01:54:06 -07:00
Gino Cicatiello
892ebb8bd9 Translated using Weblate (Italian)
Currently translated at 99.8% (540 of 541 strings)

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

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

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

View File

@@ -11,13 +11,13 @@ body:
- type: markdown
attributes:
value: |
Have a question? 👉 [Start a new discussion](https://github.com/benphelps/homepage/discussions/new) or [ask in chat](https://discord.gg/SaPGSzrEZC).
Have a question? 👉 [Start a new discussion](https://github.com/gethomepage/homepage/discussions/new) or [ask in chat](https://discord.gg/SaPGSzrEZC).
Before opening an issue, please double check:
- [The troubleshooting guide](https://gethomepage.dev/en/more/troubleshooting/).
- [The troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/).
- [The homepage documentation](https://gethomepage.dev/)
- [Existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions).
- [Existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
- type: textarea
id: description
attributes:
@@ -78,7 +78,7 @@ body:
id: troubleshooting
attributes:
label: Troubleshooting
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/en/more/troubleshooting/#service-widget-errors). If this is a service widget issue and you do not include any information here your issue will be closed. If it is not, indicate e.g. 'n/a'
description: Please include output from your [troubleshooting tests](https://gethomepage.dev/latest/more/troubleshooting/#service-widget-errors). If this is a service widget issue and you do not include any information here your issue will be closed. If it is not, indicate e.g. 'n/a'
validations:
required: true
- type: textarea
@@ -93,7 +93,7 @@ body:
options:
- label: Check [the documentation](https://gethomepage.dev/)
required: true
- label: Follow [the troubleshooting guide](https://gethomepage.dev/en/more/troubleshooting/) (please include output above if applicable).
- label: Follow [the troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/) (please include output above if applicable).
required: true
- label: Search [existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions).
- label: Search [existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
required: true

View File

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

View File

@@ -3,10 +3,10 @@
<!--
Please include a summary of the change. Screenshots and / or videos can also be helpful if appropriate.
*** Please see the development guidelines for new widgets: https://gethomepage.dev/en/more/development/#service-widget-guidelines
*** Please see the development guidelines for new widgets: https://gethomepage.dev/latest/more/development/#service-widget-guidelines
*** If you do not follow these guidelines your PR will likely be closed without review.
New service widgets should include example(s) of relevant relevant API output as well as a PR to the docs for the new widget.
New service widgets should include example(s) of relevant relevant API output as well updates to the docs for the new widget.
-->
Closes # (issue)
@@ -20,11 +20,12 @@ 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)
- [ ] Documentation only
- [ ] Other (please explain)
## Checklist:
- [ ] If adding a service widget or a change that requires it, I have added corresponding documentation.
- [ ] If adding a new widget I have reviewed the [guidelines](https://gethomepage.dev/en/more/development/#service-widget-guidelines).
- [ ] If adding a service widget or a change that requires it, I have added corresponding documentation changes.
- [ ] If adding a new widget I have reviewed the [guidelines](https://gethomepage.dev/latest/more/development/#service-widget-guidelines).
- [ ] If applicable, I have checked that all tests pass with e.g. `pnpm lint`.
- [ ] If applicable, I have tested my code for new features & regressions on both mobile & desktop devices, using the latest version of major browsers.

View File

@@ -12,8 +12,15 @@ on:
branches: [ "main" ]
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
pull_request:
branches: [ "main" ]
paths-ignore:
- 'docs/**'
- 'mkdocs.yml'
merge_group:
env:
# Use docker.io for Docker Hub if empty
@@ -24,7 +31,8 @@ env:
jobs:
build:
name: Docker Build & Push
if: github.repository == 'gethomepage/homepage'
runs-on: self-hosted
permissions:
contents: read
@@ -40,7 +48,7 @@ jobs:
# Install the cosign tool except on PR
# https://github.com/sigstore/cosign-installer
- name: Install cosign
if: github.event_name != 'pull_request'
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@main
with:
cosign-release: 'v1.13.1' # optional

View File

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

4
.gitignore vendored
View File

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

View File

@@ -13,8 +13,8 @@ We use github to host code, to track issues and feature requests, as well as acc
## Any contributions you make will be under the GNU General Public License v3.0
In short, when you submit code changes, your submissions are understood to be under the same [GNU General Public License v3.0](https://choosealicense.com/licenses/gpl-3.0/) that covers the project. Feel free to contact the maintainers if that's a concern.
## Report bugs using Github's [issues](https://github.com/benphelps/homepage/issues)
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/benphelps/homepage/issues/new); it's that easy!
## Report bugs using Github's [issues](https://github.com/gethomepage/homepage/issues)
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/gethomepage/homepage/issues/new); it's that easy!
## Write bug reports with detail, background, and sample configurations
Homepage includes a lot of configuration options and is often deploying in larger systems. Please include as much information (configurations, deployment method, Docker & API versions, etc) as you can when reporting an issue.
@@ -32,7 +32,7 @@ Homepage includes a lot of configuration options and is often deploying in large
People *love* thorough bug reports. I'm not even kidding.
## Development Guidelines
Please see the [documentation regarding development](https://gethomepage.dev/en/more/development/) and specifically the [guidelines for new service widgets](https://gethomepage.dev/en/more/development/#service-widget-guidelines) if you are considering making one.
Please see the [documentation regarding development](https://gethomepage.dev/latest/more/development/) and specifically the [guidelines for new service widgets](https://gethomepage.dev/latest/more/development/#service-widget-guidelines) if you are considering making one.
## Use a Consistent Coding Style
This project follows the [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript), please follow it when submitting pull requests.

View File

@@ -36,9 +36,9 @@ RUN npm run telemetry \
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."
LABEL org.opencontainers.image.url="https://github.com/benphelps/homepage"
LABEL org.opencontainers.image.documentation='https://github.com/benphelps/homepage/wiki'
LABEL org.opencontainers.image.source='https://github.com/benphelps/homepage'
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

View File

@@ -14,7 +14,7 @@
</p>
<p align="center">
<a href="https://github.com/benphelps/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/benphelps/homepage/docker-publish.yml"></a>
<a href="https://github.com/gethomepage/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/gethomepage/homepage/docker-publish.yml"></a>
&nbsp;
<a href="https://hosted.weblate.org/engage/homepage/"><img src="https://hosted.weblate.org/widgets/homepage/-/homepage/svg-badge.svg" alt="Weblate"></a>
&nbsp;
@@ -39,19 +39,19 @@ With features like quick search, bookmarks, weather support, a wide range of int
## Docker Integration
Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker](https://gethomepage.dev/en/installation/docker/) page for more information.
Homepage has built-in support for Docker, and can automatically discover and add services to the homepage based on labels. See the [Docker](https://gethomepage.dev/latest/installation/docker/) page for more information.
## Service Widgets
Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/en/configs/service-widgets/) page for more information.
Homepage also has support for over 100 3rd party services, including all popular starr apps, and most popular self-hosted apps. Some examples include: Radarr, Sonarr, Lidarr, Bazarr, Ombi, Tautulli, Plex, Jellyfin, Emby, Transmission, qBittorrent, Deluge, Jackett, NZBGet, SABnzbd, etc. As well as service integrations, Homepage also has a number of information providers, sourcing information from a variety of external 3rd party APIs. See the [Service](https://gethomepage.dev/latest/configs/service-widgets/) page for more information.
## Information Widgets
Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/en/configs/widgets/) page for more information.
Homepage has built-in support for a number of information providers, including weather, time, date, search, glances and more. System and status information presented at the top of the page. See the [Information Providers](https://gethomepage.dev/latest/configs/widgets/) page for more information.
## Customization
Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the [Settings](https://gethomepage.dev/en/configs/settings/) page for more information.
Homepage is highly customizable, with support for custom themes, custom CSS & JS, custom layouts, formatting, localization and more. See the [Settings](https://gethomepage.dev/latest/configs/settings/) page for more information.
# Getting Started
@@ -65,7 +65,7 @@ Using docker compose:
version: "3.3"
services:
homepage:
image: ghcr.io/benphelps/homepage:latest
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
environment:
PUID: 1000 -- optional, your user id
@@ -88,7 +88,7 @@ docker run --name homepage \
-v /path/to/config:/app/config \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--restart unless-stopped \
ghcr.io/benphelps/homepage:latest
ghcr.io/gethomepage/homepage:latest
```
## With Node
@@ -96,7 +96,7 @@ docker run --name homepage \
First, clone the repository:
```bash
git clone https://github.com/benphelps/homepage.git
git clone https://github.com/gethomepage/homepage.git
```
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
@@ -158,9 +158,9 @@ mkdocs serve # or build, to build the static site
# Support & Suggestions
If you have any questions, suggestions, or general issues, please start a discussion on the [Discussions](https://github.com/benphelps/homepage/discussions) page.
If you have any questions, suggestions, or general issues, please start a discussion on the [Discussions](https://github.com/gethomepage/homepage/discussions) page.
For bug reports, please open an issue on the [Issues](https://github.com/benphelps/homepage/issues) page.
For bug reports, please open an issue on the [Issues](https://github.com/gethomepage/homepage/issues) page.
## Contributing & Contributers

3
crowdin.yml Normal file
View File

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

View File

@@ -49,7 +49,7 @@ dockerproxy:
restart: unless-stopped
homepage:
image: ghcr.io/benphelps/homepage:latest
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
volumes:
- /path/to/config:/app/config
@@ -76,7 +76,7 @@ If you'd rather use the socket directly, first make sure that you're passing the
```yaml
homepage:
image: ghcr.io/benphelps/homepage:latest
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
volumes:
- /path/to/config:/app/config

View File

@@ -121,11 +121,9 @@ Services may have an optional `ping` property that allows you to monitor the ava
ping: http://some.other.host/
```
<img width="1038" alt="Ping" src="https://github.com/benphelps/homepage/assets/88257202/7bc13bd3-0d0b-44e3-888c-a20e069a3233">
<img width="1038" alt="Ping" src="https://github.com/gethomepage/homepage/assets/88257202/7bc13bd3-0d0b-44e3-888c-a20e069a3233">
You can also apply different styles to the ping indicator by using the `statusStyle` property. The default is no value, and displays the response time in ms, but you can also use `dot` or `simple`. `dot` showing a green dot for a successful ping, and `simple` showing either ONLINE or OFFLINE to match the status style of Docker containers.
<!-- TODO: Insert images of the new status styles there -->
You can also apply different styles to the ping indicator by using the `statusStyle` property, see [settings](settings.md#status-style).
## Docker Integration
@@ -147,7 +145,7 @@ Services may be connected to a Docker container, either running on the local mac
container: other-container
```
<img width="1038" alt="Service Containers" src="https://github.com/benphelps/homepage/assets/88257202/4c685783-52c6-4e55-afb3-affe9baac09b">
<img width="1038" alt="Service Containers" src="https://github.com/gethomepage/homepage/assets/88257202/4c685783-52c6-4e55-afb3-affe9baac09b">
**Clicking on the status label of a service with Docker integration enabled will expand the container stats, where you can see CPU, Memory, and Network activity.**
@@ -155,7 +153,7 @@ Services may be connected to a Docker container, either running on the local mac
This can also be controlled with `showStats`. See [show docker stats](docker.md#show-docker-stats) for more information
<img width="1038" alt="Docker Stats Expanded" src="https://github.com/benphelps/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec">
<img width="1038" alt="Docker Stats Expanded" src="https://github.com/gethomepage/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec">
## Service Integrations

View File

@@ -380,6 +380,30 @@ or per-service (`services.yaml`) with:
If you have both set the per-service settings take precedence.
## Status Style
You can choose from the following styles for docker or k8s status and ping: `dot` or `basic`
- The default is no value, and displays the ping response time in ms and the docker / k8s container status
- `dot` shows a green dot for a successful ping or healthy status.
- `basic` shows either UP or DOWN for ping
For example:
```yaml
statusStyle: 'dot'
```
or per-service (`services.yaml`) with:
```yaml
- Example Service:
...
statusStyle: 'dot'
```
If you have both set, the per-service settings take precedence.
## Hide Widget Error Messages
Hide the visible API error messages either globally in `settings.yaml`:

View File

@@ -9,7 +9,7 @@ Using docker compose:
version: "3.3"
services:
homepage:
image: ghcr.io/benphelps/homepage:latest
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- 3000:3000
@@ -30,7 +30,7 @@ In the docker compose example below, the environment variables `$PUID` and `$PGI
version: "3.3"
services:
homepage:
image: ghcr.io/benphelps/homepage:latest
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- 3000:3000
@@ -45,7 +45,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/benphelps/homepage:latest
docker run -p 3000:3000 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest
```
### Using Environment Secrets

View File

@@ -291,7 +291,7 @@ spec:
enableServiceLinks: true
containers:
- name: homepage
image: "ghcr.io/benphelps/homepage:latest"
image: "ghcr.io/gethomepage/homepage:latest"
imagePullPolicy: Always
ports:
- name: http

View File

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

View File

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

View File

@@ -17,7 +17,7 @@ hide:
All service widgets work essentially the same, that is, homepage makes a proxied call to an API made available by that service. The majority of the time widgets don't work it is a configuration issue. Of course, sometimes things do break. Some basic steps to try:
1. Ensure that you follow the rule mentioned on https://gethomepage.dev/en/configs/service-widgets/. **Unless otherwise noted, URLs should not end with a / or other API path. Each widget will handle the path on its own.**. This is very important as including a trailing slash can result in an error.
1. Ensure that you follow the rule mentioned on https://gethomepage.dev/latest/configs/service-widgets/. **Unless otherwise noted, URLs should not end with a / or other API path. Each widget will handle the path on its own.**. This is very important as including a trailing slash can result in an error.
2. Verify the homepage installation can connect to the IP address or host you are using for the widget `url`. This is most simply achieved by pinging the server from the homepage machine, in Docker this means _from inside the container_ itself, e.g.:

View File

@@ -3,9 +3,9 @@ title: Glances
description: Glances Widget Configuration
---
<img width="1614" alt="glances" src="https://github.com/benphelps/homepage-docs/assets/82196/25648c97-2c1b-4db0-b5a5-f1509806079c">
<img width="1614" alt="glances" src="https://github.com/gethomepage/homepage-docs/assets/82196/25648c97-2c1b-4db0-b5a5-f1509806079c">
_(Find the Glances information widget [here](../services/glances.md))_
_(Find the Glances information widget [here](../info/glances.md))_
The Glances widget allows you to monitor the resources (cpu, memory, diskio, sensors & processes) of host or another machine. You can have multiple instances by adding another service block.
@@ -59,7 +59,7 @@ The metric field in the configuration determines the type of system monitoring d
All widgets offer an alternative to the full or "graph" view, which is the compact, or "graphless" view.
<img width="970" alt="Screenshot 2023-09-06 at 1 51 48PM" src="https://github.com/benphelps/homepage-docs/assets/82196/cc6b9adc-4218-4274-96ca-36c3e64de5d0">
<img width="970" alt="Screenshot 2023-09-06 at 1 51 48PM" src="https://github.com/gethomepage/homepage-docs/assets/82196/cc6b9adc-4218-4274-96ca-36c3e64de5d0">
To switch to the alternative "graphless" view, simply passs `chart: false` as an option to the widget, like so:

View File

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

View File

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

View File

@@ -3,7 +3,7 @@ title: Syncthing Relay Server
description: Syncthing Relay Server Widget Configuration
---
Pulls stats from the [relay server](https://docs.syncthing.net/users/strelaysrv.html). [See here](https://github.com/benphelps/homepage/pull/230#issuecomment-1253053472) for more information on configuration.
Pulls stats from the [relay server](https://docs.syncthing.net/users/strelaysrv.html). [See here](https://github.com/gethomepage/homepage/pull/230#issuecomment-1253053472) for more information on configuration.
Allowed fields: `["numActiveSessions", "numConnections", "bytesProxied"]`.

View File

@@ -4,9 +4,9 @@ site_name: homepage
site_url: https://gethomepage.dev/
# Repository
repo_name: benphelps/homepage
repo_url: https://github.com/benphelps/homepage
edit_uri: https://github.com/benphelps/homepage/tree/main/docs/
repo_name: gethomepage/homepage
repo_url: https://github.com/gethomepage/homepage
edit_uri: https://github.com/gethomepage/homepage/tree/main/docs/
nav:
- "Home":
@@ -63,7 +63,6 @@ nav:
- widgets/services/homeassistant.md
- widgets/services/homebridge.md
- widgets/services/immich.md
- widgets/services/index.md
- widgets/services/jackett.md
- widgets/services/jdownloader.md
- widgets/services/jellyfin.md
@@ -150,6 +149,7 @@ nav:
- more/index.md
- more/development.md
- more/translations.md
- more/homepage-move.md
theme:
name: material
@@ -193,6 +193,13 @@ extra_css:
extra:
version:
provider: mike
social:
- icon: fontawesome/brands/discord
link: https://discord.gg/k4ruYNrudu
- icon: fontawesome/regular/message
link: https://github.com/gethomepage/homepage/discussions
- icon: fontawesome/brands/github
link: https://github.com/gethomepage/homepage
markdown_extensions:
- pymdownx.highlight:
@@ -216,10 +223,13 @@ markdown_extensions:
- admonition
plugins:
- group:
enabled: !ENV MKINSIDERS
plugins:
- optimize
- typeset
- social
- tags
- typeset
# - social
- optimize
- search:
pipeline:
- stemmer

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "خطأ",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "إجتاز",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"ping": "Ping",
"error": "Грешка"
"error": "Грешка",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Aprobat",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Chyba",
"ping": "Odezva"
"ping": "Odezva",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Úspěšné",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Fejl",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Bestået",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"ping": "Ping",
"error": "Fehler"
"error": "Fehler",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Bestanden",

View File

@@ -136,7 +136,9 @@
},
"ping": {
"error": "Σφάλμα",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "Παίζει",

View File

@@ -79,8 +79,12 @@
"partial": "Partial"
},
"ping": {
"http_status": "HTTP status",
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"down": "Down",
"up": "Up",
"not_available": "Not Available"
},
"emby": {
"playing": "Playing",

View File

@@ -67,7 +67,9 @@
},
"ping": {
"error": "Eraro",
"ping": "Sondaĵo"
"ping": "Sondaĵo",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "Ludante",

View File

@@ -300,8 +300,8 @@
"73-night": "Nevada",
"75-day": "Fuertes Nevadas",
"75-night": "Fuertes Nevadas",
"77-day": "Nevada Leve",
"77-night": "Nevada Leve",
"77-day": "Granizada",
"77-night": "Granizada",
"80-day": "Llovizna",
"80-night": "Llovizna",
"81-day": "Lluvia",
@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Aprobado",
@@ -741,8 +743,8 @@
"absolutePower": "Encender"
},
"calendar": {
"physicalRelease": "Physical release",
"inCinemas": "In cinemas",
"digitalRelease": "Digital release"
"physicalRelease": "Lanzamiento en físico",
"inCinemas": "En cine",
"digitalRelease": "Lanzamiento en digital"
}
}

View File

@@ -140,7 +140,9 @@
},
"ping": {
"error": "Errorea",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "Playing",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Erreur",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Réussi",
@@ -527,7 +529,7 @@
"alertstriggered": "Alertes déclenchées"
},
"nextcloud": {
"freespace": "Espace Libre",
"freespace": "Libre",
"activeusers": "Utilisateurs Actifs",
"cpuload": "Charge Cpu",
"memoryusage": "Utilisation Mémoire",
@@ -741,8 +743,8 @@
"absolutePower": "Puissance"
},
"calendar": {
"physicalRelease": "Physical release",
"inCinemas": "In cinemas",
"digitalRelease": "Digital release"
"physicalRelease": "Release physique",
"inCinemas": "En salle",
"digitalRelease": "Release digitale"
}
}

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Greška",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Uspjelo",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Hiba",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Megfelelt",

View File

@@ -610,7 +610,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "Playing",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Errore",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passati",
@@ -735,14 +737,14 @@
"unknown": "Sconosciuto"
},
"opendtu": {
"relativePower": "Power %",
"yieldDay": "Today",
"limit": "Limit",
"absolutePower": "Power"
"relativePower": "Potenza %",
"yieldDay": "Oggi",
"limit": "Limite",
"absolutePower": "Potenza"
},
"calendar": {
"physicalRelease": "Physical release",
"inCinemas": "In cinemas",
"physicalRelease": "Release fisici",
"inCinemas": "Al cinema",
"digitalRelease": "Digital release"
}
}

View File

@@ -117,7 +117,9 @@
},
"ping": {
"error": "エラー",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "再生中",

View File

@@ -85,7 +85,9 @@
},
"ping": {
"error": "오류",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "재생 중",

View File

@@ -71,7 +71,9 @@
},
"ping": {
"error": "Kļūda",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "Atskaņo",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Ralat",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Lulus",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Fout",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Gepasseerd",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Błąd",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Powodzenie",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Erro",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passou",

View File

@@ -395,7 +395,9 @@
},
"ping": {
"error": "Erro",
"ping": "Tempo de resposta"
"ping": "Tempo de resposta",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Aprovado",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Ошибка",
"ping": "Пинг"
"ping": "Пинг",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"failed": "Неудачно",

View File

@@ -195,7 +195,9 @@
},
"ping": {
"error": "Chyba",
"ping": "Odozva"
"ping": "Odozva",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "Prehrávané",

View File

@@ -152,7 +152,9 @@
},
"ping": {
"error": "Napaka",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "Predvaja",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

View File

@@ -107,7 +107,9 @@
},
"ping": {
"error": "ข้อผิดพลาด",
"ping": "ปิง"
"ping": "ปิง",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "กำลังเล่น",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Hata",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Geçti",

View File

@@ -172,7 +172,9 @@
},
"ping": {
"error": "Помилка",
"ping": "Пінг"
"ping": "Пінг",
"up": "Up",
"down": "Down"
},
"emby": {
"playing": "Відтворення",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "Error",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "Passed",

File diff suppressed because it is too large Load Diff

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "错误",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "通过",

View File

@@ -382,7 +382,9 @@
},
"ping": {
"error": "錯誤",
"ping": "Ping"
"ping": "Ping",
"up": "Up",
"down": "Down"
},
"scrutiny": {
"passed": "通過",

View File

@@ -15,6 +15,7 @@ export default function Item({ service, group }) {
const hasLink = service.href && service.href !== "#";
const { settings } = useContext(SettingsContext);
const showStats = (service.showStats === false) ? false : settings.showStats;
const statusStyle = (service.statusStyle !== undefined) ? service.statusStyle : settings.statusStyle;
const [statsOpen, setStatsOpen] = useState(service.showStats);
const [statsClosing, setStatsClosing] = useState(false);
@@ -76,10 +77,10 @@ export default function Item({ service, group }) {
</div>
)}
<div className="absolute top-0 right-0 flex flex-row justify-end gap-2 mr-2 z-30 service-tags">
<div className={`absolute top-0 right-0 flex flex-row justify-end ${statusStyle === 'dot' ? 'gap-0' : 'gap-2 mr-2'} z-30 service-tags`}>
{service.ping && (
<div className="flex-shrink-0 flex items-center justify-center service-tag service-ping">
<Ping group={group} service={service.name} style={service.statusStyle} />
<Ping group={group} service={service.name} style={statusStyle} />
<span className="sr-only">Ping status</span>
</div>
)}
@@ -90,7 +91,7 @@ export default function Item({ service, group }) {
onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}
className="flex-shrink-0 flex items-center justify-center cursor-pointer service-tag service-container-stats"
>
<Status service={service} />
<Status service={service} style={statusStyle} />
<span className="sr-only">View container stats</span>
</button>
)}
@@ -100,7 +101,7 @@ export default function Item({ service, group }) {
onClick={() => (statsOpen ? closeStats() : setStatsOpen(true))}
className="flex-shrink-0 flex items-center justify-center cursor-pointer service-tag service-app"
>
<KubernetesStatus service={service} />
<KubernetesStatus service={service} style={statusStyle} />
<span className="sr-only">View container stats</span>
</button>
)}

View File

@@ -1,35 +1,42 @@
import useSWR from "swr";
import { t } from "i18next";
export default function KubernetesStatus({ service }) {
export default function KubernetesStatus({ service, style }) {
const podSelectorString = service.podSelector !== undefined ? `podSelector=${service.podSelector}` : "";
const { data, error } = useSWR(`/api/kubernetes/status/${service.namespace}/${service.app}?${podSelectorString}`);
let statusLabel = t("docker.unknown");
let statusTitle = "";
let backgroundClass = "px-1.5 py-0.5 bg-theme-500/10 dark:bg-theme-900/50";
let colorClass = "text-black/20 dark:text-white/40 opacity-20";
if (error) {
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden k8s-status-error" title={t("docker.error")}>
<div className="text-[8px] font-bold text-rose-500/80 uppercase">{t("docker.error")}</div>
</div>
statusTitle = t("docker.error");
statusLabel = statusTitle;
colorClass = "text-rose-500/80";
} else if (data) {
if (data.status === "running") {
statusTitle = data.health ?? data.status;
statusLabel = statusTitle;
colorClass = "text-emerald-500/80";
}
if (data.status === "not found" || data.status === "down" || data.status === "partial") {
statusTitle = data.status;
statusLabel = statusTitle;
colorClass = "text-orange-400/50 dark:text-orange-400/80";
}
}
if (data && data.status === "running") {
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden k8s-status" title={data.health ?? data.status}>
<div className="text-[8px] font-bold text-emerald-500/80 uppercase">{data.health ?? data.status}</div>
</div>
);
}
if (data && (data.status === "not found" || data.status === "down" || data.status === "partial")) {
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden k8s-status-warning" title={data.status}>
<div className="text-[8px] font-bold text-orange-400/50 dark:text-orange-400/80 uppercase">{data.status}</div>
</div>
);
if (style === 'dot') {
colorClass = colorClass.replace(/text-/g, 'bg-').replace(/\/\d\d/g, '');
backgroundClass = "p-4 hover:bg-theme-500/10 dark:hover:bg-theme-900/20";
}
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden k8s-status-unknown">
<div className="text-[8px] font-bold text-black/20 dark:text-white/40 uppercase">{t("docker.unknown")}</div>
<div className={`w-auto text-center overflow-hidden ${backgroundClass} rounded-b-[3px] k8s-status`} title={statusTitle}>
{style !== 'dot' && <div className={`text-[8px] font-bold ${colorClass} uppercase`}>{statusLabel}</div>}
{style === 'dot' && <div className={`rounded-full h-3 w-3 ${colorClass}`}/>}
</div>
);
}

View File

@@ -7,52 +7,49 @@ export default function Ping({ group, service, style }) {
refreshInterval: 30000
});
let textSize = "text-[8px]";
let colorClass = ""
let backgroundClass = "bg-theme-500/10 dark:bg-theme-900/50";
let statusTitle = "HTTP status";
let statusText;
let colorClass = "text-black/20 dark:text-white/40 opacity-20";
let backgroundClass = "bg-theme-500/10 dark:bg-theme-900/50 px-1.5 py-0.5";
let statusTitle = t("ping.http_status");
let statusText = "";
if (error) {
colorClass = "text-rose-500"
statusText = t("ping.error")
statusTitle += " error"
colorClass = "text-rose-500";
statusText = t("ping.error");
statusTitle += ` ${t("ping.error")}`;
} else if (!data) {
colorClass = "text-black/20 dark:text-white/40"
statusText = t("ping.ping")
statusTitle += " not available"
statusText = t("ping.ping");
statusTitle += ` ${t("ping.not_available")}`;
} else if (data.status > 403) {
colorClass = "text-rose-500/80"
statusTitle += ` ${data.status}`
colorClass = "text-rose-500/80";
statusTitle += ` ${data.status}`;
if (style === "basic") {
statusText = t("docker.offline")
} else if (style === "dot") {
statusText = "◉"
textSize = "text-[14px]"
backgroundClass = ""
statusText = t("ping.down");
} else {
statusText = data.status
statusText = data.status;
}
} else {
} else if (data) {
const ping = t("common.ms", { value: data.latency, style: "unit", unit: "millisecond", maximumFractionDigits: 0 })
statusTitle += ` ${data.status} (${ping})`;
colorClass = "text-emerald-500/80"
colorClass = "text-emerald-500/80";
if (style === "basic") {
statusText = t("docker.running")
} else if (style === "dot") {
statusText = "◉"
textSize = "text-[14px]"
backgroundClass = ""
statusText = t("ping.up");
} else {
statusText = ping
statusText = ping;
colorClass += " lowercase";
}
}
if (style === "dot") {
backgroundClass = 'p-4';
colorClass = colorClass.replace(/text-/g, 'bg-').replace(/\/\d\d/g, '');
}
return (
<div className={`w-auto px-1.5 py-0.5 text-center rounded-b-[3px] overflow-hidden ping-status-invalid ${backgroundClass}`} title={statusTitle}>
<div className={`font-bold uppercase ${textSize} ${colorClass}`}>{statusText}</div>
<div className={`w-auto text-center rounded-b-[3px] overflow-hidden ping-status ${backgroundClass}`} title={statusTitle}>
{style !== 'dot' && <div className={`font-bold uppercase text-[8px] ${colorClass}`}>{statusText}</div>}
{style === 'dot' && <div className={`rounded-full h-3 w-3 ${colorClass}`}/>}
</div>
);
}

View File

@@ -1,65 +1,58 @@
import { useTranslation } from "react-i18next";
import useSWR from "swr";
export default function Status({ service }) {
export default function Status({ service, style }) {
const { t } = useTranslation();
const { data, error } = useSWR(`/api/docker/status/${service.container}/${service.server || ""}`);
let statusLabel = t("docker.unknown");
let statusTitle = "";
let backgroundClass = "px-1.5 py-0.5 bg-theme-500/10 dark:bg-theme-900/50";
let colorClass = "text-black/20 dark:text-white/40 ";
if (error) {
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden docker-error" title={t("docker.error")}>
<div className="text-[8px] font-bold text-rose-500/80 uppercase">{t("docker.error")}</div>
</div>
}
if (data) {
let statusLabel = "";
statusTitle = t("docker.error");
colorClass = "text-rose-500/80";
} else if (data) {
if (data.status?.includes("running")) {
if (data.health === "starting") {
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden docker-starting" title={t("docker.starting")}>
<div className="text-[8px] font-bold text-blue-500/80 uppercase">{t("docker.starting")}</div>
</div>
);
statusTitle = t("docker.starting");
colorClass = "text-blue-500/80";
}
if (data.health === "unhealthy") {
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden docker-unhealthy" title={t("docker.unhealthy")}>
<div className="text-[8px] font-bold text-orange-400/50 dark:text-orange-400/80 uppercase">{t("docker.unhealthy")}</div>
</div>
);
statusTitle = t("docker.unhealthy");
colorClass = "text-orange-400/50 dark:text-orange-400/80";
}
if (!data.health) {
statusLabel = data.status.replace("running", t("docker.running"))
statusLabel = data.status.replace("running", t("docker.running"));
} else {
statusLabel = data.health === "healthy" ? t("docker.healthy") : data.health
statusLabel = data.health === "healthy" ? t("docker.healthy") : data.health;
}
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden docker-status" title={statusLabel}>
<div className="text-[8px] font-bold text-emerald-500/80 uppercase">{statusLabel}</div>
</div>
);
statusTitle = statusLabel;
colorClass = "text-emerald-500/80";
}
if (data.status === "not found" || data.status === "exited" || data.status?.startsWith("partial")) {
if (data.status === "not found") statusLabel = t("docker.not_found")
else if (data.status === "exited") statusLabel = t("docker.exited")
else statusLabel = data.status.replace("partial", t("docker.partial"))
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden docker-status-warning" title={statusLabel}>
<div className="text-[8px] font-bold text-orange-400/50 dark:text-orange-400/80 uppercase">{statusLabel}</div>
</div>
);
colorClass = "text-orange-400/50 dark:text-orange-400/80";
}
}
if (style === 'dot') {
colorClass = colorClass.replace('text-', 'bg-').replace(/\/\d\d$/, '');
backgroundClass = "p-4 hover:bg-theme-500/10 dark:hover:bg-theme-900/20";
}
return (
<div className="w-auto px-1.5 py-0.5 text-center bg-theme-500/10 dark:bg-theme-900/50 rounded-b-[3px] overflow-hidden docker-status-unknown">
<div className="text-[8px] font-bold text-black/20 dark:text-white/40 uppercase">{t("docker.unknown")}</div>
<div className={`w-auto text-center overflow-hidden ${backgroundClass} rounded-b-[3px] docker-status`} title={statusTitle}>
{style !== 'dot' && <div className={`text-[8px] font-bold ${colorClass} uppercase`}>{statusLabel}</div>}
{style === 'dot' && <div className={`rounded-full h-3 w-3 ${colorClass}`}/>}
</div>
);
}

View File

@@ -33,7 +33,7 @@ export default function Version() {
</>
) : (
<a
href={`https://github.com/benphelps/homepage/releases/tag/${version}`}
href={`https://github.com/gethomepage/homepage/releases/tag/${version}`}
target="_blank"
rel="noopener noreferrer"
className="ml-2 text-xs text-theme-500 dark:text-theme-400 flex flex-row items-center"

View File

@@ -1,6 +1,6 @@
import cachedFetch from "utils/proxy/cached-fetch";
export default async function handler(req, res) {
const releasesURL = "https://api.github.com/repos/benphelps/homepage/releases";
const releasesURL = "https://api.github.com/repos/gethomepage/homepage/releases";
return res.send(await cachedFetch(releasesURL, 5));
}

View File

@@ -183,7 +183,7 @@ function Home({ initialSettings }) {
const { data: bookmarks } = useSWR("/api/bookmarks");
const { data: widgets } = useSWR("/api/widgets");
const servicesAndBookmarks = [...services.map(sg => sg.services).flat(), ...bookmarks.map(bg => bg.bookmarks).flat()]
const servicesAndBookmarks = [...services.map(sg => sg.services).flat(), ...bookmarks.map(bg => bg.bookmarks).flat()].filter(i => i?.href);
useEffect(() => {
if (settings.language) {

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/en/configs/bookmarks
# https://gethomepage.dev/latest/configs/bookmarks
- Developer:
- Github:

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/en/configs/docker/
# https://gethomepage.dev/latest/configs/docker/
# my-docker:
# host: 127.0.0.1

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/en/configs/services
# https://gethomepage.dev/latest/configs/services
- My First Group:
- My First Service:

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/en/configs/settings
# https://gethomepage.dev/latest/configs/settings
providers:
openweathermap: openweathermapapikey

View File

@@ -1,6 +1,6 @@
---
# For configuration options and examples, please see:
# https://gethomepage.dev/en/configs/widgets
# https://gethomepage.dev/latest/configs/widgets
- resources:
cpu: true

View File

@@ -75,7 +75,7 @@ export function getSettings() {
if (initialSettings.layout) {
// support yaml list but old spec was object so convert to that
// see https://github.com/benphelps/homepage/issues/1546
// see https://github.com/gethomepage/homepage/issues/1546
if (Array.isArray(initialSettings.layout)) {
const layoutItems = initialSettings.layout
initialSettings.layout = {}

View File

@@ -259,6 +259,9 @@ export async function servicesFromKubernetes() {
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/ping`]) {
constructedService.ping = ingress.metadata.annotations[`${ANNOTATION_BASE}/ping`];
}
if (ingress.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`]) {
constructedService.statusStyle = ingress.metadata.annotations[`${ANNOTATION_BASE}/statusStyle`];
}
Object.keys(ingress.metadata.annotations).forEach((annotation) => {
if (annotation.startsWith(ANNOTATION_WIDGET_BASE)) {
shvl.set(

View File

@@ -126,7 +126,7 @@ export default function MonthlyView({ service }) {
return <div className="w-full text-center">
<div className="flex-col">
<span><button type="button" onClick={ () => setShowDate(showDate.minus({ months: 1 }).startOf("day")) } className={classNames(monthButton)}>&lt;</button></span>
<span>{ showDate.setLocale(i18n.language).toFormat("MMMM y") }</span>
<span><button type="button" onClick={ () => setShowDate(currentDate.startOf("day")) }>{ showDate.setLocale(i18n.language).toFormat("MMMM y") }</button></span>
<span><button type="button" onClick={ () => setShowDate(showDate.plus({ months: 1 }).startOf("day")) } className={classNames(monthButton)}>&gt;</button></span>
</div>

View File

@@ -24,7 +24,7 @@ async function fetchFromPyloadAPI(url, sessionId, params, service) {
},
};
// see https://github.com/benphelps/homepage/issues/517
// see https://github.com/gethomepage/homepage/issues/517
const isNg = cache.get(`${isNgCacheKey}.${service}`);
if (isNg && !params) {
delete options.body;
@@ -50,7 +50,7 @@ async function login(loginUrl, service, username, password = '') {
if (status !== 200 || sessionId === false) {
logger.error(`HTTP ${status} logging into Pyload API, returned: ${JSON.stringify(sessionId)}`);
} else if (responseHeaders['set-cookie']?.join().includes('pyload_session')) {
// Support pyload-ng, see https://github.com/benphelps/homepage/issues/517
// Support pyload-ng, see https://github.com/gethomepage/homepage/issues/517
cache.put(`${isNgCacheKey}.${service}`, true);
const sessionCookie = responseHeaders['set-cookie'][0];
cache.put(`${sessionCacheKey}.${service}`, sessionCookie, 60 * 60 * 23 * 1000); // cache for 23h

View File

@@ -70,5 +70,8 @@ module.exports = {
'lg:grid-cols-6',
'lg:grid-cols-7',
'lg:grid-cols-8',
'bg-white',
'bg-black',
'dark:bg-white',
],
}