No description
  • Python 68.8%
  • Shell 11%
  • TypeScript 10.8%
  • HCL 5.1%
  • HTML 1.8%
  • Other 2.5%
Find a file
renovate-bot 18dc76ab79
All checks were successful
Validate / Terraform format + validate (push) Successful in 1m23s
Validate / Kubernetes manifests (push) Successful in 1m36s
Validate / Ansible lint (push) Successful in 2m47s
Merge pull request 'chore(deps): update ghcr.io/linuxserver/transmission docker tag to v4.1.4' (#130) from renovate/torrent-clients into main
2026-10-30 06:04:31 +00:00
.forgejo/workflows Merge pull request 'chore(deps): update docker.io/postgres docker tag to v18' (#117) from renovate/docker.io-postgres-18.x into main 2026-10-25 21:00:07 +00:00
apps chore(deps): update all non-major updates 2026-10-26 00:17:35 +00:00
cloudflare/workers/email-ingest Add Cloudflare Email Worker and CoreDNS split-DNS script 2026-04-06 01:34:42 -07:00
coder-templates/node-workspace chore(deps): update all non-major updates 2026-06-05 00:03:52 +00:00
docs TODO: remaining upgrades after the 2026-10-25 maintenance 2026-10-25 16:53:21 -07:00
infrastructure chore(deps): update all non-major updates 2026-10-26 00:17:35 +00:00
kubernetes chore(deps): update ghcr.io/linuxserver/transmission docker tag to v4.1.4 2026-10-30 06:03:05 +00:00
scripts fix(remote-access): use http_client instead of deprecated download_detour 2026-10-08 19:17:11 -07:00
.gitignore
.kube-linter.yaml Comprehensive security, backup, observability, and CI hardening 2026-04-16 15:50:39 -07:00
.yamllint Comprehensive security, backup, observability, and CI hardening 2026-04-16 15:50:39 -07:00
CLAUDE.md CLAUDE.md: how to proxy a non-cluster service (ArgoCD skips EndpointSlices) 2026-10-25 18:37:49 -07:00
flake.lock Fix bootstrap issues and add sealed secrets 2026-03-05 09:38:16 -08:00
flake.nix remote-access: sing-box (Reality + Hysteria2) and RustDesk for China travel 2026-10-04 11:50:09 -07:00
README.md feat(remote-access): Slate 7 router tunnel + Headscale ACL + restricted exit user 2026-10-08 00:16:48 -07:00
renovate.json qbittorrent: pin back to 5.2.4 (AnimeBytes rejects 5.3.0) 2026-10-26 20:02:48 -07:00

Homelab

GitOps-driven Kubernetes homelab on a Dell R730 running Proxmox VE.

Stack

  • Proxmox VE — hypervisor
  • TrueNAS — storage (4x10TB WD Red Pro, IOMMU passthrough)
  • Talos Linux — immutable Kubernetes
  • ArgoCD — GitOps controller
  • Traefik — dual Kubernetes ingress (public + internal)
  • MetalLB — bare-metal load balancer
  • CloudNativePG — managed PostgreSQL
  • Headscale — self-hosted mesh VPN (Tailscale-compatible)

Services

Public (*.coldcat.net): Nextcloud, Immich, Forgejo, Conduit (Matrix), Stalwart (email), Prosody (XMPP), Excalidraw

Internal (*.internal.coldcat.net): Home Assistant, Obsidian LiveSync, ArgoCD, Grafana, Prometheus, Uptime Kuma

Media: Jellyfin, Sonarr, Radarr, Prowlarr, Bazarr, qBittorrent (VPN via Gluetun)

Quick Start

  1. Provision VMs: cd infrastructure/terraform && tofu apply
  2. Bootstrap Talos: talosctl gen config homelab https://10.10.10.20:6443
  3. Bootstrap cluster: ./scripts/bootstrap.sh
  4. ArgoCD syncs everything from kubernetes/apps/

Structure

infrastructure/     Terraform, Talos, Ansible
kubernetes/         K8s manifests (ArgoCD apps, base resources)
scripts/            Helper scripts
.forgejo/           CI workflows