diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 00000000..08eebdf9
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,33 @@
+name: ๐ Bug report
+description: Please only raise an issue if you've been advised to do so in a GitHub discussion. Thanks! ๐
+labels: ["bug"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ ## โ ๏ธ Please note
+ The starting point for a bug report should always be a [GitHub discussion](https://github.com/gethomepage/homepage/discussions/new?category=support)
+ Thank you for contributing to homepage! โ
+ - type: checkboxes
+ id: pre-flight
+ attributes:
+ label: Before submitting, please confirm the following
+ options:
+ - label: I confirm this was discussed, and the maintainers suggest I open an issue (note that AI bots are not maintainers).
+ required: true
+ - label: I am aware that if I create this issue without a discussion, it will be removed without a response.
+ required: true
+ - type: input
+ id: discussion
+ attributes:
+ label: Discussion Link
+ description: |
+ Please link to the GitHub discussion that led to this issue.
+ validations:
+ required: true
+ - type: textarea
+ id: additional
+ attributes:
+ label: Additional context
+ description: Optional
+ render: Text
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index ce15fd04..22d29ff5 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -2,7 +2,7 @@ blank_issues_enabled: false
contact_links:
- name: ๐ค Questions and Help
url: https://github.com/gethomepage/homepage/discussions
- about: For support or general questions.
+ about: For support, possible bug reports or general questions.
- name: ๐ฌ Chat
url: https://discord.gg/k4ruYNrudu
about: Want to discuss homepage with others? Check out our chat.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 1cad352a..bf4fa386 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,12 +1,12 @@
## Proposed change
Closes # (issue)
diff --git a/.github/workflows/repo-maintenance.yml b/.github/workflows/repo-maintenance.yml
index d1f7e4fd..7cf47c51 100644
--- a/.github/workflows/repo-maintenance.yml
+++ b/.github/workflows/repo-maintenance.yml
@@ -42,17 +42,17 @@ jobs:
This issue has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new discussion for related concerns.
- See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.
+ See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.
pr-comment: >
This pull request has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new discussion for related concerns.
- See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.
+ See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.
discussion-comment: >
This discussion has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new discussion for related concerns.
- See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.
+ See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.
close-answered-discussions:
name: 'Close Answered Discussions'
runs-on: ubuntu-latest
@@ -92,7 +92,7 @@ jobs:
}`;
const commentVariables = {
discussion: discussion.id,
- body: 'This discussion has been automatically closed because it was marked as answered. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.',
+ body: 'This discussion has been automatically closed because it was marked as answered. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.',
}
await github.graphql(addCommentMutation, commentVariables)
@@ -182,7 +182,7 @@ jobs:
}`;
const commentVariables = {
discussion: discussion.id,
- body: 'This discussion has been automatically closed due to inactivity. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.',
+ body: 'This discussion has been automatically closed due to inactivity. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.',
}
await github.graphql(addCommentMutation, commentVariables);
@@ -260,7 +260,7 @@ jobs:
}`;
const commentVariables = {
discussion: discussion.id,
- body: 'This discussion has been automatically closed due to lack of community support. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-respoistory-maintenance) for more details.',
+ body: 'This discussion has been automatically closed due to lack of community support. See our [contributing guidelines](https://github.com/gethomepage/homepage/blob/main/CONTRIBUTING.md#automatic-repository-maintenance) for more details.',
}
await github.graphql(addCommentMutation, commentVariables);
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f2361c43..d3b07697 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -18,7 +18,7 @@ In short, when you submit code changes, your submissions are understood to be un
## Report bugs using Github [discussions](https://github.com/gethomepage/homepage/discussions)
-We use GitHub discussions to triage bugs. Report a bug by [opening a new discussion](https://github.com/gethomepage/homepage/discussions/new?category=support); it's that easy!
+We use GitHub discussions to triage bugs. Report a bug by [opening a new discussion](https://github.com/gethomepage/homepage/discussions/new?category=support); it's that easy! Please do not open an issue unless instructed to do so by a project maintainer.
## Write bug reports with detail, background, and sample configurations
@@ -48,15 +48,18 @@ Please see information in the docs regarding [code formatting with pre-commit ho
By contributing, you agree that your contributions will be licensed under its GNU General Public License.
+## Use of AI for pull requests
+
+In general, homepage does not accept "AI-generated" PRs. If you choose to use something like that to aid the development process to generate a significant proportion of the pull request, please make sure this is explicitly stated in the PR itself.
+
## References
This document was adapted from the open-source contribution guidelines for [Facebook's Draft](https://github.com/facebook/draft-js/blob/main/CONTRIBUTING.md)
-# Automatic Respoistory Maintenance
+## Automatic Respository Maintenance
The homepage team appreciates all effort and interest from the community in filing bug reports, creating feature requests, sharing ideas and helping other community members. That said, in an effort to keep the repository organized and managebale the project uses automatic handling of certain areas:
-- Issues that cannot be reproduced will be marked 'stale' after 7 days of inactivity and closed after 14 further days of inactivity.
- Issues, pull requests and discussions that are closed will be locked after 30 days of inactivity.
- Discussions with a marked answer will be automatically closed.
- Discussions in the 'General' or 'Support' categories will be closed after 180 days of inactivity.
diff --git a/README.md b/README.md
index 5bc61685..b47ef870 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,13 @@
+Homepage builds are kindly powered by DigitalOcean. +
+ # Features With features like quick search, bookmarks, weather support, a wide range of integrations and widgets, an elegant and modern design, and a focus on performance, Homepage is your ideal start to the day and a handy companion throughout it. @@ -41,7 +48,7 @@ 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/latest/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 Service Discovery](https://gethomepage.dev/latest/configs/docker/#automatic-service-discovery) page for more information. ## Service Widgets diff --git a/docs/configs/docker.md b/docs/configs/docker.md index 4d3026db..bcd0dd61 100644 --- a/docs/configs/docker.md +++ b/docs/configs/docker.md @@ -235,4 +235,4 @@ You can show the docker stats by clicking the status indicator but this can also showStats: true ``` -Also see the settings for [show docker stats](docker.md#show-docker-stats). +Also see the settings for [show docker stats](settings.md#show-docker-stats). diff --git a/docs/configs/settings.md b/docs/configs/settings.md index 9ee86a85..ea5db734 100644 --- a/docs/configs/settings.md +++ b/docs/configs/settings.md @@ -85,7 +85,7 @@ Or you may pass the path to a local image relative to the `/app/public` director ## Theme -You can configure a fixed them (and disable the theme switcher) by passing the `theme` option, like so: +You can configure a fixed theme (and disable the theme switcher) by passing the `theme` option, like so: ```yaml theme: dark # or light @@ -211,13 +211,13 @@ layout: ### Five Columns -You can add a fifth column (when `style: columns` which is default) by adding: +You can add a fifth column to services (when `style: columns` which is default) by adding: ```yaml fiveColumns: true ``` -By default homepage will max out at 4 columns for column style +By default homepage will max out at 4 columns for services with `columns` style ### Collapsible sections @@ -363,7 +363,7 @@ providers: You can then pass `provider` instead of `apiKey` in your widget configuration. ```yaml -- weather: +- weatherapi: latitude: 50.449684 longitude: 30.525026 provider: weatherapi @@ -406,6 +406,8 @@ By default the homepage logfile is written to the a `logs` subdirectory of the ` logpath: /logfile/path ``` +By default, logs are sent both to `stdout` and to a file at the path specified. This can be changed by setting the `LOG_TARGETS` environment variable to one of `both` (default), `stdout` or `file`. + ## Show Docker Stats You can show all docker stats expanded in `settings.yaml`: diff --git a/docs/index.md b/docs/index.md index 97a3704b..fe1c0adf 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,3 +17,10 @@ hide: A modern, fully static, fast, secure fully proxied, highly customizable application dashboard with integrations for over 100 services and translations into multiple languages. Easily configured via YAML files or through docker label discovery.  + + ++Homepage builds are kindly powered by DigitalOcean. +
diff --git a/docs/installation/k8s.md b/docs/installation/k8s.md index 685472ea..6805139b 100644 --- a/docs/installation/k8s.md +++ b/docs/installation/k8s.md @@ -361,3 +361,33 @@ spec: port: number: 3000 ``` + +### Multiple Replicas + +If you plan to deploy homepage with a replica count greater than 1, you may +want to consider enabling sticky sessions on the homepage route. This will +prevent unnecessary re-renders on page loads and window / tab focusing. The +procedure for enabling sticky sessions depends on your Ingress controller. Below +is an example using Traefik as the Ingress controller. + +``` +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: homepage.example.com +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`homepage.example.com`) + services: + - kind: Service + name: homepage + port: 3000 + sticky: + cookie: + httpOnly: true + secure: true + sameSite: none +``` diff --git a/docs/more/development.md b/docs/more/development.md index 8e3fac13..ec580cff 100644 --- a/docs/more/development.md +++ b/docs/more/development.md @@ -39,6 +39,11 @@ Once installed, hooks will run when you commit. If the formatting isn't quite ri See the [pre-commit documentation](https://pre-commit.com/#install) to get started. +## Preferring self-hosted open-source software + +In general, homepage is meant to be a dashboard for 'self-hosted' services and we believe it is a small way we can help showcase this kind of software. While exceptions are made, mostly when there is no viable +self-hosted / open-source alternative, we ask that any widgets, etc. are developed primarily for a self-hosted tool. + ## New Feature Guidelines - New features should be linked to an existing feature request with at least 10 'up-votes'. The purpose of this requirement is to avoid the addition (and maintenance) of features that might only benefit a small number of users. diff --git a/docs/overrides/main.html b/docs/overrides/main.html new file mode 100644 index 00000000..0a5f2bc5 --- /dev/null +++ b/docs/overrides/main.html @@ -0,0 +1,47 @@ +{% extends "base.html" %} + +{% block site_nav %} + + {% if nav %} + {% if page.meta and page.meta.hide %} + {% set hidden = "hidden" if "navigation" in page.meta.hide %} + {% endif %} + + {% endif %} + + + {% if "toc.integrate" not in features %} + {% if page.meta and page.meta.hide %} + {% set hidden = "hidden" if "toc" in page.meta.hide %} + {% endif %} + + {% endif %} +{% endblock %} diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css index e6bc9bf0..56ed77c8 100644 --- a/docs/stylesheets/extra.css +++ b/docs/stylesheets/extra.css @@ -22,3 +22,15 @@ #glimeRoot * { font-family: var(--md-text-font) !important; } + +#carbonads { + margin-top: 10px; +} + +#carbon-responsive { + --carbon-padding: 1em; + --carbon-max-char: 20ch; + --carbon-bg-primary: var(--md-default-bg-color) !important; + --carbon-bg-secondary: var(--md-default-fg-color--lightest) !important; + --carbon-text-color: var(--md-typeset-color) !important; +} diff --git a/docs/widgets/info/glances.md b/docs/widgets/info/glances.md index b7fd7efd..52c5cf28 100644 --- a/docs/widgets/info/glances.md +++ b/docs/widgets/info/glances.md @@ -12,6 +12,7 @@ The Glances widget allows you to monitor the resources (CPU, memory, storage, te url: http://host.or.ip:port username: user # optional if auth enabled in Glances password: pass # optional if auth enabled in Glances + version: 4 # required only if running glances v4 or higher, defaults to 3 cpu: true # optional, enabled by default, disable by setting to false mem: true # optional, enabled by default, disable by setting to false cputemp: true # disabled by default diff --git a/docs/widgets/info/openmeteo.md b/docs/widgets/info/openmeteo.md index 4cc49e26..fb5bb171 100644 --- a/docs/widgets/info/openmeteo.md +++ b/docs/widgets/info/openmeteo.md @@ -13,6 +13,8 @@ No registration is required at all! See [https://open-meteo.com/en/docs](https:/ timezone: Europe/Kiev # optional units: metric # or imperial cache: 5 # Time in minutes to cache API responses, to stay within limits + format: # optional, Intl.NumberFormat options + maximumFractionDigits: 1 ``` You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). diff --git a/docs/widgets/info/openweathermap.md b/docs/widgets/info/openweathermap.md index 04733f5d..320d5d85 100644 --- a/docs/widgets/info/openweathermap.md +++ b/docs/widgets/info/openweathermap.md @@ -14,6 +14,8 @@ The free tier "One Call API" is all that's required, you will need to [subscribe provider: openweathermap apiKey: youropenweathermapkey # required only if not using provider, this reveals api key in requests cache: 5 # Time in minutes to cache API responses, to stay within limits + format: # optional, Intl.NumberFormat options + maximumFractionDigits: 1 ``` You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). diff --git a/docs/widgets/info/resources.md b/docs/widgets/info/resources.md index b4f85d69..8281cec0 100644 --- a/docs/widgets/info/resources.md +++ b/docs/widgets/info/resources.md @@ -19,6 +19,8 @@ _Note: unfortunately, the package used for getting CPU temp ([systeminformation] memory: true disk: /disk/mount/path cputemp: true + tempmin: 0 # optional, minimum cpu temp + tempmax: 100 # optional, maximum cpu temp uptime: true units: imperial # only used by cpu temp refresh: 3000 # optional, in ms diff --git a/docs/widgets/info/weather.md b/docs/widgets/info/weather.md index 6357f0c0..ab13b673 100644 --- a/docs/widgets/info/weather.md +++ b/docs/widgets/info/weather.md @@ -15,6 +15,8 @@ The free tier is all that's required, you will need to [register](https://www.we units: metric # or imperial apiKey: yourweatherapikey cache: 5 # Time in minutes to cache API responses, to stay within limits + format: # optional, Intl.NumberFormat options + maximumFractionDigits: 1 ``` You can optionally not pass a `latitude` and `longitude` and the widget will use your current location (requires a secure context, eg. HTTPS). diff --git a/docs/widgets/services/authentik.md b/docs/widgets/services/authentik.md index 3b84009f..8968f4bf 100644 --- a/docs/widgets/services/authentik.md +++ b/docs/widgets/services/authentik.md @@ -7,14 +7,13 @@ Learn more about [Authentik](https://github.com/goauthentik/authentik). This widget reads the number of active users in the system, as well as logins for the last 24 hours. -You will need to generate an API token for an existing user. To do so follow these steps: +You will need to generate an API token for an existing user under `Admin Portal` > `Directory` > `Tokens & App passwords`. +Make sure to set Intent to "API Token". -1. Navigate to the Authentik Admin Portal -2. Expand Directory, the click Tokens & App passwords -3. Click the Create button -4. Fill out the dialog making sure to set Intent to API Token -5. Click the Create button on the dialog -6. Click the copy button on the far right of the newly created API Token +The account you made the API token for also needs the following **Assigned global permissions** in Authentik: + +- authentik Core -> Can view User (Model: User) +- authentik Events -> Can view Event (Model: Event) Allowed fields: `["users", "loginsLast24H", "failedLoginsLast24H"]`. diff --git a/docs/widgets/services/azuredevops.md b/docs/widgets/services/azuredevops.md index 218007fe..78846115 100644 --- a/docs/widgets/services/azuredevops.md +++ b/docs/widgets/services/azuredevops.md @@ -7,10 +7,10 @@ Learn more about [Azure DevOps](https://azure.microsoft.com/en-us/products/devop This widget has 2 functions: -1. Pipelines: checks if the relevant pipeline is running or not, and if not, reports the last status.\ +1. Pipelines: checks if the relevant pipeline is running or not, and if not, reports the last status.