Initial commit: Glance and Homepage homelab configs

Made-with: Cursor
This commit is contained in:
2026-04-29 21:17:53 -04:00
commit f52b4ae2b4
8 changed files with 720 additions and 0 deletions
+449
View File
@@ -0,0 +1,449 @@
# ------------------------------------------------------------------
# Glance config — tuned for Konrad
# Drop this in place of your existing glance.yml and restart the
# container in Coolify. Most widgets work as-is; a few near the top
# of the TODO list are flagged with `# TODO` comments.
# ------------------------------------------------------------------
theme:
# Gruvbox-ish dark, earth-toned. Tweak primary for accent.
background-color: 30 6 14 # ~#1d2021
primary-color: 41 99 64 # ~#fabd2f (gruvbox yellow)
positive-color: 61 66 44 # green
negative-color: 6 96 59 # red
contrast-multiplier: 1.1
# Optional — set this if you proxy Glance behind a subpath.
# server:
# base-url: /
pages:
# ================================================================
# HOME — what you want to see first thing in the morning
# ================================================================
- name: Home
columns:
# --- LEFT: personal / ambient -------------------------------
- size: small
widgets:
- type: calendar
first-day-of-week: monday
- type: weather
location: Brooklyn, New York, United States
units: imperial
hour-format: 12h
- type: bookmarks
title: Homelab & tools
groups:
- title: Self-hosted
links:
- title: Nextcloud
url: https://cloud.klhoud.com
- title: AdGuard
url: https://adguard.klhoud.com
- title: Proxmox
url: https://proxmox.klhoud.com
- title: Coolify
url: https://coolify.klhoud.com
- title: Work
color: 210 70 60
links:
- title: Sequentum
url: https://sequentum.com
- title: Sequentum MCP
url: https://mcp.sequentum.com
- title: Projects
color: 140 60 55
links:
- title: Cardless
url: https://cardless.games
- title: Selfworth
url: https://selfworth.klhoud.com
# --- CENTER: firehose ---------------------------------------
- size: full
widgets:
- type: group
widgets:
- type: hacker-news
limit: 15
collapse-after: 5
- type: lobsters
limit: 15
collapse-after: 5
sort-by: hot
- type: rss
title: Design & engineering
limit: 20
collapse-after: 6
cache: 3h
feeds:
# Visual / design-engineering
- url: https://ciechanow.ski/atom.xml
title: Bartosz Ciechanowski
- url: https://www.joshwcomeau.com/rss.xml
title: Josh Comeau
- url: https://ishadeed.com/feed.xml
title: Ahmad Shadeed
- url: https://samwho.dev/rss.xml
title: Sam Who
- url: https://vercel.com/atom
title: Vercel
- url: https://rauchg.com/rss
title: Rauch
# Writing on craft / systems thinking
- url: https://simonwillison.net/atom/everything/
title: Simon Willison
- url: https://www.joelonsoftware.com/feed/
title: Joel on Software
- url: https://overreacted.io/rss.xml
title: Overreacted
- url: https://maggieappleton.com/rss.xml
title: Maggie Appleton
# Self-hosted / infra
- url: https://selfh.st/rss/
title: selfh.st
limit: 5
- type: videos
style: grid-cards
limit: 9
channels:
- UCsBjURrPoezykLs9EqgamOA # Fireship
- UCR-DXc1voovS8nhAvccRZhg # Jeff Geerling
- UC9-y-6csu5WGm29I7JiwpnA # Computerphile
- UCmnrOF7tX0_wleKK30gxgGA # NixOS-adjacent (The Linux Cast) — swap freely
- UCSwduBoe3O42WKGPR4YnVHw # CodeAesthetic
# --- RIGHT: status + releases -------------------------------
- size: small
widgets:
- type: releases
title: Stack releases
cache: 6h
token: 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
repositories:
- sveltejs/kit
- sveltejs/svelte
- tailwindlabs/tailwindcss
- oven-sh/bun
- drizzle-team/drizzle-orm
- rust-lang/rust
- ziglang/zig
- golang/go
- coollabsio/coolify
- AdguardTeam/AdGuardHome
- nextcloud/server
- traefik/traefik
- tailscale/tailscale
- glanceapp/glance
- type: monitor
cache: 1m
title: Services
sites:
- title: Sequentum
url: https://sequentum.com
icon: si:sequentum # falls back gracefully if not found
- title: Nextcloud
url: https://cloud.klhoud.com
- title: AdGuard
url: https://adguard.klhoud.com
- title: Proxmox
url: https://proxmox.klhoud.com
- title: Coolify
url: https://coolify.klhoud.com
- title: Cardless
url: https://cardless.games
- title: Selfworth
url: https://selfworth.klhoud.com
# ================================================================
# DEV — deeper programming / self-hosted feed
# ================================================================
- name: Dev
columns:
- size: full
widgets:
- type: rss
title: Systems / deep dives
limit: 20
collapse-after: 6
cache: 6h
feeds:
- url: https://without.boats/index.xml
title: without.boats
- url: https://fasterthanli.me/index.xml
title: fasterthanli.me
- url: https://matklad.github.io/feed.xml
title: matklad
- url: https://blog.cloudflare.com/rss/
title: Cloudflare
- url: https://tonsky.me/blog/atom.xml
title: Nikita Prokopov
- url: https://drewdevault.com/blog/index.xml
title: Drew DeVault
- url: https://lwn.net/headlines/rss
title: LWN
- url: https://www.phoronix.com/rss.php
title: Phoronix
- url: https://changelog.com/posts/feed
title: Changelog
- size: small
widgets:
- type: repository
repository: glanceapp/glance
pull-requests-limit: 3
issues-limit: 3
commits-limit: 3
# Your own repos — swap in the real slugs
# - type: repository
# repository: konrad/cardless # TODO
# - type: repository
# repository: konrad/selfworth # TODO
- type: releases
title: Infra releases
cache: 1d
token: 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
repositories:
- hyprwm/Hyprland
- NixOS/nixpkgs
- caddyserver/caddy
- louislam/uptime-kuma
- immich-app/immich
- gethomepage/homepage
- netbirdio/netbird
- syncthing/syncthing
- dockge/dockge
# ================================================================
# CULTURE — cinema, comics, fashion, books, cooking
# ================================================================
- name: Culture
columns:
- size: small
widgets:
- type: rss
title: Cinema
limit: 15
collapse-after: 5
cache: 12h
feeds:
- url: https://mubi.com/notebook.rss
title: MUBI Notebook
- url: https://www.filmcomment.com/feed/
title: Film Comment
- url: https://www.criterion.com/feeds/current
title: Criterion — Current
- url: https://www.criterion.com/feeds/the-daily
title: Criterion Daily
- url: https://reverseshot.org/rss.xml
title: Reverse Shot
- url: https://letterboxd.com/konrad/rss/ # TODO — replace with your handle
title: My Letterboxd
- url: https://letterboxd.com/journal/rss/
title: Letterboxd Journal
- type: rss
title: Kitchen
limit: 10
collapse-after: 4
cache: 12h
feeds:
- url: https://www.seriouseats.com/feed
title: Serious Eats
- url: https://www.theperfectloaf.com/feed/
title: The Perfect Loaf
- url: https://www.kingarthurbaking.com/blog/feed
title: King Arthur
- url: https://www.bonappetit.com/feed/rss
title: Bon Appétit
- url: https://food52.com/blog/feed
title: Food52
- size: full
widgets:
- type: rss
title: Design, comics, visual culture
style: horizontal-cards
limit: 15
cache: 6h
feeds:
- url: https://www.itsnicethat.com/feed
title: It's Nice That
- url: https://www.are.na/feed.rss
title: Are.na Editorial
- url: https://www.bldgblog.com/feed/
title: BLDGBLOG
- url: https://aestheticsofjoy.com/feed/
title: Aesthetics of Joy
- url: https://www.tcj.com/feed/
title: The Comics Journal
- url: https://www.2000ad.com/news/rss/
title: 2000 AD
- url: https://www.smokeshop.tokyo/rss # swap for any JP fashion zine you like
title: Smoke Shop Tokyo
- type: rss
title: Essays & letters
limit: 12
collapse-after: 4
cache: 12h
feeds:
- url: https://www.lrb.co.uk/feeds/rss
title: LRB
- url: https://www.nybooks.com/feed/
title: NYRB
- url: https://harpers.org/feed/
title: Harper's
- url: https://www.theparisreview.org/blog/feed/
title: Paris Review
- url: https://lithub.com/feed/
title: Lit Hub
- url: https://aeon.co/feed.rss
title: Aeon
- size: small
widgets:
- type: rss
title: Fashion / fabric
limit: 12
collapse-after: 5
cache: 12h
feeds:
- url: https://stylezeitgeist.com/feed/
title: StyleZeitgeist
- url: https://hypebeast.com/feed
title: Hypebeast
- url: https://www.ssense.com/en-us/editorial.rss
title: SSENSE Editorial
- url: https://www.highsnobiety.com/feed/
title: Highsnobiety
- url: https://www.thefashionisto.com/feed/
title: The Fashionisto
- type: rss
title: Physics / math (for the bus)
limit: 10
collapse-after: 4
cache: 1d
feeds:
- url: https://www.quantamagazine.org/feed/
title: Quanta
- url: https://plus.maths.org/content/feed
title: Plus Magazine
- url: https://terrytao.wordpress.com/feed/
title: Terence Tao
- url: https://www.math3ma.com/blog?format=rss
title: math3ma
# ================================================================
# NYC — Citi Bike, transit, local
# ================================================================
- name: NYC
columns:
- size: full
widgets:
# Citi Bike — shows live availability for stations you name below.
# Open https://account.citibikenyc.com/map, find a station you care about,
# copy its exact name (e.g. "Clinton St & Joralemon St"), and add an
# (eq $name "...") clause inside the `or` block.
- type: custom-api
title: Citi Bike — nearby
cache: 2m
url: https://gbfs.citibikenyc.com/gbfs/en/station_status.json
subrequests:
info:
url: https://gbfs.citibikenyc.com/gbfs/en/station_information.json
template: |
{{ $info := .Subrequest "info" }}
<ul class="list list-gap-10 list-with-transition">
{{ range $info.JSON.Array "data.stations" }}
{{ $name := .String "name" }}
{{ $id := .String "station_id" }}
{{ if or
(eq $name "Clinton St & Joralemon St")
(eq $name "Atlantic Ave & Fort Greene Pl")
(eq $name "Bedford Ave & S 9 St")
}}
{{ $targetId := $id }}
{{ $targetName := $name }}
{{ range $.JSON.Array "data.stations" }}
{{ if eq (.String "station_id") $targetId }}
<li class="flex justify-between items-center">
<span class="color-highlight">{{ $targetName }}</span>
<span>
🚲 {{ .Int "num_bikes_available" }}
⚡ {{ .Int "num_ebikes_available" }}
🅿️ {{ .Int "num_docks_available" }}
</span>
</li>
{{ end }}
{{ end }}
{{ end }}
{{ end }}
</ul>
- type: rss
title: NYC — news, events, culture
limit: 20
collapse-after: 6
cache: 3h
feeds:
- url: https://hellgatenyc.com/rss/
title: Hellgate
- url: https://www.thecity.nyc/feed/
title: THE CITY
- url: https://gothamist.com/feed
title: Gothamist
- url: https://www.curbed.com/rss/index.xml
title: Curbed
- url: https://ny.eater.com/rss/index.xml
title: Eater NY
- url: https://www.brooklynvegan.com/feed/
title: Brooklyn Vegan
- url: https://www.metrograph.com/feed/
title: Metrograph
- url: https://www.filmlinc.org/feed/
title: Film at Lincoln Center
- url: https://www.filmforum.org/feed/
title: Film Forum
- size: small
widgets:
- type: weather
location: Brooklyn, New York, United States
units: imperial
hour-format: 12h
- type: bookmarks
title: Quick links
groups:
- title: Commute
links:
- title: Citi Bike map
url: https://account.citibikenyc.com/map
- title: Bike Angels
url: https://citibikenyc.com/bike-angels
- title: MTA status
url: https://new.mta.info/status
- title: Google Maps — Home
url: https://maps.google.com/
- title: Neighborhood
links:
- title: NYT Cooking
url: https://cooking.nytimes.com/
- title: Metrograph
url: https://metrograph.com/
- title: Film Forum
url: https://filmforum.org/
- title: IFC Center
url: https://www.ifccenter.com/
- title: Anthology Film Archives
url: https://anthologyfilmarchives.org/
+68
View File
@@ -0,0 +1,68 @@
# Homepage config
Config for [gethomepage.dev](https://gethomepage.dev/) — an alternative/companion
to the `glance.yml` in the parent folder. Same services, different dashboard style.
All self-hosted services live under `*.klhoud.com`.
## Files
| File | Purpose |
| ------------------- | -------------------------------------------------------------------- |
| `settings.yaml` | Title, theme, layout order, providers |
| `services.yaml` | Service cards (Homelab / Work / Projects) + widgets where supported |
| `bookmarks.yaml` | Quick-link groups |
| `widgets.yaml` | Info widgets (resources, search, weather, datetime, greeting) |
| `docker.yaml` | Docker host definitions (commented out — fill in if/when you wire it)|
| `kubernetes.yaml` | Disabled placeholder |
## Environment variables
`services.yaml` references these via `{{HOMEPAGE_VAR_*}}`. Set them on the
Homepage container (Coolify → Environment Variables). Any that are omitted just
make that widget show an error — the service card itself still renders.
```
HOMEPAGE_VAR_NEXTCLOUD_USER
HOMEPAGE_VAR_NEXTCLOUD_PASS # Nextcloud app password, NOT your login password
HOMEPAGE_VAR_ADGUARD_USER
HOMEPAGE_VAR_ADGUARD_PASS
HOMEPAGE_VAR_PROXMOX_USER # e.g. api@pam!homepage
HOMEPAGE_VAR_PROXMOX_TOKEN
```
Also required so Homepage allows iframed/proxied requests from your domain:
```
HOMEPAGE_ALLOWED_HOSTS=homepage.klhoud.com
```
## Docker / Coolify deploy
Mount this folder at `/app/config`:
```yaml
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
ports:
- 3000:3000
volumes:
- ./homepage:/app/config
# - /var/run/docker.sock:/var/run/docker.sock:ro # optional
environment:
HOMEPAGE_ALLOWED_HOSTS: homepage.klhoud.com
HOMEPAGE_VAR_NEXTCLOUD_USER: ${HOMEPAGE_VAR_NEXTCLOUD_USER}
HOMEPAGE_VAR_NEXTCLOUD_PASS: ${HOMEPAGE_VAR_NEXTCLOUD_PASS}
HOMEPAGE_VAR_ADGUARD_USER: ${HOMEPAGE_VAR_ADGUARD_USER}
HOMEPAGE_VAR_ADGUARD_PASS: ${HOMEPAGE_VAR_ADGUARD_PASS}
HOMEPAGE_VAR_PROXMOX_USER: ${HOMEPAGE_VAR_PROXMOX_USER}
HOMEPAGE_VAR_PROXMOX_TOKEN: ${HOMEPAGE_VAR_PROXMOX_TOKEN}
restart: unless-stopped
```
## Heads-up
Your `glance.yml` (parent folder, lines 127 & 213) contains a committed GitHub
PAT. Rotate it and move it to an env var before pushing anywhere public.
+61
View File
@@ -0,0 +1,61 @@
---
# https://gethomepage.dev/configs/bookmarks/
- Developer:
- GitHub:
- abbr: GH
href: https://github.com
- Svelte Kit:
- abbr: SK
href: https://kit.svelte.dev
- Tailwind:
- abbr: TW
href: https://tailwindcss.com
- Bun:
- abbr: BN
href: https://bun.sh
- Commute:
- Citi Bike map:
- abbr: CB
href: https://account.citibikenyc.com/map
- MTA status:
- abbr: MT
href: https://new.mta.info/status
- Google Maps:
- abbr: GM
href: https://maps.google.com
- Neighborhood:
- NYT Cooking:
- abbr: NY
href: https://cooking.nytimes.com
- Metrograph:
- abbr: MG
href: https://metrograph.com
- Film Forum:
- abbr: FF
href: https://filmforum.org
- IFC Center:
- abbr: IF
href: https://www.ifccenter.com
- Anthology:
- abbr: AF
href: https://anthologyfilmarchives.org
- Reading:
- Hellgate:
- abbr: HG
href: https://hellgatenyc.com
- THE CITY:
- abbr: TC
href: https://www.thecity.nyc
- Gothamist:
- abbr: GO
href: https://gothamist.com
- Hacker News:
- abbr: HN
href: https://news.ycombinator.com
- Lobsters:
- abbr: LO
href: https://lobste.rs
+10
View File
@@ -0,0 +1,10 @@
---
# https://gethomepage.dev/configs/docker/
# Fill these in if you want per-container stats on service cards.
# Remove this file (or leave empty) if you don't want Docker integration.
# my-coolify-host:
# host: 127.0.0.1
# port: 2375
# my-proxmox-host:
# socket: /var/run/docker.sock
+6
View File
@@ -0,0 +1,6 @@
---
# https://gethomepage.dev/configs/kubernetes/
# Not used — you're on Proxmox + Coolify. Kept here so Homepage doesn't warn
# about a missing config. Leave mode as "disabled" to skip cluster discovery.
mode: disabled
+57
View File
@@ -0,0 +1,57 @@
---
# https://gethomepage.dev/configs/services/
# Widget docs per service: https://gethomepage.dev/widgets/
- Homelab:
- Nextcloud:
href: https://cloud.klhoud.com
description: Files, calendar, contacts
icon: nextcloud.svg
siteMonitor: https://cloud.klhoud.com
widget:
type: nextcloud
url: https://cloud.klhoud.com
username: "{{HOMEPAGE_VAR_NEXTCLOUD_USER}}"
password: "{{HOMEPAGE_VAR_NEXTCLOUD_PASS}}"
- AdGuard Home:
href: https://adguard.klhoud.com
description: Network-wide DNS blocking
icon: adguard-home.svg
siteMonitor: https://adguard.klhoud.com
widget:
type: adguard
url: https://adguard.klhoud.com
username: "{{HOMEPAGE_VAR_ADGUARD_USER}}"
password: "{{HOMEPAGE_VAR_ADGUARD_PASS}}"
- Proxmox:
href: https://proxmox.klhoud.com
description: Hypervisor
icon: proxmox.svg
siteMonitor: https://proxmox.klhoud.com
widget:
type: proxmox
url: https://proxmox.klhoud.com
username: "{{HOMEPAGE_VAR_PROXMOX_USER}}" # e.g. api@pam!homepage
password: "{{HOMEPAGE_VAR_PROXMOX_TOKEN}}"
node: pve
- Coolify:
href: https://coolify.klhoud.com
description: Self-hosted PaaS
icon: coolify.svg
siteMonitor: https://coolify.klhoud.com
- Projects:
- Cardless:
href: https://cardless.games
description: Card game project
icon: mdi-cards-playing
siteMonitor: https://cardless.games
- Selfworth:
href: https://selfworth.klhoud.com
description: Personal project
icon: mdi-chart-line
siteMonitor: https://selfworth.klhoud.com
+41
View File
@@ -0,0 +1,41 @@
---
# https://gethomepage.dev/configs/settings/
title: Konrad's Homelab
favicon: https://cloud.klhoud.com/favicon.ico
# Gruvbox-ish, matching your Glance theme
theme: dark
color: stone
background:
opacity: 80
blur: sm
headerStyle: clean
language: en
target: _blank
# Layout: column order on the dashboard
layout:
Homelab:
style: row
columns: 4
icon: mdi-server-network
Work:
style: row
columns: 2
icon: mdi-briefcase
Projects:
style: row
columns: 2
icon: mdi-rocket-launch
# Quick links shown in the top-right of the header
quicklaunch:
searchDescriptions: true
hideInternetSearch: false
showSearchSuggestions: true
hideVisitURL: false
providers:
openweathermap: openweathermapapikey
# openmeteo needs no key
+28
View File
@@ -0,0 +1,28 @@
---
# https://gethomepage.dev/widgets/info/
# Info widgets render across the top of the dashboard.
- resources:
label: system
cpu: true
memory: true
disk: /
- search:
provider: duckduckgo
target: _blank
- openmeteo:
label: Brooklyn
latitude: 40.6782
longitude: -73.9442
timezone: America/New_York
units: imperial
cache: 5
- datetime:
text_size: xl
format:
timeStyle: short
dateStyle: short
hourCycle: h12