# Glance Dashboard for Kisfenyo
# Namespace: glance-system
# Domain: kisfenyo.dooplex.hu
# Version: v0.8.4
#
# Features:
# - Custom background image
# - Custom logo
# - Weather widget (Budapest)
# - YouTube subscriptions
# - RSS feeds
# - To-do list
# - iFrames for Cal.com, Google Calendar, Outline
# - Bookmarks/Links to all apps
# - Calendar widget
#
# Authentik Integration:
# 1. Create Application: "Glance Home"
# 2. Create Provider: Proxy Provider with external host https://kisfenyo.dooplex.hu
# 3. Create Outpost: glance-outpost
# 4. Update auth-url annotation with actual outpost service name
---
apiVersion: v1
kind: ConfigMap
metadata:
name: glance-config-kisfenyo
namespace: glance-system
labels:
app.kubernetes.io/name: glance-kisfenyo
app.kubernetes.io/instance: glance-kisfenyo
data:
glance.yml: |
# Glance Configuration
# Documentation: https://github.com/glanceapp/glance/blob/main/docs/configuration.md
server:
host: 0.0.0.0
port: 8080
assets-path: /app/config/assets
branding:
logo-url: https://web.dooplex.hu/static/DooPlex_logo_3.png
favicon-url: https://web.dooplex.hu/static/DooPlex_favicon_2.png
app-name: "Kisfenyo's Home"
app-icon-url: https://web.dooplex.hu/static/DooPlex_favicon_2.png
app-background-color: "#132b66"
hide-footer: true
theme:
background-color: 210 35 12 # Was: 280 30 15 (purple → blue)
primary-color: 200 70 60 # Was: 280 60 70 (purple → cyan-blue)
positive-color: 150 55 50 # Was: 120 50 50 (green → teal-green, matches better)
negative-color: 0 70 60 # Unchanged (red)
contrast-multiplier: 1.2 # Unchanged
text-saturation-multiplier: 0.8 # Unchanged
custom-css-file: /assets/custom.css
pages:
# ==================== HOME PAGE ====================
- name: Home
slug: home
width: wide
columns:
# ---------- LEFT COLUMN ----------
- size: small
widgets:
# Glance Custom API Widget - System Stats from Prometheus
# Add this widget to your glance.yml configuration under a column's widgets section
#
# Prometheus URL: http://prometheus.mon-system.svc.cluster.local:9090
#
# This widget displays:
# - Hostname & Uptime
# - CPU usage % and Temperature
# - Memory usage %
# - Disk usage for all mount points with progress bars
# - Fan speeds
#
# Note: Make sure your Glance version is v0.8.0+ for all template functions
- type: custom-api
title: DooPlex Server
cache: 30s
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_uname_info
subrequests:
uptime_days:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: floor((time() - node_boot_time_seconds) / 86400)
uptime_hours:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: floor((time() - node_boot_time_seconds) % 86400 / 3600)
cpu:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
memory:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
cpu_temp:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_hwmon_temp_celsius{instance="dooplex",chip="platform_coretemp_0",sensor="temp1"}
fans:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: fan_speed_rpm{instance="dooplex"}
disk_root:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: 100 * (1 - node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"})
disk_root_used:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) / 1073741824
disk_root_total:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_filesystem_size_bytes{mountpoint="/"} / 1073741824
disk_ssd2:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: 100 * (1 - node_filesystem_avail_bytes{mountpoint="/mnt/ssd_2"} / node_filesystem_size_bytes{mountpoint="/mnt/ssd_2"})
disk_ssd2_used:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: (node_filesystem_size_bytes{mountpoint="/mnt/ssd_2"} - node_filesystem_avail_bytes{mountpoint="/mnt/ssd_2"}) / 1073741824
disk_ssd2_total:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_filesystem_size_bytes{mountpoint="/mnt/ssd_2"} / 1073741824
disk_hdd1:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: 100 * (1 - node_filesystem_avail_bytes{mountpoint="/mnt/1_hdd"} / node_filesystem_size_bytes{mountpoint="/mnt/1_hdd"})
disk_hdd1_used:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: (node_filesystem_size_bytes{mountpoint="/mnt/1_hdd"} - node_filesystem_avail_bytes{mountpoint="/mnt/1_hdd"}) / 1099511627776
disk_hdd1_total:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_filesystem_size_bytes{mountpoint="/mnt/1_hdd"} / 1099511627776
disk_hdd2:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: 100 * (1 - node_filesystem_avail_bytes{mountpoint="/mnt/2_hdd"} / node_filesystem_size_bytes{mountpoint="/mnt/2_hdd"})
disk_hdd2_used:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: (node_filesystem_size_bytes{mountpoint="/mnt/2_hdd"} - node_filesystem_avail_bytes{mountpoint="/mnt/2_hdd"}) / 1099511627776
disk_hdd2_total:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_filesystem_size_bytes{mountpoint="/mnt/2_hdd"} / 1099511627776
disk_hdd3:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: 100 * (1 - node_filesystem_avail_bytes{mountpoint="/mnt/3_hdd"} / node_filesystem_size_bytes{mountpoint="/mnt/3_hdd"})
disk_hdd3_used:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: (node_filesystem_size_bytes{mountpoint="/mnt/3_hdd"} - node_filesystem_avail_bytes{mountpoint="/mnt/3_hdd"}) / 1099511627776
disk_hdd3_total:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_filesystem_size_bytes{mountpoint="/mnt/3_hdd"} / 1099511627776
disk_hdd4:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: 100 * (1 - node_filesystem_avail_bytes{mountpoint="/mnt/4_hdd"} / node_filesystem_size_bytes{mountpoint="/mnt/4_hdd"})
disk_hdd4_used:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: (node_filesystem_size_bytes{mountpoint="/mnt/4_hdd"} - node_filesystem_avail_bytes{mountpoint="/mnt/4_hdd"}) / 1099511627776
disk_hdd4_total:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_filesystem_size_bytes{mountpoint="/mnt/4_hdd"} / 1099511627776
disk_hdd5:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: 100 * (1 - node_filesystem_avail_bytes{mountpoint="/mnt/5_hdd"} / node_filesystem_size_bytes{mountpoint="/mnt/5_hdd"})
disk_hdd5_used:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: (node_filesystem_size_bytes{mountpoint="/mnt/5_hdd"} - node_filesystem_avail_bytes{mountpoint="/mnt/5_hdd"}) / 1099511627776
disk_hdd5_total:
url: ${PROMETHEUS_URL}/api/v1/query
parameters:
query: node_filesystem_size_bytes{mountpoint="/mnt/5_hdd"} / 1099511627776
template: |
{{ $hostname := .JSON.String "data.result.0.metric.nodename" }}
{{ $uptimeDays := (.Subrequest "uptime_days").JSON.Float "data.result.0.value.1" }}
{{ $uptimeHours := (.Subrequest "uptime_hours").JSON.Float "data.result.0.value.1" }}
{{ $cpu := (.Subrequest "cpu").JSON.Float "data.result.0.value.1" }}
{{ $mem := (.Subrequest "memory").JSON.Float "data.result.0.value.1" }}
{{ $temp := (.Subrequest "cpu_temp").JSON.Float "data.result.0.value.1" }}
{{ $fans := (.Subrequest "fans").JSON.Array "data.result" }}
CPU
{{ printf "%.1f" $cpu }}%
Uptime
{{ printf "%.0f" $uptimeDays }}d {{ printf "%.0f" $uptimeHours }}h
Memory
{{ printf "%.1f" $mem }}%
Temp
{{ printf "%.0f" $temp }}°C
Fans (RPM)
{{ range $i, $fan := $fans }}{{ if $i }}/{{ end }}{{ $fan.Int "value.1" }}{{ end }}
Storage
{{ $rootPct := (.Subrequest "disk_root").JSON.Float "data.result.0.value.1" }}
{{ $rootUsed := (.Subrequest "disk_root_used").JSON.Float "data.result.0.value.1" }}
{{ $rootTotal := (.Subrequest "disk_root_total").JSON.Float "data.result.0.value.1" }}
Root
{{ printf "%.0f" $rootUsed }} / {{ printf "%.0f" $rootTotal }} GB ({{ printf "%.0f" $rootPct }}%)
{{ $ssd2Pct := (.Subrequest "disk_ssd2").JSON.Float "data.result.0.value.1" }}
{{ $ssd2Used := (.Subrequest "disk_ssd2_used").JSON.Float "data.result.0.value.1" }}
{{ $ssd2Total := (.Subrequest "disk_ssd2_total").JSON.Float "data.result.0.value.1" }}
SSD2
{{ printf "%.0f" $ssd2Used }} / {{ printf "%.0f" $ssd2Total }} GB ({{ printf "%.0f" $ssd2Pct }}%)
{{ $hdd1Pct := (.Subrequest "disk_hdd1").JSON.Float "data.result.0.value.1" }}
{{ $hdd1Used := (.Subrequest "disk_hdd1_used").JSON.Float "data.result.0.value.1" }}
{{ $hdd1Total := (.Subrequest "disk_hdd1_total").JSON.Float "data.result.0.value.1" }}
HDD1
{{ printf "%.1f" $hdd1Used }} / {{ printf "%.1f" $hdd1Total }} TB ({{ printf "%.0f" $hdd1Pct }}%)
{{ $hdd2Pct := (.Subrequest "disk_hdd2").JSON.Float "data.result.0.value.1" }}
{{ $hdd2Used := (.Subrequest "disk_hdd2_used").JSON.Float "data.result.0.value.1" }}
{{ $hdd2Total := (.Subrequest "disk_hdd2_total").JSON.Float "data.result.0.value.1" }}
HDD2
{{ printf "%.1f" $hdd2Used }} / {{ printf "%.1f" $hdd2Total }} TB ({{ printf "%.0f" $hdd2Pct }}%)
{{ $hdd3Pct := (.Subrequest "disk_hdd3").JSON.Float "data.result.0.value.1" }}
{{ $hdd3Used := (.Subrequest "disk_hdd3_used").JSON.Float "data.result.0.value.1" }}
{{ $hdd3Total := (.Subrequest "disk_hdd3_total").JSON.Float "data.result.0.value.1" }}
HDD3
{{ printf "%.1f" $hdd3Used }} / {{ printf "%.1f" $hdd3Total }} TB ({{ printf "%.0f" $hdd3Pct }}%)
{{ $hdd4Pct := (.Subrequest "disk_hdd4").JSON.Float "data.result.0.value.1" }}
{{ $hdd4Used := (.Subrequest "disk_hdd4_used").JSON.Float "data.result.0.value.1" }}
{{ $hdd4Total := (.Subrequest "disk_hdd4_total").JSON.Float "data.result.0.value.1" }}
HDD4
{{ printf "%.1f" $hdd4Used }} / {{ printf "%.1f" $hdd4Total }} TB ({{ printf "%.0f" $hdd4Pct }}%)
{{ $hdd5Pct := (.Subrequest "disk_hdd5").JSON.Float "data.result.0.value.1" }}
{{ $hdd5Used := (.Subrequest "disk_hdd5_used").JSON.Float "data.result.0.value.1" }}
{{ $hdd5Total := (.Subrequest "disk_hdd5_total").JSON.Float "data.result.0.value.1" }}
HDD5
{{ printf "%.1f" $hdd5Used }} / {{ printf "%.1f" $hdd5Total }} TB ({{ printf "%.0f" $hdd5Pct }}%)
# Weather Widget
- type: weather
location: Budapest, Hungary
units: metric
hour-format: 24h
# Calendar Widget
- type: calendar
first-day-of-week: monday
# To-Do List
- type: to-do
title: Tasks
# Quick Links - Productivity
- type: bookmarks
title: Productivity
groups:
- title: ""
links:
- title: Nextcloud
url: https://nextcloud.dooplex.hu
icon: si:nextcloud
- title: Outline
url: https://outline.dooplex.hu
icon: si:outline
- title: Paperless
url: https://paperless.dooplex.hu
icon: si:paperlessngx
- title: Vaultwarden
url: https://vaultwarden.dooplex.hu
icon: si:bitwarden
- title: Actual Budget
url: https://actualbudget.dooplex.hu
icon: si:actualbudget
- title: Tandoor
url: https://tandoor.dooplex.hu
icon: sh:tandoor-recipes
- title: Bookstack
url: https://bookstack.dooplex.hu
icon: si:bookstack
# Quick Links - File Sharing
- type: bookmarks
title: File Sharing
groups:
- title: ""
links:
- title: Fileshare
url: https://fileshare.dooplex.hu
icon: si:files
- title: Privatebin
url: https://privatebin.dooplex.hu
icon: sh:privatebin
- title: Pastes (OpenGist)
url: https://paste.dooplex.hu
icon: sh:opengist
- title: Zipline
url: https://zipline.dooplex.hu
icon: sh:zipline
# ---------- CENTER COLUMN ----------
- size: full
widgets:
# Outline Notes iframe
- type: iframe
source: https://outline.dooplex.hu/collection/notes-VVby8kTDMn/recent
height: 500
title: Recent Notes
# ---------- RIGHT COLUMN ----------
- size: small
widgets:
# RSS Feeds - Add your favorite feeds here
- type: rss
title: News & Feeds
limit: 15
collapse-after: 8
feeds:
- url: https://telex.hu/rss
title: telex.hu
limit: 3
- url: https://444.hu/feed
title: 444.hu
limit: 3
- url: https://444.hu/feed
title: 444.hu
limit: 3
- url: https://hvg.hu/rss
title: hvg.hu
limit: 3
# ==================== MEDIA PAGE ====================
- name: Media
slug: media
width: wide
columns:
- size: small
widgets:
- type: bookmarks
title: Entertainment
groups:
- links:
- title: Plex
url: https://plex.dooplex.hu
icon: si:plex
- title: Immich (Photos)
url: https://photos.dooplex.hu
icon: si:immich
- title: AudioBookshelf
url: https://audiobookshelf.dooplex.hu
icon: si:audiobookshelf
- title: Calibre-Web (eBooks)
url: https://books.dooplex.hu
icon: si:calibreweb
- title: Arcade (Retro Games)
url: https://arcade.dooplex.hu
icon: si:retroarch
- type: bookmarks
title: Media Management
groups:
- links:
- title: Sonarr (TV Shows)
url: https://sonarr.dooplex.hu
icon: si:sonarr
- title: Radarr (Movies)
url: https://radarr.dooplex.hu
icon: si:radarr
- title: RadarrKids
url: https://radarrkids.dooplex.hu
icon: si:radarr
- title: Prowlarr (Indexers)
url: https://prowlarr.dooplex.hu
icon: sh:prowlarr
- title: Seerr (Requests)
url: https://seerr.dooplex.hu
icon: sh:overseerr
- size: full
widgets:
# YouTube Videos
- type: videos
title: YouTube
channels:
- UCir93b_ftqInEaDpsWYbo_g #Practical Psychology - @practicalpsychologytips
- UCEwsbtepqts935wXykReKxg #CounsellingTutor - @Counsellingtutor1
- UCUdettijNYvLAm4AixZv4RA #SciShow Psych - @SciShowPsych
- UClHVl2N3jPEbkNJVx-ItQIQ #HealthyGamerGG - @HealthyGamerGG
- UCAvfZQ3r24F-V1JYqn2pfXg #The Psychology Podcast - @ThePsychologyPodcast
- UC6Unpcb3T4QijIBs8hPfeyA #Psych Explained - @PsychExplained
- UCl8TEoIOnMq_5ntJOYMq-Zg #DrJulie - @DrJulie
limit: 12
collapse-after: 6
# Reddit
- type: group
title: Reddit
widgets:
- type: reddit
subreddit: hungary
show-thumbnails: true
- type: reddit
subreddit: selfhosted
show-thumbnails: true
- type: reddit
subreddit: homeserver
show-thumbnails: true
- type: reddit
subreddit: homelab
show-thumbnails: true
- type: reddit
subreddit: kubernetes
show-thumbnails: true
- type: reddit
subreddit: linux
show-thumbnails: true
- type: reddit
subreddit: sysadmin
show-thumbnails: true
- type: reddit
subreddit: technology
show-thumbnails: true
- type: reddit
subreddit: futurology
show-thumbnails: true
- size: small
widgets:
- type: bookmarks
title: Other Apps
groups:
- links:
- title: AdventureLog
url: https://adventures.dooplex.hu
icon: sh:adventurelog
- title: Wanderer
url: https://wanderer.dooplex.hu
icon: sh:wanderer
- title: Plant-it
url: https://plantit.dooplex.hu
icon: sh:plant-it
- title: Workout (wger)
url: https://workout.dooplex.hu
icon: sh:wger
- title: Fileshare
url: https://fileshare.dooplex.hu
icon: si:files
- title: Privatebin
url: https://privatebin.dooplex.hu
icon: sh:privatebin
- title: Pastes (OpenGist)
url: https://paste.dooplex.hu
icon: sh:opengist
- title: Zipline
url: https://zipline.dooplex.hu
icon: sh:zipline
# ==================== NECTCLOUD PAGE ====================
- name: NextCloud
slug: nextcloud
width: wide
columns:
- size: full
widgets:
# Nextcloud iframe
- type: iframe
css-class: iframe-no-tint
source: https://nextcloud.dooplex.hu/apps/files/files
height: 1200
title: NextCloud
custom.css: |
/* =========================================================================
WALLPAPER VISIBLE
========================================================================= */
html, body { height: 100%; }
html {
background: url("https://web.dooplex.hu/static/wallpaper-2.jpg") center / cover no-repeat fixed !important;
}
/* Glance containers that tend to paint over the wallpaper */
body,
.page,
#page-content,
.page-content,
.content-bounds,
.page-columns,
.page-column {
background: transparent !important;
}
/* Optional readability veil (Homepage-like) */
body::before {
content: "";
position: fixed;
inset: 0;
background: rgba(20, 10, 30, 0.25);
pointer-events: none;
z-index: 0;
}
body > * { position: relative; z-index: 1; }
/* =========================================================================
ROOT VARIABLES OVERRIDE
These override Glance's default theme colors at the CSS variable level
========================================================================= */
:root {
/* Primary color - affects many built-in elements */
--color-primary: hsl(190, 70%, 60%) !important;
/* These control various UI elements */
--color-text-highlight: #5ac8d8 !important;
--color-text-accent: #5ac8d8 !important;
}
/* =========================================================================
GLOBAL LINK COLORS
Affects all