Compare commits

...

15 Commits

Author SHA1 Message Date
shamoon
5c84b90634 Rename discussion template 2023-04-05 16:19:27 -07:00
shamoon
4e138e3d0f Move FR template to discussion ,add config 2023-04-05 16:13:22 -07:00
Anonymous
8b38f12452 Translated using Weblate (Greek)
Currently translated at 100.0% (0 of 0 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/el/
2023-04-05 21:34:11 +02:00
Przemek
b3ea7b816d Translated using Weblate (Polish)
Currently translated at 72.2% (291 of 403 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/pl/
2023-04-05 21:33:57 +02:00
Juan Manuel Bennàssar Carretero
1bec7897f0 Translated using Weblate (Catalan)
Currently translated at 64.0% (258 of 403 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/ca/
2023-04-05 21:33:56 +02:00
Nonoss117
98422a0727 Translated using Weblate (French)
Currently translated at 99.5% (401 of 403 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/fr/
2023-04-05 21:33:56 +02:00
David Tornero
57c145c3d2 Translated using Weblate (Spanish)
Currently translated at 100.0% (403 of 403 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-04-05 21:33:56 +02:00
Juan Manuel Bennàssar Carretero
43233cf446 Translated using Weblate (Spanish)
Currently translated at 100.0% (403 of 403 strings)

Translation: Homepage/Homepage
Translate-URL: https://hosted.weblate.org/projects/homepage/homepage/es/
2023-04-05 21:33:55 +02:00
G. Petrakis
187df778bf Added translation using Weblate (Greek) 2023-04-05 21:32:53 +02:00
shamoon
d7dc328cdc Merge pull request #1191 from benphelps/feature/987
Add 5th column for 2xl screens
2023-04-05 08:54:41 -07:00
shamoon
066995702b Add 5th column for 2xl screens 2023-04-05 08:53:28 -07:00
shamoon
777c78363d Merge pull request #1187 from benphelps/fix-576-final
True fix for settings revert after container creation
2023-04-04 23:08:13 -07:00
shamoon
6701e3bd77 Use HOMEPAGE_BUILDTIME to revalidate container restart/recreate 2023-04-04 22:55:26 -07:00
shamoon
a42c50f1cc fix emby widget options interpolation 2023-04-04 19:08:52 -07:00
shamoon
2fbe4e5f24 Update cputemp.jsx 2023-04-04 17:05:22 -07:00
14 changed files with 607 additions and 32 deletions

View File

@@ -1,5 +1,3 @@
name: Feature request
description: Suggest an idea for this project
title: "[Feature Request] "
labels: ["enhancement"]
body:

11
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
blank_issues_enabled: false
contact_links:
- name: 🤔 Questions and Help
url: https://github.com/benphelps/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
about: Remember to search for existing feature requests and "up-vote" any you like

View File

@@ -29,7 +29,7 @@ COPY . .
SHELL ["/bin/ash", "-xeo", "pipefail", "-c"]
RUN npm run telemetry \
&& mkdir config && echo '---' > config/settings.yaml \
&& mkdir config \
&& NEXT_PUBLIC_BUILDTIME=$BUILDTIME NEXT_PUBLIC_VERSION=$VERSION NEXT_PUBLIC_REVISION=$REVISION npm run build
# Production image, copy all the files and run next

View File

@@ -10,6 +10,8 @@ export PGID=${PGID:-0}
# while also supporting the lscr.io /config directory
[ ! -d "/app/config" ] && ln -s /config /app/config
export HOMEPAGE_BUILDTIME=$(date +%s)
# Set privileges for /app but only if pid 1 user is root and we are dropping privileges.
# If container is run as an unprivileged user, it means owner already handled ownership setup on their own.
# Running chown in that case (as non-root) will cause error

View File

@@ -183,7 +183,7 @@
"qbittorrent": {
"download": "Descàrrega",
"upload": "Pujada",
"leech": "Company",
"leech": "Companys",
"seed": "Llavors"
},
"mastodon": {

View File

@@ -0,0 +1,566 @@
{
"resources": {
"used": "Used",
"load": "Load",
"cpu": "CPU",
"mem": "MEM",
"temp": "TEMP",
"total": "Total",
"free": "Free",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
},
"omada": {
"activeUser": "Active devices",
"alerts": "Alerts",
"connectedAp": "Connected APs",
"connectedGateway": "Connected gateways",
"connectedSwitches": "Connected switches"
},
"wmo": {
"0-night": "Clear",
"65-day": "Heavy Rain",
"65-night": "Heavy Rain",
"0-day": "Sunny",
"1-day": "Mainly Sunny",
"1-night": "Mainly Clear",
"2-day": "Partly Cloudy",
"2-night": "Partly Cloudy",
"3-day": "Cloudy",
"3-night": "Cloudy",
"45-day": "Foggy",
"45-night": "Foggy",
"48-day": "Foggy",
"48-night": "Foggy",
"51-day": "Light Drizzle",
"51-night": "Light Drizzle",
"53-day": "Drizzle",
"53-night": "Drizzle",
"55-day": "Heavy Drizzle",
"55-night": "Heavy Drizzle",
"56-day": "Light Freezing Drizzle",
"56-night": "Light Freezing Drizzle",
"57-day": "Freezing Drizzle",
"57-night": "Freezing Drizzle",
"61-day": "Light Rain",
"61-night": "Light Rain",
"63-day": "Rain",
"63-night": "Rain",
"66-day": "Freezing Rain",
"66-night": "Freezing Rain",
"67-day": "Freezing Rain",
"67-night": "Freezing Rain",
"71-day": "Light Snow",
"71-night": "Light Snow",
"73-day": "Snow",
"73-night": "Snow",
"75-day": "Heavy Snow",
"75-night": "Heavy Snow",
"77-day": "Snow Grains",
"77-night": "Snow Grains",
"80-day": "Light Showers",
"80-night": "Light Showers",
"81-day": "Showers",
"81-night": "Showers",
"82-day": "Heavy Showers",
"82-night": "Heavy Showers",
"85-day": "Snow Showers",
"85-night": "Snow Showers",
"86-day": "Snow Showers",
"86-night": "Snow Showers",
"95-day": "Thunderstorm",
"95-night": "Thunderstorm",
"96-day": "Thunderstorm With Hail",
"96-night": "Thunderstorm With Hail",
"99-day": "Thunderstorm With Hail",
"99-night": "Thunderstorm With Hail"
},
"common": {
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
},
"widget": {
"missing_type": "Missing Widget Type: {{type}}",
"api_error": "API Error",
"information": "Information",
"status": "Status",
"url": "URL",
"raw_error": "Raw Error",
"response_data": "Response Data"
},
"weather": {
"current": "Current Location",
"allow": "Click to allow",
"updating": "Updating",
"wait": "Please wait"
},
"search": {
"placeholder": "Search…"
},
"unifi": {
"users": "Users",
"uptime": "System Uptime",
"days": "Days",
"wan": "WAN",
"lan": "LAN",
"wlan": "WLAN",
"devices": "Devices",
"lan_devices": "LAN Devices",
"wlan_devices": "WLAN Devices",
"lan_users": "LAN Users",
"wlan_users": "WLAN Users",
"up": "UP",
"down": "DOWN",
"wait": "Please wait",
"empty_data": "Subsystem status unknown"
},
"docker": {
"rx": "RX",
"tx": "TX",
"mem": "MEM",
"cpu": "CPU",
"running": "Running",
"offline": "Offline",
"error": "Error",
"unknown": "Unknown",
"healthy": "Healthy",
"exited": "Exited",
"starting": "Starting",
"partial": "Partial",
"unhealthy": "Unhealthy",
"not_found": "Not Found"
},
"ping": {
"error": "Error",
"ping": "Ping"
},
"emby": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams",
"movies": "Movies",
"series": "Series",
"episodes": "Episodes",
"songs": "Songs"
},
"flood": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"changedetectionio": {
"totalObserved": "Total Observed",
"diffsDetected": "Diffs Detected"
},
"tautulli": {
"playing": "Playing",
"transcoding": "Transcoding",
"bitrate": "Bitrate",
"no_active": "No Active Streams"
},
"nzbget": {
"rate": "Rate",
"remaining": "Remaining",
"downloaded": "Downloaded"
},
"plex": {
"streams": "Active Streams",
"movies": "Movies",
"tv": "TV Shows"
},
"sabnzbd": {
"rate": "Rate",
"queue": "Queue",
"timeleft": "Time Left"
},
"rutorrent": {
"active": "Active",
"upload": "Upload",
"download": "Download"
},
"transmission": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"qbittorrent": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"deluge": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"sonarr": {
"series": "Series",
"wanted": "Wanted",
"queued": "Queued"
},
"downloadstation": {
"download": "Download",
"upload": "Upload",
"leech": "Leech",
"seed": "Seed"
},
"radarr": {
"wanted": "Wanted",
"missing": "Missing",
"queued": "Queued",
"movies": "Movies"
},
"lidarr": {
"wanted": "Wanted",
"queued": "Queued",
"albums": "Albums"
},
"readarr": {
"wanted": "Wanted",
"queued": "Queued",
"books": "Books"
},
"bazarr": {
"missingEpisodes": "Missing Episodes",
"missingMovies": "Missing Movies"
},
"ombi": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
},
"jellyseerr": {
"pending": "Pending",
"approved": "Approved",
"available": "Available"
},
"overseerr": {
"pending": "Pending",
"processing": "Processing",
"approved": "Approved",
"available": "Available"
},
"pihole": {
"queries": "Queries",
"blocked": "Blocked",
"gravity": "Gravity"
},
"adguard": {
"queries": "Queries",
"blocked": "Blocked",
"filtered": "Filtered",
"latency": "Latency"
},
"speedtest": {
"upload": "Upload",
"download": "Download",
"ping": "Ping"
},
"portainer": {
"running": "Running",
"stopped": "Stopped",
"total": "Total"
},
"tdarr": {
"queue": "Queue",
"processed": "Processed",
"errored": "Errored",
"saved": "Saved"
},
"traefik": {
"routers": "Routers",
"services": "Services",
"middleware": "Middleware"
},
"navidrome": {
"nothing_streaming": "No Active Streams",
"please_wait": "Please Wait"
},
"npm": {
"enabled": "Enabled",
"disabled": "Disabled",
"total": "Total"
},
"coinmarketcap": {
"configure": "Configure one or more crypto currencies to track",
"1hour": "1 Hour",
"1day": "1 Day",
"7days": "7 Days",
"30days": "30 Days"
},
"gotify": {
"apps": "Applications",
"clients": "Clients",
"messages": "Messages"
},
"prowlarr": {
"enableIndexers": "Indexers",
"numberOfGrabs": "Grabs",
"numberOfQueries": "Queries",
"numberOfFailGrabs": "Fail Grabs",
"numberOfFailQueries": "Fail Queries"
},
"strelaysrv": {
"numActiveSessions": "Sessions",
"numConnections": "Connections",
"dataRelayed": "Relayed",
"transferRate": "Rate"
},
"jackett": {
"configured": "Configured",
"errored": "Errored"
},
"mastodon": {
"user_count": "Users",
"status_count": "Posts",
"domain_count": "Domains"
},
"medusa": {
"wanted": "Wanted",
"queued": "Queued",
"series": "Series"
},
"minecraft": {
"players": "Players",
"version": "Version",
"down": "Offline",
"status": "Status",
"up": "Online"
},
"miniflux": {
"read": "Read",
"unread": "Unread"
},
"authentik": {
"users": "Users",
"loginsLast24H": "Logins (24h)",
"failedLoginsLast24H": "Failed Logins (24h)"
},
"proxmox": {
"mem": "MEM",
"cpu": "CPU",
"lxc": "LXC",
"vms": "VMs"
},
"glances": {
"cpu": "CPU",
"mem": "MEM",
"wait": "Please wait",
"temp": "TEMP",
"uptime": "UP",
"days": "d",
"hours": "h"
},
"quicklaunch": {
"bookmark": "Bookmark",
"service": "Service",
"search": "Search",
"custom": "Custom",
"visit": "Visit",
"url": "URL"
},
"homebridge": {
"available_update": "System",
"updates": "Updates",
"update_available": "Update Available",
"up_to_date": "Up to Date",
"child_bridges": "Child Bridges",
"child_bridges_status": "{{ok}}/{{total}}",
"up": "Up",
"pending": "Pending",
"down": "Down"
},
"healthchecks": {
"new": "New",
"up": "Online",
"grace": "In Grace Period",
"down": "Offline",
"paused": "Paused",
"status": "Status",
"last_ping": "Last Ping",
"never": "No pings yet"
},
"watchtower": {
"containers_scanned": "Scanned",
"containers_updated": "Updated",
"containers_failed": "Failed"
},
"autobrr": {
"approvedPushes": "Approved",
"rejectedPushes": "Rejected",
"filters": "Filters",
"indexers": "Indexers"
},
"tubearchivist": {
"downloads": "Queue",
"videos": "Videos",
"channels": "Channels",
"playlists": "Playlists"
},
"truenas": {
"load": "System Load",
"uptime": "Uptime",
"alerts": "Alerts",
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
},
"pyload": {
"speed": "Speed",
"active": "Active",
"queue": "Queue",
"total": "Total"
},
"gluetun": {
"public_ip": "Public IP",
"region": "Region",
"country": "Country"
},
"hdhomerun": {
"channels": "Channels",
"hd": "HD"
},
"scrutiny": {
"passed": "Passed",
"failed": "Failed",
"unknown": "Unknown"
},
"paperlessngx": {
"inbox": "Inbox",
"total": "Total"
},
"nextdns": {
"wait": "Please Wait",
"no_devices": "No Device Data Received"
},
"mikrotik": {
"cpuLoad": "CPU Load",
"memoryUsed": "Memory Used",
"uptime": "Uptime",
"numberOfLeases": "Leases"
},
"xteve": {
"streams_all": "All Streams",
"streams_active": "Active Streams",
"streams_xepg": "XEPG Channels"
},
"opnsense": {
"cpu": "CPU Load",
"memory": "Active Memory",
"wanUpload": "WAN Upload",
"wanDownload": "WAN Download"
},
"moonraker": {
"printer_state": "Printer State",
"print_status": "Print Status",
"print_progress": "Progress",
"layers": "Layers"
},
"octoprint": {
"printer_state": "Status",
"temp_tool": "Tool temp",
"temp_bed": "Bed temp",
"job_completion": "Completion"
},
"cloudflared": {
"origin_ip": "Origin IP",
"status": "Status"
},
"proxmoxbackupserver": {
"datastore_usage": "Datastore",
"failed_tasks_24h": "Failed Tasks 24h",
"cpu_usage": "CPU",
"memory_usage": "Memory"
},
"immich": {
"users": "Users",
"photos": "Photos",
"videos": "Videos",
"storage": "Storage"
},
"uptimekuma": {
"up": "Sites Up",
"down": "Sites Down",
"uptime": "Uptime",
"incident": "Incident",
"m": "m"
},
"komga": {
"libraries": "Libraries",
"series": "Series",
"books": "Books"
},
"diskstation": {
"days": "Days",
"uptime": "Uptime",
"volumeAvailable": "Available"
},
"mylar": {
"series": "Series",
"issues": "Issues",
"wanted": "Wanted"
},
"photoprism": {
"albums": "Albums",
"photos": "Photos",
"videos": "Videos",
"people": "People"
},
"fileflows": {
"processed": "Processed",
"queue": "Queue",
"processing": "Processing",
"time": "Time"
},
"grafana": {
"dashboards": "Dashboards",
"datasources": "Data Sources",
"totalalerts": "Total Alerts",
"alertstriggered": "Alerts Triggered"
},
"nextcloud": {
"cpuload": "Cpu Load",
"memoryusage": "Memory Usage",
"freespace": "Free Space",
"activeusers": "Active Users"
},
"kopia": {
"status": "Status",
"size": "Size",
"lastrun": "Last Run",
"nextrun": "Next Run",
"failed": "Failed"
},
"unmanic": {
"active_workers": "Active Workers",
"total_workers": "Total Workers",
"records_total": "Queue Length"
},
"pterodactyl": {
"servers": "Servers",
"nodes": "Nodes"
},
"prometheus": {
"targets_up": "Targets Up",
"targets_down": "Targets Down",
"targets_total": "Total Targets"
},
"ghostfolio": {
"gross_percent_today": "Today",
"gross_percent_1y": "One year",
"gross_percent_max": "All time"
},
"audiobookshelf": {
"podcasts": "Podcasts",
"books": "Books",
"podcastsDuration": "Duration",
"booksDuration": "Duration"
}
}

View File

@@ -19,7 +19,7 @@
"cpu": "CPU",
"mem": "MEM",
"temp": "TEMPORAL",
"max": "Máximo",
"max": "Máx.",
"uptime": "ARRIBA",
"months": "Meses",
"days": "Días",
@@ -118,7 +118,7 @@
"current": "Ubicación actual",
"allow": "Clic para permitir",
"updating": "Actualizando",
"wait": "Espere, por favor"
"wait": "Espera, por favor"
},
"overseerr": {
"pending": "Pendiente",
@@ -183,7 +183,7 @@
"qbittorrent": {
"download": "Bajada",
"upload": "Subida",
"leech": "Depender",
"leech": "Compañeros",
"seed": "Semillas"
},
"mastodon": {
@@ -228,7 +228,7 @@
"plex": {
"streams": "Transmisiones activas",
"movies": "Películas",
"tv": "Programas de TV"
"tv": "Series"
},
"glances": {
"cpu": "Procesador",
@@ -425,8 +425,8 @@
"numberOfLeases": "Alquileres"
},
"xteve": {
"streams_all": "Todas las corrientes",
"streams_active": "Corrientes activas",
"streams_all": "Todos los flujos",
"streams_active": "Flujos activos",
"streams_xepg": "Canales XEPG"
},
"opnsense": {
@@ -448,8 +448,8 @@
},
"octoprint": {
"temp_bed": "temperatura de la plataforma",
"printer_state": "Status",
"temp_tool": "Herramienta de temperatura",
"printer_state": "Estado",
"temp_tool": "Temperatura de herramienta",
"job_completion": "Finalización"
},
"cloudflared": {

View File

@@ -24,7 +24,7 @@
"months": "mo",
"days": "d",
"hours": "h",
"minutes": "m"
"minutes": "mn"
},
"docker": {
"rx": "Rx",

View File

@@ -15,13 +15,13 @@
"free": "Wolne",
"cpu": "CPU",
"mem": "PAM",
"temp": "TEMP",
"temp": "TYMCZASOWE",
"max": "Max",
"uptime": "UP",
"months": "mo",
"days": "d",
"months": "misiąc",
"days": "dni",
"hours": "h",
"minutes": "m"
"minutes": "minuty"
},
"emby": {
"no_active": "Brak aktywnych strumieni",
@@ -79,7 +79,7 @@
"error": "Błąd",
"unknown": "Nieznany",
"running": "Działa",
"starting": "Starting",
"starting": "Startować",
"unhealthy": "Unhealthy",
"not_found": "Not Found",
"exited": "Exited",

View File

@@ -8,7 +8,7 @@ export default function ServicesGroup({ services, layout }) {
<div
key={services.name}
className={classNames(
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4",
layout?.style === "row" ? "basis-full" : "basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4 2xl:basis-1/5",
"flex-1 p-1"
)}
>

View File

@@ -47,16 +47,14 @@ export default function CpuTemp({ expanded, units }) {
);
}
let minTemp = 0;
let mainTemp = data.cputemp.main;
if (data.cputemp.cores?.length) {
mainTemp = data.cputemp.cores.reduce((a, b) => a + b) / data.cputemp.cores.length;
minTemp = Math.min(...data.cputemp.cores);
}
const unit = units === "imperial" ? "fahrenheit" : "celsius";
mainTemp = (unit === "celsius") ? mainTemp : convertToFahrenheit(mainTemp);
const maxTemp = (unit === "celsius") ? data.cputemp.max : convertToFahrenheit(data.cputemp.max);
const percent = Math.round(((mainTemp - minTemp) / (maxTemp - minTemp)) * 100);
const percent = Math.round((mainTemp / maxTemp) * 100);
return (
<div className="flex-none flex flex-row items-center mr-3 py-1.5">

View File

@@ -19,8 +19,8 @@ export default async function handler(req, res) {
return hash(readFileSync(configYaml, "utf8"));
});
// this ties hash to specific build which should force revaliation between versions
const buildTime = process.env.NEXT_PUBLIC_BUILDTIME?.length ? process.env.NEXT_PUBLIC_BUILDTIME : '';
// set to date by docker entrypoint, will force revalidation between restarts/recreates
const buildTime = process.env.HOMEPAGE_BUILDTIME?.length ? process.env.HOMEPAGE_BUILDTIME : '';
const combinedHash = hash(hashes.join("") + buildTime);

View File

@@ -1,6 +1,6 @@
/* eslint-disable no-console */
import { join } from "path";
import { existsSync, copyFile, readFileSync } from "fs";
import { existsSync, readFileSync, copyFileSync } from "fs";
import cache from "memory-cache";
import yaml from "js-yaml";
@@ -13,13 +13,13 @@ export default function checkAndCopyConfig(config) {
const configYaml = join(process.cwd(), "config", config);
if (!existsSync(configYaml)) {
const configSkeleton = join(process.cwd(), "src", "skeleton", config);
copyFile(configSkeleton, configYaml, (err) => {
if (err) {
try {
copyFileSync(configSkeleton, configYaml)
console.info("%s was copied to the config folder", config);
} catch (err) {
console.error("error copying config", err);
throw err;
}
console.info("%s was copied to the config folder", config);
});
}
return true;
}

View File

@@ -297,8 +297,8 @@ export function cleanServiceGroups(groups) {
if (wan) cleanedService.widget.wan = wan;
}
if (type === "emby" || type === "jellyfin") {
if (enableBlocks) cleanedService.widget.enableBlocks = enableBlocks;
if (enableNowPlaying) cleanedService.widget.enableNowPlaying = enableNowPlaying;
if (enableBlocks !== undefined) cleanedService.widget.enableBlocks = enableBlocks;
if (enableNowPlaying !== undefined) cleanedService.widget.enableNowPlaying = enableNowPlaying;
}
if (type === "diskstation") {
if (volume) cleanedService.widget.volume = volume;