mirror of
https://github.com/gethomepage/homepage.git
synced 2026-01-05 23:12:08 +08:00
Compare commits
58 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0eab49a449 | ||
|
|
24121cd5f0 | ||
|
|
8aeded4774 | ||
|
|
40522fbb96 | ||
|
|
76cbb6e2ed | ||
|
|
b29c0f809c | ||
|
|
4f41be512c | ||
|
|
b765330b4a | ||
|
|
ed3055ae1b | ||
|
|
5460f89cc9 | ||
|
|
29018873f5 | ||
|
|
11cacfb823 | ||
|
|
eddec4adc2 | ||
|
|
2faf51b4c0 | ||
|
|
891c387062 | ||
|
|
3b2b6cc064 | ||
|
|
83a5d1b17a | ||
|
|
29b0240abd | ||
|
|
8ad1f9f422 | ||
|
|
ea15a1b9e5 | ||
|
|
691ed78e75 | ||
|
|
5f58cb285d | ||
|
|
a6696700b7 | ||
|
|
985ca4ae84 | ||
|
|
ebda0f7b70 | ||
|
|
8e7723b51d | ||
|
|
24635268a0 | ||
|
|
729c161271 | ||
|
|
69af86eebe | ||
|
|
369a996f1f | ||
|
|
b7b63abee0 | ||
|
|
4ba47c426a | ||
|
|
29d54b032c | ||
|
|
8791aa8d0d | ||
|
|
337ada148c | ||
|
|
2c8348f5b5 | ||
|
|
0eeaa99fe3 | ||
|
|
38d2cc7bd7 | ||
|
|
759dc9f3d2 | ||
|
|
72d9a614fd | ||
|
|
3d209bf572 | ||
|
|
3268db1298 | ||
|
|
ab4a28d04a | ||
|
|
3c1644e18f | ||
|
|
e1f6ddaeab | ||
|
|
826bad8ff4 | ||
|
|
8aa2bbcdd3 | ||
|
|
aece2954df | ||
|
|
5fbdbce79c | ||
|
|
ce2bfd9d21 | ||
|
|
df4cc6086c | ||
|
|
2c632e2b3e | ||
|
|
6de20f0ab6 | ||
|
|
7434d597c9 | ||
|
|
59dbc79656 | ||
|
|
b475f89d85 | ||
|
|
7f9ae3d01b | ||
|
|
b12d27551a |
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
6
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -11,13 +11,13 @@ body:
|
|||||||
- type: markdown
|
- type: markdown
|
||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Have a question? 👉 [Start a new discussion](https://github.com/benphelps/homepage/discussions/new) or [ask in chat](https://discord.gg/SaPGSzrEZC).
|
Have a question? 👉 [Start a new discussion](https://github.com/gethomepage/homepage/discussions/new) or [ask in chat](https://discord.gg/SaPGSzrEZC).
|
||||||
|
|
||||||
Before opening an issue, please double check:
|
Before opening an issue, please double check:
|
||||||
|
|
||||||
- [The troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/).
|
- [The troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/).
|
||||||
- [The homepage documentation](https://gethomepage.dev/)
|
- [The homepage documentation](https://gethomepage.dev/)
|
||||||
- [Existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions).
|
- [Existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
|
||||||
- type: textarea
|
- type: textarea
|
||||||
id: description
|
id: description
|
||||||
attributes:
|
attributes:
|
||||||
@@ -95,5 +95,5 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: Follow [the troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/) (please include output above if applicable).
|
- label: Follow [the troubleshooting guide](https://gethomepage.dev/latest/more/troubleshooting/) (please include output above if applicable).
|
||||||
required: true
|
required: true
|
||||||
- label: Search [existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions).
|
- label: Search [existing issues](https://github.com/gethomepage/homepage/search?q=&type=issues) and [discussions](https://github.com/gethomepage/homepage/search?q=&type=discussions).
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
4
.github/ISSUE_TEMPLATE/config.yml
vendored
4
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,11 +1,11 @@
|
|||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
contact_links:
|
contact_links:
|
||||||
- name: 🤔 Questions and Help
|
- name: 🤔 Questions and Help
|
||||||
url: https://github.com/benphelps/homepage/discussions
|
url: https://github.com/gethomepage/homepage/discussions
|
||||||
about: This issue tracker is for bugs only, not general support questions. Please refer to our Discussions.
|
about: This issue tracker is for bugs only, not general support questions. Please refer to our Discussions.
|
||||||
- name: 💬 Chat
|
- name: 💬 Chat
|
||||||
url: https://discord.gg/k4ruYNrudu
|
url: https://discord.gg/k4ruYNrudu
|
||||||
about: Want to discuss homepage with others? Check out our chat.
|
about: Want to discuss homepage with others? Check out our chat.
|
||||||
- name: 🚀 Feature Request
|
- name: 🚀 Feature Request
|
||||||
url: https://github.com/benphelps/homepage/discussions/new?category=feature-requests
|
url: https://github.com/gethomepage/homepage/discussions/new?category=feature-requests
|
||||||
about: Remember to search for existing feature requests and "up-vote" any you like
|
about: Remember to search for existing feature requests and "up-vote" any you like
|
||||||
|
|||||||
4
.github/workflows/docker-publish.yml
vendored
4
.github/workflows/docker-publish.yml
vendored
@@ -20,6 +20,7 @@ on:
|
|||||||
paths-ignore:
|
paths-ignore:
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- 'mkdocs.yml'
|
- 'mkdocs.yml'
|
||||||
|
merge_group:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
# Use docker.io for Docker Hub if empty
|
# Use docker.io for Docker Hub if empty
|
||||||
@@ -31,7 +32,7 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Docker Build & Push
|
name: Docker Build & Push
|
||||||
if: github.repository == 'benphelps/homepage'
|
if: github.repository == 'gethomepage/homepage'
|
||||||
runs-on: self-hosted
|
runs-on: self-hosted
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
@@ -105,7 +106,6 @@ jobs:
|
|||||||
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
|
BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }}
|
||||||
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
|
VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }}
|
||||||
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }}
|
||||||
DEPRECATED_REPO=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.source'] == 'https://github.com/benphelps/homepage' }}
|
|
||||||
# https://github.com/docker/setup-qemu-action#about
|
# https://github.com/docker/setup-qemu-action#about
|
||||||
# platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
# platforms: linux/amd64,linux/arm64,linux/riscv64,linux/ppc64le,linux/s390x,linux/386,linux/mips64le,linux/mips64,linux/arm/v7,linux/arm/v6
|
||||||
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
|
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
|
||||||
|
|||||||
5
.github/workflows/docs-publish.yml
vendored
5
.github/workflows/docs-publish.yml
vendored
@@ -11,6 +11,7 @@ on:
|
|||||||
paths:
|
paths:
|
||||||
- 'docs/**'
|
- 'docs/**'
|
||||||
- 'mkdocs.yml'
|
- 'mkdocs.yml'
|
||||||
|
merge_group:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
@@ -19,7 +20,7 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
name: Test Build
|
name: Test Build
|
||||||
if: github.repository == 'benphelps/homepage' && github.event_name == 'pull_request'
|
if: github.repository == 'gethomepage/homepage' && github.event_name == 'pull_request'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@@ -40,7 +41,7 @@ jobs:
|
|||||||
run: MKINSIDERS=false mkdocs build
|
run: MKINSIDERS=false mkdocs build
|
||||||
deploy:
|
deploy:
|
||||||
name: Build & Deploy
|
name: Build & Deploy
|
||||||
if: github.repository == 'benphelps/homepage' && github.event_name != 'pull_request'
|
if: github.repository == 'gethomepage/homepage' && github.event_name != 'pull_request'
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|||||||
@@ -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
|
## Any contributions you make will be under the GNU General Public License v3.0
|
||||||
In short, when you submit code changes, your submissions are understood to be under the same [GNU General Public License v3.0](https://choosealicense.com/licenses/gpl-3.0/) that covers the project. Feel free to contact the maintainers if that's a concern.
|
In short, when you submit code changes, your submissions are understood to be under the same [GNU General Public License v3.0](https://choosealicense.com/licenses/gpl-3.0/) that covers the project. Feel free to contact the maintainers if that's a concern.
|
||||||
|
|
||||||
## Report bugs using Github's [issues](https://github.com/benphelps/homepage/issues)
|
## Report bugs using Github's [issues](https://github.com/gethomepage/homepage/issues)
|
||||||
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/benphelps/homepage/issues/new); it's that easy!
|
We use GitHub issues to track public bugs. Report a bug by [opening a new issue](https://github.com/gethomepage/homepage/issues/new); it's that easy!
|
||||||
|
|
||||||
## Write bug reports with detail, background, and sample configurations
|
## Write bug reports with detail, background, and sample configurations
|
||||||
Homepage includes a lot of configuration options and is often deploying in larger systems. Please include as much information (configurations, deployment method, Docker & API versions, etc) as you can when reporting an issue.
|
Homepage includes a lot of configuration options and is often deploying in larger systems. Please include as much information (configurations, deployment method, Docker & API versions, etc) as you can when reporting an issue.
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ WORKDIR /app
|
|||||||
ARG BUILDTIME
|
ARG BUILDTIME
|
||||||
ARG VERSION
|
ARG VERSION
|
||||||
ARG REVISION
|
ARG REVISION
|
||||||
ARG DEPRECATED_REPO
|
|
||||||
|
|
||||||
COPY --link --from=deps /app/node_modules ./node_modules/
|
COPY --link --from=deps /app/node_modules ./node_modules/
|
||||||
COPY . .
|
COPY . .
|
||||||
@@ -31,15 +30,15 @@ COPY . .
|
|||||||
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
|
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
|
||||||
RUN npm run telemetry \
|
RUN npm run telemetry \
|
||||||
&& mkdir config \
|
&& mkdir config \
|
||||||
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION NEXT_PUBLIC_DEPRECATED_REPO=$DEPRECATED_REPO npm run build
|
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION npm run build
|
||||||
|
|
||||||
# Production image, copy all the files and run next
|
# Production image, copy all the files and run next
|
||||||
FROM docker.io/node:18-alpine AS runner
|
FROM docker.io/node:18-alpine AS runner
|
||||||
LABEL org.opencontainers.image.title "Homepage"
|
LABEL org.opencontainers.image.title "Homepage"
|
||||||
LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations."
|
LABEL org.opencontainers.image.description "A self-hosted services landing page, with docker and service integrations."
|
||||||
LABEL org.opencontainers.image.url="https://github.com/benphelps/homepage"
|
LABEL org.opencontainers.image.url="https://github.com/gethomepage/homepage"
|
||||||
LABEL org.opencontainers.image.documentation='https://github.com/benphelps/homepage/wiki'
|
LABEL org.opencontainers.image.documentation='https://github.com/gethomepage/homepage/wiki'
|
||||||
LABEL org.opencontainers.image.source='https://github.com/benphelps/homepage'
|
LABEL org.opencontainers.image.source='https://github.com/gethomepage/homepage'
|
||||||
LABEL org.opencontainers.image.licenses='Apache-2.0'
|
LABEL org.opencontainers.image.licenses='Apache-2.0'
|
||||||
|
|
||||||
ENV NODE_ENV production
|
ENV NODE_ENV production
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -14,7 +14,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/benphelps/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/benphelps/homepage/docker-publish.yml"></a>
|
<a href="https://github.com/gethomepage/homepage/actions/workflows/docker-publish.yml"><img alt="GitHub Workflow Status (with event)" src="https://img.shields.io/github/actions/workflow/status/gethomepage/homepage/docker-publish.yml"></a>
|
||||||
|
|
||||||
<a href="https://hosted.weblate.org/engage/homepage/"><img src="https://hosted.weblate.org/widgets/homepage/-/homepage/svg-badge.svg" alt="Weblate"></a>
|
<a href="https://hosted.weblate.org/engage/homepage/"><img src="https://hosted.weblate.org/widgets/homepage/-/homepage/svg-badge.svg" alt="Weblate"></a>
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ Using docker compose:
|
|||||||
version: "3.3"
|
version: "3.3"
|
||||||
services:
|
services:
|
||||||
homepage:
|
homepage:
|
||||||
image: ghcr.io/benphelps/homepage:latest
|
image: ghcr.io/gethomepage/homepage:latest
|
||||||
container_name: homepage
|
container_name: homepage
|
||||||
environment:
|
environment:
|
||||||
PUID: 1000 -- optional, your user id
|
PUID: 1000 -- optional, your user id
|
||||||
@@ -88,7 +88,7 @@ docker run --name homepage \
|
|||||||
-v /path/to/config:/app/config \
|
-v /path/to/config:/app/config \
|
||||||
-v /var/run/docker.sock:/var/run/docker.sock:ro \
|
-v /var/run/docker.sock:/var/run/docker.sock:ro \
|
||||||
--restart unless-stopped \
|
--restart unless-stopped \
|
||||||
ghcr.io/benphelps/homepage:latest
|
ghcr.io/gethomepage/homepage:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
## With Node
|
## With Node
|
||||||
@@ -96,7 +96,7 @@ docker run --name homepage \
|
|||||||
First, clone the repository:
|
First, clone the repository:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/benphelps/homepage.git
|
git clone https://github.com/gethomepage/homepage.git
|
||||||
```
|
```
|
||||||
|
|
||||||
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
|
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
|
||||||
@@ -158,9 +158,9 @@ mkdocs serve # or build, to build the static site
|
|||||||
|
|
||||||
# Support & Suggestions
|
# Support & Suggestions
|
||||||
|
|
||||||
If you have any questions, suggestions, or general issues, please start a discussion on the [Discussions](https://github.com/benphelps/homepage/discussions) page.
|
If you have any questions, suggestions, or general issues, please start a discussion on the [Discussions](https://github.com/gethomepage/homepage/discussions) page.
|
||||||
|
|
||||||
For bug reports, please open an issue on the [Issues](https://github.com/benphelps/homepage/issues) page.
|
For bug reports, please open an issue on the [Issues](https://github.com/gethomepage/homepage/issues) page.
|
||||||
|
|
||||||
## Contributing & Contributers
|
## Contributing & Contributers
|
||||||
|
|
||||||
|
|||||||
3
crowdin.yml
Normal file
3
crowdin.yml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
files:
|
||||||
|
- source: /public/locales/en/*.json
|
||||||
|
translation: /public/locales/%osx_locale%/%original_file_name%
|
||||||
@@ -49,7 +49,7 @@ dockerproxy:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
homepage:
|
homepage:
|
||||||
image: ghcr.io/benphelps/homepage:latest
|
image: ghcr.io/gethomepage/homepage:latest
|
||||||
container_name: homepage
|
container_name: homepage
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/config:/app/config
|
- /path/to/config:/app/config
|
||||||
@@ -76,7 +76,7 @@ If you'd rather use the socket directly, first make sure that you're passing the
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
homepage:
|
homepage:
|
||||||
image: ghcr.io/benphelps/homepage:latest
|
image: ghcr.io/gethomepage/homepage:latest
|
||||||
container_name: homepage
|
container_name: homepage
|
||||||
volumes:
|
volumes:
|
||||||
- /path/to/config:/app/config
|
- /path/to/config:/app/config
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ Services may have an optional `ping` property that allows you to monitor the ava
|
|||||||
ping: http://some.other.host/
|
ping: http://some.other.host/
|
||||||
```
|
```
|
||||||
|
|
||||||
<img width="1038" alt="Ping" src="https://github.com/benphelps/homepage/assets/88257202/7bc13bd3-0d0b-44e3-888c-a20e069a3233">
|
<img width="1038" alt="Ping" src="https://github.com/gethomepage/homepage/assets/88257202/7bc13bd3-0d0b-44e3-888c-a20e069a3233">
|
||||||
|
|
||||||
You can also apply different styles to the ping indicator by using the `statusStyle` property, see [settings](settings.md#status-style).
|
You can also apply different styles to the ping indicator by using the `statusStyle` property, see [settings](settings.md#status-style).
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ Services may be connected to a Docker container, either running on the local mac
|
|||||||
container: other-container
|
container: other-container
|
||||||
```
|
```
|
||||||
|
|
||||||
<img width="1038" alt="Service Containers" src="https://github.com/benphelps/homepage/assets/88257202/4c685783-52c6-4e55-afb3-affe9baac09b">
|
<img width="1038" alt="Service Containers" src="https://github.com/gethomepage/homepage/assets/88257202/4c685783-52c6-4e55-afb3-affe9baac09b">
|
||||||
|
|
||||||
**Clicking on the status label of a service with Docker integration enabled will expand the container stats, where you can see CPU, Memory, and Network activity.**
|
**Clicking on the status label of a service with Docker integration enabled will expand the container stats, where you can see CPU, Memory, and Network activity.**
|
||||||
|
|
||||||
@@ -153,7 +153,7 @@ Services may be connected to a Docker container, either running on the local mac
|
|||||||
|
|
||||||
This can also be controlled with `showStats`. See [show docker stats](docker.md#show-docker-stats) for more information
|
This can also be controlled with `showStats`. See [show docker stats](docker.md#show-docker-stats) for more information
|
||||||
|
|
||||||
<img width="1038" alt="Docker Stats Expanded" src="https://github.com/benphelps/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec">
|
<img width="1038" alt="Docker Stats Expanded" src="https://github.com/gethomepage/homepage/assets/88257202/f95fd595-449e-48ae-af67-fd89618904ec">
|
||||||
|
|
||||||
## Service Integrations
|
## Service Integrations
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Using docker compose:
|
|||||||
version: "3.3"
|
version: "3.3"
|
||||||
services:
|
services:
|
||||||
homepage:
|
homepage:
|
||||||
image: ghcr.io/benphelps/homepage:latest
|
image: ghcr.io/gethomepage/homepage:latest
|
||||||
container_name: homepage
|
container_name: homepage
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
@@ -30,7 +30,7 @@ In the docker compose example below, the environment variables `$PUID` and `$PGI
|
|||||||
version: "3.3"
|
version: "3.3"
|
||||||
services:
|
services:
|
||||||
homepage:
|
homepage:
|
||||||
image: ghcr.io/benphelps/homepage:latest
|
image: ghcr.io/gethomepage/homepage:latest
|
||||||
container_name: homepage
|
container_name: homepage
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
@@ -45,7 +45,7 @@ services:
|
|||||||
### With Docker Run
|
### With Docker Run
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -p 3000:3000 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/benphelps/homepage:latest
|
docker run -p 3000:3000 -v /path/to/config:/app/config -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/gethomepage/homepage:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
### Using Environment Secrets
|
### Using Environment Secrets
|
||||||
|
|||||||
@@ -291,7 +291,7 @@ spec:
|
|||||||
enableServiceLinks: true
|
enableServiceLinks: true
|
||||||
containers:
|
containers:
|
||||||
- name: homepage
|
- name: homepage
|
||||||
image: "ghcr.io/benphelps/homepage:latest"
|
image: "ghcr.io/gethomepage/homepage:latest"
|
||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- name: http
|
- name: http
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: Install and run homepage from source
|
|||||||
First, clone the repository:
|
First, clone the repository:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://github.com/benphelps/homepage.git
|
git clone https://github.com/gethomepage/homepage.git
|
||||||
```
|
```
|
||||||
|
|
||||||
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
|
Then install dependencies and build the production bundle (I'm using pnpm here, you can use npm or yarn if you like):
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ title: Homepage Move
|
|||||||
description: Homepage Container Deprecation
|
description: Homepage Container Deprecation
|
||||||
---
|
---
|
||||||
|
|
||||||
As of v0.7.1 homepage migrated from benphelps/homepage to an "orgnization" located at gethomepage/homepage. The reason for this is to setup the project for longevity and allow for community maintenance.
|
As of v0.7.2 homepage migrated from benphelps/homepage to an "organization" repository located at [gethomepage/homepage](https://github.com/gethomepage/homepage/). The reason for this was to setup the project for longevity and allow for community maintenance.
|
||||||
|
|
||||||
Migrating your installation should be as simple as changing `image: ghcr.io/benphelps/homepage:latest` to `image: ghcr.io/gethomepage/homepage:latest`.
|
Migrating your installation should be as simple as changing `image: ghcr.io/benphelps/homepage:latest` to `image: ghcr.io/gethomepage/homepage:latest`.
|
||||||
@@ -3,7 +3,7 @@ title: Glances
|
|||||||
description: Glances Widget Configuration
|
description: Glances Widget Configuration
|
||||||
---
|
---
|
||||||
|
|
||||||
<img width="1614" alt="glances" src="https://github.com/benphelps/homepage-docs/assets/82196/25648c97-2c1b-4db0-b5a5-f1509806079c">
|
<img width="1614" alt="glances" src="https://github.com/gethomepage/homepage-docs/assets/82196/25648c97-2c1b-4db0-b5a5-f1509806079c">
|
||||||
|
|
||||||
_(Find the Glances information widget [here](../info/glances.md))_
|
_(Find the Glances information widget [here](../info/glances.md))_
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ The metric field in the configuration determines the type of system monitoring d
|
|||||||
|
|
||||||
All widgets offer an alternative to the full or "graph" view, which is the compact, or "graphless" view.
|
All widgets offer an alternative to the full or "graph" view, which is the compact, or "graphless" view.
|
||||||
|
|
||||||
<img width="970" alt="Screenshot 2023-09-06 at 1 51 48 PM" 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 48 PM" 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:
|
To switch to the alternative "graphless" view, simply passs `chart: false` as an option to the widget, like so:
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: Gluetun
|
|||||||
description: Gluetun Widget Configuration
|
description: Gluetun Widget Configuration
|
||||||
---
|
---
|
||||||
|
|
||||||
Requires [HTTP control server options](https://github.com/qdm12/gluetun/wiki/HTTP-control-server-options) to be enabled.
|
Requires [HTTP control server options](https://github.com/qdm12/gluetun-wiki/blob/main/setup/advanced/control-server.md) to be enabled.
|
||||||
|
|
||||||
Allowed fields: `["public_ip", "region", "country"]`.
|
Allowed fields: `["public_ip", "region", "country"]`.
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: MJPEG
|
|||||||
description: MJPEG Stream Widget Configuration
|
description: MJPEG Stream Widget Configuration
|
||||||
---
|
---
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Pass the stream URL from a service like [µStreamer](https://github.com/pikvm/ustreamer) or [camera-streamer](https://github.com/ayufan/camera-streamer).
|
Pass the stream URL from a service like [µStreamer](https://github.com/pikvm/ustreamer) or [camera-streamer](https://github.com/ayufan/camera-streamer).
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ title: Syncthing Relay Server
|
|||||||
description: Syncthing Relay Server Widget Configuration
|
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"]`.
|
Allowed fields: `["numActiveSessions", "numConnections", "bytesProxied"]`.
|
||||||
|
|
||||||
|
|||||||
11
mkdocs.yml
11
mkdocs.yml
@@ -4,9 +4,9 @@ site_name: homepage
|
|||||||
site_url: https://gethomepage.dev/
|
site_url: https://gethomepage.dev/
|
||||||
|
|
||||||
# Repository
|
# Repository
|
||||||
repo_name: benphelps/homepage
|
repo_name: gethomepage/homepage
|
||||||
repo_url: https://github.com/benphelps/homepage
|
repo_url: https://github.com/gethomepage/homepage
|
||||||
edit_uri: https://github.com/benphelps/homepage/tree/main/docs/
|
edit_uri: https://github.com/gethomepage/homepage/tree/main/docs/
|
||||||
|
|
||||||
nav:
|
nav:
|
||||||
- "Home":
|
- "Home":
|
||||||
@@ -149,6 +149,7 @@ nav:
|
|||||||
- more/index.md
|
- more/index.md
|
||||||
- more/development.md
|
- more/development.md
|
||||||
- more/translations.md
|
- more/translations.md
|
||||||
|
- more/homepage-move.md
|
||||||
|
|
||||||
theme:
|
theme:
|
||||||
name: material
|
name: material
|
||||||
@@ -196,9 +197,9 @@ extra:
|
|||||||
- icon: fontawesome/brands/discord
|
- icon: fontawesome/brands/discord
|
||||||
link: https://discord.gg/k4ruYNrudu
|
link: https://discord.gg/k4ruYNrudu
|
||||||
- icon: fontawesome/regular/message
|
- icon: fontawesome/regular/message
|
||||||
link: https://github.com/benphelps/homepage/discussions
|
link: https://github.com/gethomepage/homepage/discussions
|
||||||
- icon: fontawesome/brands/github
|
- icon: fontawesome/brands/github
|
||||||
link: https://github.com/benphelps/homepage
|
link: https://github.com/gethomepage/homepage
|
||||||
|
|
||||||
markdown_extensions:
|
markdown_extensions:
|
||||||
- pymdownx.highlight:
|
- pymdownx.highlight:
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "خطأ",
|
"error": "خطأ",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "إجتاز",
|
"passed": "إجتاز",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"ping": "Ping",
|
"ping": "Ping",
|
||||||
"error": "Грешка"
|
"error": "Грешка",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Aprobat",
|
"passed": "Aprobat",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Chyba",
|
"error": "Chyba",
|
||||||
"ping": "Odezva"
|
"ping": "Odezva",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Úspěšné",
|
"passed": "Úspěšné",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Fejl",
|
"error": "Fejl",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Bestået",
|
"passed": "Bestået",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"ping": "Ping",
|
"ping": "Ping",
|
||||||
"error": "Fehler"
|
"error": "Fehler",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Bestanden",
|
"passed": "Bestanden",
|
||||||
|
|||||||
@@ -136,7 +136,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Σφάλμα",
|
"error": "Σφάλμα",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Παίζει",
|
"playing": "Παίζει",
|
||||||
|
|||||||
@@ -79,10 +79,12 @@
|
|||||||
"partial": "Partial"
|
"partial": "Partial"
|
||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
|
"http_status": "HTTP status",
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping",
|
"ping": "Ping",
|
||||||
"down": "Down",
|
"down": "Down",
|
||||||
"up": "Up"
|
"up": "Up",
|
||||||
|
"not_available": "Not Available"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Playing",
|
"playing": "Playing",
|
||||||
|
|||||||
@@ -67,7 +67,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Eraro",
|
"error": "Eraro",
|
||||||
"ping": "Sondaĵo"
|
"ping": "Sondaĵo",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Ludante",
|
"playing": "Ludante",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Aprobado",
|
"passed": "Aprobado",
|
||||||
|
|||||||
@@ -140,7 +140,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Errorea",
|
"error": "Errorea",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Playing",
|
"playing": "Playing",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Erreur",
|
"error": "Erreur",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Réussi",
|
"passed": "Réussi",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Greška",
|
"error": "Greška",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Uspjelo",
|
"passed": "Uspjelo",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Hiba",
|
"error": "Hiba",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Megfelelt",
|
"passed": "Megfelelt",
|
||||||
|
|||||||
@@ -610,7 +610,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Playing",
|
"playing": "Playing",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Errore",
|
"error": "Errore",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passati",
|
"passed": "Passati",
|
||||||
|
|||||||
@@ -117,7 +117,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "エラー",
|
"error": "エラー",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "再生中",
|
"playing": "再生中",
|
||||||
|
|||||||
@@ -85,7 +85,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "오류",
|
"error": "오류",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "재생 중",
|
"playing": "재생 중",
|
||||||
|
|||||||
@@ -71,7 +71,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Kļūda",
|
"error": "Kļūda",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Atskaņo",
|
"playing": "Atskaņo",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Ralat",
|
"error": "Ralat",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Lulus",
|
"passed": "Lulus",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Fout",
|
"error": "Fout",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Gepasseerd",
|
"passed": "Gepasseerd",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Błąd",
|
"error": "Błąd",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Powodzenie",
|
"passed": "Powodzenie",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Erro",
|
"error": "Erro",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passou",
|
"passed": "Passou",
|
||||||
|
|||||||
@@ -395,7 +395,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Erro",
|
"error": "Erro",
|
||||||
"ping": "Tempo de resposta"
|
"ping": "Tempo de resposta",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Aprovado",
|
"passed": "Aprovado",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Ошибка",
|
"error": "Ошибка",
|
||||||
"ping": "Пинг"
|
"ping": "Пинг",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"failed": "Неудачно",
|
"failed": "Неудачно",
|
||||||
|
|||||||
@@ -195,7 +195,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Chyba",
|
"error": "Chyba",
|
||||||
"ping": "Odozva"
|
"ping": "Odozva",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Prehrávané",
|
"playing": "Prehrávané",
|
||||||
|
|||||||
@@ -152,7 +152,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Napaka",
|
"error": "Napaka",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Predvaja",
|
"playing": "Predvaja",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
@@ -107,7 +107,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "ข้อผิดพลาด",
|
"error": "ข้อผิดพลาด",
|
||||||
"ping": "ปิง"
|
"ping": "ปิง",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "กำลังเล่น",
|
"playing": "กำลังเล่น",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Hata",
|
"error": "Hata",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Geçti",
|
"passed": "Geçti",
|
||||||
|
|||||||
@@ -172,7 +172,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Помилка",
|
"error": "Помилка",
|
||||||
"ping": "Пінг"
|
"ping": "Пінг",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"emby": {
|
"emby": {
|
||||||
"playing": "Відтворення",
|
"playing": "Відтворення",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "Error",
|
"error": "Error",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "Passed",
|
"passed": "Passed",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "错误",
|
"error": "错误",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "通过",
|
"passed": "通过",
|
||||||
|
|||||||
@@ -382,7 +382,9 @@
|
|||||||
},
|
},
|
||||||
"ping": {
|
"ping": {
|
||||||
"error": "錯誤",
|
"error": "錯誤",
|
||||||
"ping": "Ping"
|
"ping": "Ping",
|
||||||
|
"up": "Up",
|
||||||
|
"down": "Down"
|
||||||
},
|
},
|
||||||
"scrutiny": {
|
"scrutiny": {
|
||||||
"passed": "通過",
|
"passed": "通過",
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ export default function Item({ service, group }) {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<div className={`absolute top-0 right-0 flex flex-row justify-end ${statusStyle === 'dot' ? 'gap-0' : '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 && (
|
{service.ping && (
|
||||||
<div className="flex-shrink-0 flex items-center justify-center service-tag service-ping">
|
<div className="flex-shrink-0 flex items-center justify-center service-tag service-ping">
|
||||||
<Ping group={group} service={service.name} style={statusStyle} />
|
<Ping group={group} service={service.name} style={statusStyle} />
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export default function KubernetesStatus({ service, style }) {
|
|||||||
let statusLabel = t("docker.unknown");
|
let statusLabel = t("docker.unknown");
|
||||||
let statusTitle = "";
|
let statusTitle = "";
|
||||||
let backgroundClass = "px-1.5 py-0.5 bg-theme-500/10 dark:bg-theme-900/50";
|
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 ";
|
let colorClass = "text-black/20 dark:text-white/40 opacity-20";
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
statusTitle = t("docker.error");
|
statusTitle = t("docker.error");
|
||||||
@@ -29,8 +29,8 @@ export default function KubernetesStatus({ service, style }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (style === 'dot') {
|
if (style === 'dot') {
|
||||||
colorClass = colorClass.replace('text-', 'bg-').replace(/\/\d\d$/, '');
|
colorClass = colorClass.replace(/text-/g, 'bg-').replace(/\/\d\d/g, '');
|
||||||
backgroundClass = "p-3 hover:bg-theme-500/10 dark:hover:bg-theme-900/20";
|
backgroundClass = "p-4 hover:bg-theme-500/10 dark:hover:bg-theme-900/20";
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -7,44 +7,43 @@ export default function Ping({ group, service, style }) {
|
|||||||
refreshInterval: 30000
|
refreshInterval: 30000
|
||||||
});
|
});
|
||||||
|
|
||||||
let colorClass = ""
|
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 backgroundClass = "bg-theme-500/10 dark:bg-theme-900/50 px-1.5 py-0.5";
|
||||||
let statusTitle = "HTTP status";
|
let statusTitle = t("ping.http_status");
|
||||||
let statusText;
|
let statusText = "";
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
colorClass = "text-rose-500"
|
colorClass = "text-rose-500";
|
||||||
statusText = t("ping.error")
|
statusText = t("ping.error");
|
||||||
statusTitle += " error"
|
statusTitle += ` ${t("ping.error")}`;
|
||||||
} else if (!data) {
|
} else if (!data) {
|
||||||
colorClass = "text-black/20 dark:text-white/40"
|
statusText = t("ping.ping");
|
||||||
statusText = t("ping.ping")
|
statusTitle += ` ${t("ping.not_available")}`;
|
||||||
statusTitle += " not available"
|
|
||||||
} else if (data.status > 403) {
|
} else if (data.status > 403) {
|
||||||
colorClass = "text-rose-500/80"
|
colorClass = "text-rose-500/80";
|
||||||
statusTitle += ` ${data.status}`
|
statusTitle += ` ${data.status}`;
|
||||||
|
|
||||||
if (style === "basic") {
|
if (style === "basic") {
|
||||||
statusText = t("ping.down")
|
statusText = t("ping.down");
|
||||||
} else {
|
} 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 })
|
const ping = t("common.ms", { value: data.latency, style: "unit", unit: "millisecond", maximumFractionDigits: 0 })
|
||||||
statusTitle += ` ${data.status} (${ping})`;
|
statusTitle += ` ${data.status} (${ping})`;
|
||||||
colorClass = "text-emerald-500/80"
|
colorClass = "text-emerald-500/80";
|
||||||
|
|
||||||
if (style === "basic") {
|
if (style === "basic") {
|
||||||
statusText = t("ping.up")
|
statusText = t("ping.up");
|
||||||
} else {
|
} else {
|
||||||
statusText = ping
|
statusText = ping;
|
||||||
colorClass += " lowercase"
|
colorClass += " lowercase";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (style === "dot") {
|
if (style === "dot") {
|
||||||
backgroundClass = 'p-3';
|
backgroundClass = 'p-4';
|
||||||
colorClass = colorClass.replace('text-', 'bg-').replace(/\/\d\d$/, '');
|
colorClass = colorClass.replace(/text-/g, 'bg-').replace(/\/\d\d/g, '');
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export default function Status({ service, style }) {
|
|||||||
|
|
||||||
if (style === 'dot') {
|
if (style === 'dot') {
|
||||||
colorClass = colorClass.replace('text-', 'bg-').replace(/\/\d\d$/, '');
|
colorClass = colorClass.replace('text-', 'bg-').replace(/\/\d\d$/, '');
|
||||||
backgroundClass = "p-3 hover:bg-theme-500/10 dark:hover:bg-theme-900/20";
|
backgroundClass = "p-4 hover:bg-theme-500/10 dark:hover:bg-theme-900/20";
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export default function Version() {
|
|||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
<a
|
<a
|
||||||
href={`https://github.com/benphelps/homepage/releases/tag/${version}`}
|
href={`https://github.com/gethomepage/homepage/releases/tag/${version}`}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="ml-2 text-xs text-theme-500 dark:text-theme-400 flex flex-row items-center"
|
className="ml-2 text-xs text-theme-500 dark:text-theme-400 flex flex-row items-center"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import cachedFetch from "utils/proxy/cached-fetch";
|
import cachedFetch from "utils/proxy/cached-fetch";
|
||||||
|
|
||||||
export default async function handler(req, res) {
|
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));
|
return res.send(await cachedFetch(releasesURL, 5));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import ErrorBoundary from "components/errorboundry";
|
|||||||
import themes from "utils/styles/themes";
|
import themes from "utils/styles/themes";
|
||||||
import QuickLaunch from "components/quicklaunch";
|
import QuickLaunch from "components/quicklaunch";
|
||||||
import { getStoredProvider, searchProviders } from "components/widgets/search/search";
|
import { getStoredProvider, searchProviders } from "components/widgets/search/search";
|
||||||
import ResolvedIcon from "components/resolvedicon";
|
|
||||||
|
|
||||||
const ThemeToggle = dynamic(() => import("components/toggles/theme"), {
|
const ThemeToggle = dynamic(() => import("components/toggles/theme"), {
|
||||||
ssr: false,
|
ssr: false,
|
||||||
@@ -168,17 +167,6 @@ const headerStyles = {
|
|||||||
boxedWidgets: "m-6 mb-0 sm:m-9 sm:mb-0 sm:mt-1",
|
boxedWidgets: "m-6 mb-0 sm:m-9 sm:mb-0 sm:mt-1",
|
||||||
};
|
};
|
||||||
|
|
||||||
const deprecatedNotificationDismissedStorageKey = "deprecated-notification-dismissed";
|
|
||||||
|
|
||||||
const getNotificationDismissed = () => {
|
|
||||||
if (typeof window !== "undefined" && window.localStorage) {
|
|
||||||
const dismissed = window.localStorage.getItem(deprecatedNotificationDismissedStorageKey);
|
|
||||||
return dismissed;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
};
|
|
||||||
|
|
||||||
function Home({ initialSettings }) {
|
function Home({ initialSettings }) {
|
||||||
const { i18n } = useTranslation();
|
const { i18n } = useTranslation();
|
||||||
const { theme, setTheme } = useContext(ThemeContext);
|
const { theme, setTheme } = useContext(ThemeContext);
|
||||||
@@ -187,9 +175,6 @@ function Home({ initialSettings }) {
|
|||||||
const { activeTab, setActiveTab } = useContext(TabContext);
|
const { activeTab, setActiveTab } = useContext(TabContext);
|
||||||
const { asPath } = useRouter();
|
const { asPath } = useRouter();
|
||||||
|
|
||||||
const isDeprecatedRepo = process.env.NEXT_PUBLIC_DEPRECATED_REPO;
|
|
||||||
const [notificationDismissed, setNotificationDismissed] = useState(getNotificationDismissed);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setSettings(initialSettings);
|
setSettings(initialSettings);
|
||||||
}, [initialSettings, setSettings]);
|
}, [initialSettings, setSettings]);
|
||||||
@@ -198,7 +183,7 @@ function Home({ initialSettings }) {
|
|||||||
const { data: bookmarks } = useSWR("/api/bookmarks");
|
const { data: bookmarks } = useSWR("/api/bookmarks");
|
||||||
const { data: widgets } = useSWR("/api/widgets");
|
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(() => {
|
useEffect(() => {
|
||||||
if (settings.language) {
|
if (settings.language) {
|
||||||
@@ -435,23 +420,6 @@ function Home({ initialSettings }) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="version" className="flex mt-4 w-full justify-end">
|
<div id="version" className="flex mt-4 w-full justify-end">
|
||||||
{isDeprecatedRepo && !notificationDismissed && // outside version in case its hidden
|
|
||||||
<div className="flex flex-row items-center py-1 pl-2 mr-3 rounded-md text-xs text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-rose-900/80">
|
|
||||||
<a className="italic flex flex-row items-center" href="https://gethomepage.dev/latest/more/homepage-move/" title="Read more..." target="_blank" rel="noreferrer">
|
|
||||||
<span className="inline-block flex-shrink-0 mr-1 w-3 h-3">
|
|
||||||
<ResolvedIcon icon="mdi-alert" />
|
|
||||||
</span>
|
|
||||||
Homepage has moved!
|
|
||||||
</a>
|
|
||||||
<button type="button" className="ml-2 w-4 h-4 mr-1" title="Hide this notification"
|
|
||||||
onClick={() => {
|
|
||||||
setNotificationDismissed(true);
|
|
||||||
localStorage.setItem(deprecatedNotificationDismissedStorageKey, true);
|
|
||||||
}}>
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor"><path d="M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"/></svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
}
|
|
||||||
{!settings.hideVersion && <Version />}
|
{!settings.hideVersion && <Version />}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ export function getSettings() {
|
|||||||
|
|
||||||
if (initialSettings.layout) {
|
if (initialSettings.layout) {
|
||||||
// support yaml list but old spec was object so convert to that
|
// 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)) {
|
if (Array.isArray(initialSettings.layout)) {
|
||||||
const layoutItems = initialSettings.layout
|
const layoutItems = initialSettings.layout
|
||||||
initialSettings.layout = {}
|
initialSettings.layout = {}
|
||||||
|
|||||||
@@ -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}`);
|
const isNg = cache.get(`${isNgCacheKey}.${service}`);
|
||||||
if (isNg && !params) {
|
if (isNg && !params) {
|
||||||
delete options.body;
|
delete options.body;
|
||||||
@@ -50,7 +50,7 @@ async function login(loginUrl, service, username, password = '') {
|
|||||||
if (status !== 200 || sessionId === false) {
|
if (status !== 200 || sessionId === false) {
|
||||||
logger.error(`HTTP ${status} logging into Pyload API, returned: ${JSON.stringify(sessionId)}`);
|
logger.error(`HTTP ${status} logging into Pyload API, returned: ${JSON.stringify(sessionId)}`);
|
||||||
} else if (responseHeaders['set-cookie']?.join().includes('pyload_session')) {
|
} 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);
|
cache.put(`${isNgCacheKey}.${service}`, true);
|
||||||
const sessionCookie = responseHeaders['set-cookie'][0];
|
const sessionCookie = responseHeaders['set-cookie'][0];
|
||||||
cache.put(`${sessionCacheKey}.${service}`, sessionCookie, 60 * 60 * 23 * 1000); // cache for 23h
|
cache.put(`${sessionCacheKey}.${service}`, sessionCookie, 60 * 60 * 23 * 1000); // cache for 23h
|
||||||
|
|||||||
@@ -70,5 +70,8 @@ module.exports = {
|
|||||||
'lg:grid-cols-6',
|
'lg:grid-cols-6',
|
||||||
'lg:grid-cols-7',
|
'lg:grid-cols-7',
|
||||||
'lg:grid-cols-8',
|
'lg:grid-cols-8',
|
||||||
|
'bg-white',
|
||||||
|
'bg-black',
|
||||||
|
'dark:bg-white',
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user