Skip to content
Projects

oscaromeu/home-ops has 34 GitHub stars and 3 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-14 19:56 UTC. Last push 2026-11-13.

How these counts are measured

Measured star growth

in 24h
0
in 7 days
Collecting history
in 15 days
Collecting history
in 1 month
Collecting history

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

About

A mono repository for my homelab infrastructure and Kubernetes cluster which adheres to Infrastructure as Code (IaC) and GitOps practices where possible

Self-hosted

README.md

Original

🏠 Home Lab

💡 Overview

This mono repository houses the infrastructure for my homelab. I try to adhere to Infrastructure as Code (IaC) and GitOps practices using tools like Ansible, Terraform, Kubernetes, Flux, Renovate and GitHub Actions.

📦 Layout

📁 bootstrap       # One-time cluster bootstrap (helmfile + kustomize)
📁 kubernetes      # Everything Flux reconciles
├─📁 apps          # The catalogue, grouped by namespace
└─📁 clusters      # One directory per cluster
  └─📁 home
    ├─📁 entrypoint  # The FluxInstance and the root Kustomization
    ├─📁 apps        # What this cluster runs: <namespace>/<app>/ks.yaml
    └─📁 config      # The values this cluster supplies to the catalogue
      ├─📁 namespaces # The Namespaces this cluster creates
      └─📁 secrets   # SOPS, only what is needed before the secret store is up
📁 talos           # Talos machine configs and per-node overrides
📁 terraform       # Providers that live outside the cluster

⚙️ GitOps workflow

A cluster declares what it runs in clusters/<name>/apps, one Flux Kustomization per app, and apps/ stays a catalogue that knows nothing about which cluster consumes it.

  1. The FluxInstance syncs clusters/home/entrypoint, where the root Flux Kustomization lives.
  2. That applies the rest of clusters/home — the Namespaces and SOPS secrets under config/ and the per-app Kustomizations under apps/.
  3. A Kustomize patch in the cluster root injects the shared defaults (interval, prune, SOPS, substitutions, HelmRelease policy) into every one of them, so each ks.yaml only states name, path and its real deviations.
  4. Each of those applies apps/<namespace>/<app>, waiting on whatever its dependsOn names.
GitOps workflow

⏳ Changelog

See my awful commit main history and legacy history

🤝 Gratitude and thanks

Thanks all the people of Home Operations Discord community who put a lot of effort and donate their time to the community.

⚖️ License

See LICENSE v.g WTF License