Merge branch 'main' into pr/3743

This commit is contained in:
shamoon
2024-07-17 07:07:49 -07:00
10 changed files with 160 additions and 57 deletions

View File

@@ -13,7 +13,7 @@ body:
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).
- label: I confirm this was discussed, and the maintainers asked that I open an issue.
required: true
- label: I am aware that if I create this issue without a discussion, it will be removed without a response.
required: true

View File

@@ -34,13 +34,6 @@ These companies help the Homepage project by providing services, tools, and reso
</p>
</div>
<div style="margin-bottom: 16px;">
<a href="https://glimelab.ai/"><img src="https://framerusercontent.com/images/28KxmT1G06GrFM8TKeNAC03QIms.svg" alt="Crowdin" style="max-width: 100%; height: 64px; display: block;" /></a>
<p>
GlimeLab provides the project with the awesome AI chatbot here and on GitHub and Discord.
</p>
</div>
<div style="margin-bottom: 16px;">
<a href="https://www.jetbrains.com/"><img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.png" alt="JetBrains" style="max-width: 100%; height: 64px; display: block;" /></a>
<p>

View File

@@ -1,35 +0,0 @@
var glimeScript;
var glimeStyles = [];
document$.subscribe(function () {
if (!glimeScript) {
glimeScript = document.createElement("script");
glimeScript.setAttribute("src", "https://cdn.glimelab.ai/widget/1.0.0/widget.js");
glimeScript.setAttribute("onload", "onGlimeLoad()");
document.head.appendChild(glimeScript);
} else {
var newGlimeStyle = document.createElement("style");
document.head.appendChild(newGlimeStyle);
var i = 0;
glimeStyles.forEach((rule) => {
newGlimeStyle.sheet.insertRule(rule.cssText, i);
i++;
});
}
});
onGlimeLoad = () => {
window.glime.init("Bl3mlvfCnTnRm5");
setTimeout(() => {
const sheets = document.styleSheets;
[...sheets].forEach((sheet) => {
if (!sheet.href) {
[...sheet.cssRules].forEach((rule) => {
if (!rule || rule.href || !rule.selectorText) return;
if (rule.selectorText.indexOf(".css-") === 0 || rule.selectorText.indexOf("glime") > -1) {
glimeStyles.push(rule);
}
});
}
});
}, 1000);
};

View File

@@ -14,6 +14,16 @@
--md-default-fg-color: white;
}
[data-md-color-scheme="default"] .md-search__inner {
--md-default-fg-color--light: gray;
--md-default-fg-color--lighter: black;
--md-default-bg-color: hsla(0, 0%, 100%, 0.9);
}
[data-md-color-scheme="default"] .md-search__inner .md-search__input {
color: var(--md-default-fg-color--light);
}
[data-md-toggle="search"]:not(:checked) ~ .md-header .md-search__form::after {
position: absolute;
top: 0.3rem;
@@ -35,10 +45,6 @@
}
}
#glimeRoot * {
font-family: var(--md-text-font) !important;
}
#carbonads {
margin-top: 10px;
}
@@ -92,11 +98,11 @@
}
body {
background-color: transparent !important;
background-image: url("https://raw.githubusercontent.com/gethomepage/homepage/main/docs/assets/blossom_valley.jpg");
background-size: cover;
background-attachment: fixed;
background-position: center;
background-color: transparent;
color: rgba(255, 255, 255, 0.8);
}
@@ -152,6 +158,12 @@ body[data-md-color-scheme="default"] {
-webkit-backdrop-filter: blur(16px);
}
.md-header:has(.md-search-result__item),
.md-header:has(.md-search__input.focus-visible) {
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
}
.md-footer-meta {
background-color: transparent;
}
@@ -212,7 +224,7 @@ body[data-md-color-scheme="default"] {
}
.md-search__scrollwrap {
background-color: hsla(0, 0%, 0%, 0.3);
background-color: hsla(0, 0%, 0%, 0.8);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
}

View File

@@ -6,10 +6,6 @@ hide:
- navigation
---
## Introducing the Homepage AI Bot
Thanks to the generous folks at [Glime](https://glimelab.ai), Homepage is now equipped with a pretty clever AI-powered bot. The bot has full knowledge of our docs, GitHub issues and discussions and is great at answering specific questions about setting up your Homepage. To use the bot, just hit the 'Ask AI' button on any page in our docs, [open a GitHub discussion](https://github.com/gethomepage/homepage/discussions) or check out the [#ai-support channel on Discord](https://discord.com/channels/1019316731635834932/1177885603552038993)!
## General Troubleshooting Tips
- For API errors, clicking the "API Error Information" button in the widget will usually show some helpful information as to whether the issue is reaching the service host, an authentication issue, etc.

View File

@@ -6,6 +6,8 @@ icon: material/widgets
Homepage has two types of widgets: info and service. Below we'll cover each type and how to configure them.
The left navigation of this site contains links to all available widgets.
## Service Widgets
Service widgets are used to display the status of a service, often a web service or API. Services (and their widgets) are defined in your `services.yaml` file. Here's an example:

View File

@@ -2,3 +2,18 @@
title: Info Widgets
description: Homepage info widgets.
---
You can also find a list of all available info widgets in the sidebar navigation.
- [Date & Time](datetime.md)
- [Glances](glances.md)
- [Greeting](greeting.md)
- [Kubernetes](kubernetes.md)
- [Logo](logo.md)
- [Longhorn](longhorn.md)
- [OpenMeteo](openmeteo.md)
- [OpenWeatherMap](openweathermap.md)
- [Resources](resources.md)
- [Search](search.md)
- [Stocks](stocks.md)
- [UniFi Controller](unifi_controller.md)

View File

@@ -2,3 +2,125 @@
title: Service Widgets
description: Homepage service widgets.
---
You can also find a list of all available service widgets in the sidebar navigation.
- [Adguard Home](adguard-home.md)
- [Atsumeru](atsumeru.md)
- [Audiobookshelf](audiobookshelf.md)
- [Authentik](authentik.md)
- [Autobrr](autobrr.md)
- [Azure DevOps](azuredevops.md)
- [Bazarr](bazarr.md)
- [Caddy](caddy.md)
- [Calendar](calendar.md)
- [Calibre-Web](calibre-web.md)
- [ChangeDetection.io](changedetectionio.md)
- [Channels DVR Server](channelsdvrserver.md)
- [Cloudflared](cloudflared.md)
- [Coin Market Cap](coin-market-cap.md)
- [CrowdSec](crowdsec.md)
- [Custom API](customapi.md)
- [Deluge](deluge.md)
- [DiskStation](diskstation.md)
- [DownloadStation](downloadstation.md)
- [Emby](emby.md)
- [ESPHome](esphome.md)
- [EVCC](evcc.md)
- [Fileflows](fileflows.md)
- [Flood](flood.md)
- [FreshRSS](freshrss.md)
- [Fritz!Box](fritzbox.md)
- [GameDig](gamedig.md)
- [Gatus](gatus.md)
- [Ghostfolio](ghostfolio.md)
- [Gitea](gitea.md)
- [Glances](glances.md)
- [Gluetun](gluetun.md)
- [Gotify](gotify.md)
- [Grafana](grafana.md)
- [HDHomeRun](hdhomerun.md)
- [Healthchecks](healthchecks.md)
- [Home Assistant](homeassistant.md)
- [HomeBox](homebox.md)
- [Homebridge](homebridge.md)
- [iFrame](iframe.md)
- [Immich](immich.md)
- [Jackett](jackett.md)
- [JDownloader](jdownloader.md)
- [Jellyfin](jellyfin.md)
- [Jellyseerr](jellyseerr.md)
- [Kavita](kavita.md)
- [Komga](komga.md)
- [Kopia](kopia.md)
- [Lidarr](lidarr.md)
- [Mastodon](mastodon.md)
- [Mealie](mealie.md)
- [Medusa](medusa.md)
- [Mikrotik](mikrotik.md)
- [Minecraft](minecraft.md)
- [Miniflux](miniflux.md)
- [MJpeg](mjpeg.md)
- [Moonraker](moonraker.md)
- [Mylar](mylar.md)
- [MySpeed](myspeed.md)
- [Navidrome](navidrome.md)
- [NetAlertX](netalertx.md)
- [Netdata](netdata.md)
- [Nextcloud](nextcloud.md)
- [NextDNS](nextdns.md)
- [NGINX Proxy Manager](nginx-proxy-manager.md)
- [NZBGet](nzbget.md)
- [OctoPrint](octoprint.md)
- [Omada](omada.md)
- [Ombi](ombi.md)
- [OpenDTU](opendtu.md)
- [OpenMediaVault](openmediavault.md)
- [OpenWRT](openwrt.md)
- [OPNsense](opnsense.md)
- [Overseerr](overseerr.md)
- [PaperlessNGX](paperlessngx.md)
- [Peanut](peanut.md)
- [pfSense](pfsense.md)
- [PhotoPrism](photoprism.md)
- [Pi-hole](pihole.md)
- [PlantIt](plantit.md)
- [Plex & Tautulli](plex-tautulli.md)
- [Plex](plex.md)
- [Portainer](portainer.md)
- [Prometheus](prometheus.md)
- [Prowlarr](prowlarr.md)
- [Proxmox](proxmox.md)
- [Proxmox Backup Server](proxmoxbackupserver.md)
- [Pterodactyl](pterodactyl.md)
- [PyLoad](pyload.md)
- [qBittorrent](qbittorrent.md)
- [QNAP](qnap.md)
- [Radarr](radarr.md)
- [Readarr](readarr.md)
- [ROMM](romm.md)
- [ruTorrent](rutorrent.md)
- [SABnzbd](sabnzbd.md)
- [Scrutiny](scrutiny.md)
- [Sonarr](sonarr.md)
- [Speedtest Tracker](speedtest-tracker.md)
- [Stash](stash.md)
- [Stocks](stocks.md)
- [SwagDashboard](swagdashboard.md)
- [Syncthing Relay Server](syncthing-relay-server.md)
- [Tailscale](tailscale.md)
- [Tandoor](tandoor.md)
- [TDarr](tdarr.md)
- [Traefik](traefik.md)
- [Transmission](transmission.md)
- [TrueNAS](truenas.md)
- [TubeArchivist](tubearchivist.md)
- [UniFi Controller](unifi-controller.md)
- [Unmanic](unmanic.md)
- [Uptime Kuma](uptime-kuma.md)
- [UptimeRobot](uptimerobot.md)
- [UrBackup](urbackup.md)
- [Watchtower](watchtower.md)
- [WGEasy](wgeasy.md)
- [WhatsUpDocker](whatsupdocker.md)
- [xTeVe](xteve.md)

View File

@@ -226,8 +226,6 @@ theme:
extra_css:
- "stylesheets/extra.css"
extra_javascript:
- "scripts/extra.js"
extra:
version:

View File

@@ -48,8 +48,8 @@ export default async function handler(req, res) {
logger.error(`no pods found with namespace=${namespace} and labelSelector=${labelSelector}`);
return;
}
const someReady = pods.find((pod) => pod.status.phase === "Running");
const allReady = pods.every((pod) => pod.status.phase === "Running");
const someReady = pods.find((pod) => pod.status.phase in ["Completed", "Running"]);
const allReady = pods.every((pod) => pod.status.phase in ["Completed", "Running"]);
let status = "down";
if (allReady) {
status = "running";