From 6025894980e8f15d28316e500f9c1f57ea8d23b6 Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Sat, 10 Jan 2026 17:17:13 +0100 Subject: [PATCH] added glance --- argocd-apps/homelab.yaml | 22 ++ glance-system/glance.yaml | 613 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 635 insertions(+) create mode 100644 glance-system/glance.yaml diff --git a/argocd-apps/homelab.yaml b/argocd-apps/homelab.yaml index 2cd711a..e034776 100644 --- a/argocd-apps/homelab.yaml +++ b/argocd-apps/homelab.yaml @@ -921,4 +921,26 @@ spec: syncOptions: - CreateNamespace=true - PruneLast=true +--- +# Glance +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: glance + namespace: argocd + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: homelab + source: + repoURL: https://gitea.dooplex.hu/admin/homelab-manifests.git + targetRevision: main + path: glance-system + destination: + server: https://kubernetes.default.svc + namespace: glance-system + syncPolicy: + syncOptions: + - CreateNamespace=true + - PruneLast=true --- \ No newline at end of file diff --git a/glance-system/glance.yaml b/glance-system/glance.yaml new file mode 100644 index 0000000..c1b7bf6 --- /dev/null +++ b/glance-system/glance.yaml @@ -0,0 +1,613 @@ +# Glance Dashboard for Orsi +# Namespace: glance-system +# Domain: home.dooplex.hu +# Version: v0.8.4 +# +# Features: +# - Custom background image (purple theme matching Homepage) +# - 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://home.dooplex.hu +# 3. Create Outpost: glance-home-outpost +# 4. Update auth-url annotation with actual outpost service name +--- +apiVersion: v1 +kind: Namespace +metadata: + name: glance-system + labels: + app.kubernetes.io/name: glance + app.kubernetes.io/instance: glance-orsi +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: glance-config + namespace: glance-system + labels: + app.kubernetes.io/name: glance + app.kubernetes.io/instance: glance-orsi +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/assets + + branding: + logo-url: https://web.dooplex.hu/static/dooplex_logo_orsi_3.png + favicon-url: https://web.dooplex.hu/static/dooplex_favicon_orsi.png + app-name: "Orsi's Home" + app-icon-url: https://web.dooplex.hu/static/dooplex_favicon_orsi.png + app-background-color: "#2d1f3d" + hide-footer: true + + theme: + background-color: 280 30 15 + primary-color: 280 60 70 + positive-color: 120 50 50 + negative-color: 0 70 60 + contrast-multiplier: 1.2 + text-saturation-multiplier: 0.8 + custom-css-file: /app/assets/custom.css + + pages: + # ==================== HOME PAGE ==================== + - name: Home + slug: home + width: wide + columns: + # ---------- LEFT COLUMN ---------- + - size: small + widgets: + # 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:paperless-ngx + - title: Vaultwarden + url: https://vaultwarden.dooplex.hu + icon: si:bitwarden + - title: Actual Budget + url: https://actualbudget.dooplex.hu + icon: si:actual-budget + - title: Tandoor + url: https://tandoor.dooplex.hu + icon: si:tandoor-recipes + - title: Bookstack + url: https://bookstack.dooplex.hu + icon: si:bookstack + + # ---------- CENTER COLUMN ---------- + - size: full + widgets: + # Cal.com Booking iframe + - type: iframe + source: https://booking.dooplex.hu/bookings/upcoming + height: 350 + title: Upcoming Bookings + + # Google Calendar iframe + - type: iframe + source: https://calendar.google.com/calendar/embed?src=b2884faf3db792ac082a6206057552c79080716efd5f966e169a41fc500e1c1c%40group.calendar.google.com&ctz=Europe%2FBudapest + height: 400 + title: Calendar + + # Outline Notes iframe + - type: iframe + source: https://outline.dooplex.hu/collection/notes-VVby8kTDMn/recent + height: 500 + title: Recent Notes + + # ---------- RIGHT COLUMN ---------- + - size: small + widgets: + # YouTube Videos + - type: videos + title: YouTube + channels: + # Practical Psychology - @practicalpsychologytips + # Channel ID found via NoxInfluencer + - UCir93b_ftqInEaDpsWYbo_g + # Add more channels here: + # - UCxxxxxxxxxxxxxx # Channel Name + limit: 6 + collapse-after: 3 + + # RSS Feeds - Add your favorite feeds here + - type: rss + title: News & Feeds + limit: 10 + collapse-after: 5 + feeds: + - url: https://selfh.st/rss/ + title: selfh.st + limit: 3 + - url: https://www.reddit.com/r/selfhosted/.rss + title: r/selfhosted + limit: 3 + + # Quick Links - Entertainment + - type: bookmarks + title: Entertainment + groups: + - title: "" + links: + - title: Plex + url: https://plex.dooplex.hu + icon: si:plex + - title: Immich + url: https://photos.dooplex.hu + icon: si:immich + - title: AudioBookshelf + url: https://audiobookshelf.dooplex.hu + icon: si:audiobookshelf + - title: Calibre-Web + url: https://books.dooplex.hu + icon: si:calibre-web + - title: Arcade + url: https://arcade.dooplex.hu + icon: si:retroarch + + # Quick Links - Media Management + - type: bookmarks + title: Media Management + groups: + - title: "" + links: + - title: Sonarr + url: https://sonarr.dooplex.hu + icon: si:sonarr + - title: Radarr + url: https://radarr.dooplex.hu + icon: si:radarr + - title: Seerr + url: https://seerr.dooplex.hu + icon: si:overseerr + - title: Prowlarr + url: https://prowlarr.dooplex.hu + icon: si:prowlarr + + # ==================== APPLICATIONS PAGE ==================== + - name: Applications + slug: apps + 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:calibre-web + - 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: si:prowlarr + - title: Seerr (Requests) + url: https://seerr.dooplex.hu + icon: si:overseerr + + - size: small + widgets: + - type: bookmarks + title: Productivity + groups: + - 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:paperless-ngx + - title: Bookstack + url: https://bookstack.dooplex.hu + icon: si:bookstack + - title: Actual Budget + url: https://actualbudget.dooplex.hu + icon: si:actual-budget + - title: Tandoor Recipes + url: https://tandoor.dooplex.hu + icon: si:tandoor-recipes + - title: Vaultwarden + url: https://vaultwarden.dooplex.hu + icon: si:bitwarden + + - size: small + widgets: + - type: bookmarks + title: Other Apps + groups: + - links: + - title: AdventureLog + url: https://adventures.dooplex.hu + icon: si:openstreetmap + - title: Wanderer + url: https://wanderer.dooplex.hu + icon: si:openstreetmap + - title: Plant-it + url: https://plantit.dooplex.hu + icon: si:leaflet + - title: Workout (wger) + url: https://workout.dooplex.hu + icon: si:fitbit + - title: Fileshare + url: https://fileshare.dooplex.hu + icon: si:files + - title: Privatebin + url: https://privatebin.dooplex.hu + icon: si:privatebin + - title: Pastes (OpenGist) + url: https://paste.dooplex.hu + icon: si:github-gist + - title: Zipline + url: https://zipline.dooplex.hu + icon: si:imgur + + custom.css: | + /* Custom CSS for Orsi's Glance Dashboard */ + /* Purple theme with background image matching Homepage */ + + /* Background image */ + body { + background-image: url('https://web.dooplex.hu/static/wallpaper-orsi.jpg') !important; + background-size: cover !important; + background-attachment: fixed !important; + background-position: center !important; + background-repeat: no-repeat !important; + } + + /* Semi-transparent widgets to show background */ + .widget { + background-color: rgba(45, 31, 61, 0.85) !important; + backdrop-filter: blur(12px) !important; + -webkit-backdrop-filter: blur(12px) !important; + border-radius: 12px !important; + border: 1px solid rgba(255, 255, 255, 0.1) !important; + } + + /* Widget content area */ + .widget-content { + background-color: transparent !important; + } + + /* Page header styling */ + .page-header { + background-color: rgba(45, 31, 61, 0.7) !important; + backdrop-filter: blur(10px) !important; + -webkit-backdrop-filter: blur(10px) !important; + } + + /* Navigation styling */ + .nav, .navigation { + background-color: rgba(45, 31, 61, 0.8) !important; + backdrop-filter: blur(10px) !important; + } + + /* Column containers */ + .page-column, .page-columns { + background-color: transparent !important; + } + + /* Links styling - purple accent */ + a { + color: #e292ff !important; + } + + a:hover { + color: #f0b8ff !important; + } + + /* Bookmark items */ + .bookmark-link { + background-color: rgba(60, 40, 80, 0.6) !important; + border-radius: 8px !important; + transition: background-color 0.2s ease !important; + } + + .bookmark-link:hover { + background-color: rgba(80, 50, 110, 0.8) !important; + } + + /* Calendar widget styling */ + .widget-type-calendar { + background-color: rgba(45, 31, 61, 0.9) !important; + } + + /* Weather widget */ + .widget-type-weather { + background-color: rgba(45, 31, 61, 0.9) !important; + } + + /* To-do widget */ + .widget-type-to-do { + background-color: rgba(45, 31, 61, 0.9) !important; + } + + /* iFrame containers - add purple tint overlay effect */ + .widget-type-iframe { + position: relative; + } + + .widget-type-iframe iframe { + border-radius: 8px !important; + filter: sepia(0.15) saturate(2.5) hue-rotate(250deg) brightness(1.02) !important; + } + + /* RSS feed items */ + .rss-item, .feed-item { + background-color: rgba(60, 40, 80, 0.5) !important; + border-radius: 6px !important; + margin-bottom: 4px !important; + } + + /* Video thumbnails */ + .video-item, .videos-item { + background-color: rgba(60, 40, 80, 0.5) !important; + border-radius: 8px !important; + } + + /* Widget titles */ + .widget-header, .widget-title { + color: #e292ff !important; + font-weight: 600 !important; + } + + /* Logo in header - make it larger */ + .header-logo img, .logo img, .branding-logo img { + max-height: 120px !important; + height: auto !important; + } + + /* Scrollbar styling */ + ::-webkit-scrollbar { + width: 8px; + } + + ::-webkit-scrollbar-track { + background: rgba(45, 31, 61, 0.5); + } + + ::-webkit-scrollbar-thumb { + background: rgba(226, 146, 255, 0.5); + border-radius: 4px; + } + + ::-webkit-scrollbar-thumb:hover { + background: rgba(226, 146, 255, 0.7); + } +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: glance + namespace: glance-system + labels: + app.kubernetes.io/name: glance + app.kubernetes.io/instance: glance-orsi + app.kubernetes.io/version: "v0.8.4" + annotations: + reloader.stakater.com/auto: "true" +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: glance + app.kubernetes.io/instance: glance-orsi + template: + metadata: + labels: + app.kubernetes.io/name: glance + app.kubernetes.io/instance: glance-orsi + app.kubernetes.io/version: "v0.8.4" + spec: + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + containers: + - name: glance + image: glanceapp/glance:v0.8.4 + imagePullPolicy: IfNotPresent + env: + - name: TZ + value: "Europe/Budapest" + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 10 + periodSeconds: 30 + timeoutSeconds: 5 + failureThreshold: 3 + readinessProbe: + httpGet: + path: / + port: http + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 3 + resources: + requests: + cpu: 10m + memory: 32Mi + limits: + cpu: 200m + memory: 128Mi + volumeMounts: + - name: config + mountPath: /app/glance.yml + subPath: glance.yml + - name: config + mountPath: /app/assets/custom.css + subPath: custom.css + volumes: + - name: config + configMap: + name: glance-config +--- +apiVersion: v1 +kind: Service +metadata: + name: glance + namespace: glance-system + labels: + app.kubernetes.io/name: glance + app.kubernetes.io/instance: glance-orsi +spec: + type: ClusterIP + ports: + - name: http + port: 8080 + targetPort: http + protocol: TCP + selector: + app.kubernetes.io/name: glance + app.kubernetes.io/instance: glance-orsi +--- +# Ingress WITH Authentik proxy authentication +# Update the auth-url annotation with your actual outpost service name after creating in Authentik +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: glance + namespace: glance-system + labels: + app.kubernetes.io/name: glance + app.kubernetes.io/instance: glance-orsi + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod + external-dns.alpha.kubernetes.io/hostname: home.dooplex.hu + nginx.ingress.kubernetes.io/ssl-redirect: "true" + nginx.ingress.kubernetes.io/proxy-buffer-size: "16k" + nginx.ingress.kubernetes.io/proxy-buffers-number: "4" + nginx.ingress.kubernetes.io/proxy-busy-buffers-size: "32k" + # Authentik Forward Auth annotations + # TODO: Update 'glance-home-outpost' with your actual outpost name after creating in Authentik + nginx.ingress.kubernetes.io/auth-url: http://ak-outpost-glance-home-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx + nginx.ingress.kubernetes.io/auth-signin: https://home.dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri + nginx.ingress.kubernetes.io/auth-response-headers: Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email + nginx.ingress.kubernetes.io/auth-snippet: | + proxy_set_header X-Forwarded-Host $http_host; +spec: + ingressClassName: nginx-internal + rules: + - host: home.dooplex.hu + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: glance + port: + number: 8080 + tls: + - hosts: + - home.dooplex.hu + secretName: glance-tls +--- +# Alternative Ingress WITHOUT Authentik (for testing) +# Uncomment this and comment out the above ingress if you want to test without auth first +# apiVersion: networking.k8s.io/v1 +# kind: Ingress +# metadata: +# name: glance-noauth +# namespace: glance-system +# labels: +# app.kubernetes.io/name: glance +# app.kubernetes.io/instance: glance-orsi +# annotations: +# cert-manager.io/cluster-issuer: letsencrypt-prod +# external-dns.alpha.kubernetes.io/hostname: home.dooplex.hu +# nginx.ingress.kubernetes.io/ssl-redirect: "true" +# spec: +# ingressClassName: nginx-internal +# rules: +# - host: home.dooplex.hu +# http: +# paths: +# - path: / +# pathType: Prefix +# backend: +# service: +# name: glance +# port: +# number: 8080 +# tls: +# - hosts: +# - home.dooplex.hu +# secretName: glance-tls \ No newline at end of file