From f52b4ae2b45c3786b720a11dffae411344777c8b Mon Sep 17 00:00:00 2001 From: Konrad Date: Wed, 29 Apr 2026 21:17:53 -0400 Subject: [PATCH] Initial commit: Glance and Homepage homelab configs Made-with: Cursor --- glance.yml | 449 +++++++++++++++++++++++++++++++++++++++ homepage/README.md | 68 ++++++ homepage/bookmarks.yaml | 61 ++++++ homepage/docker.yaml | 10 + homepage/kubernetes.yaml | 6 + homepage/services.yaml | 57 +++++ homepage/settings.yaml | 41 ++++ homepage/widgets.yaml | 28 +++ 8 files changed, 720 insertions(+) create mode 100644 glance.yml create mode 100644 homepage/README.md create mode 100644 homepage/bookmarks.yaml create mode 100644 homepage/docker.yaml create mode 100644 homepage/kubernetes.yaml create mode 100644 homepage/services.yaml create mode 100644 homepage/settings.yaml create mode 100644 homepage/widgets.yaml diff --git a/glance.yml b/glance.yml new file mode 100644 index 0000000..65b5d3f --- /dev/null +++ b/glance.yml @@ -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" }} + + + - 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/ diff --git a/homepage/README.md b/homepage/README.md new file mode 100644 index 0000000..831e330 --- /dev/null +++ b/homepage/README.md @@ -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. diff --git a/homepage/bookmarks.yaml b/homepage/bookmarks.yaml new file mode 100644 index 0000000..d719428 --- /dev/null +++ b/homepage/bookmarks.yaml @@ -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 diff --git a/homepage/docker.yaml b/homepage/docker.yaml new file mode 100644 index 0000000..706fc30 --- /dev/null +++ b/homepage/docker.yaml @@ -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 diff --git a/homepage/kubernetes.yaml b/homepage/kubernetes.yaml new file mode 100644 index 0000000..dc045df --- /dev/null +++ b/homepage/kubernetes.yaml @@ -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 diff --git a/homepage/services.yaml b/homepage/services.yaml new file mode 100644 index 0000000..0ff4492 --- /dev/null +++ b/homepage/services.yaml @@ -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 diff --git a/homepage/settings.yaml b/homepage/settings.yaml new file mode 100644 index 0000000..a9cc64b --- /dev/null +++ b/homepage/settings.yaml @@ -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 diff --git a/homepage/widgets.yaml b/homepage/widgets.yaml new file mode 100644 index 0000000..ce7932d --- /dev/null +++ b/homepage/widgets.yaml @@ -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 \ No newline at end of file