Repository for setting up my homelab
  • Nix 84.4%
  • TypeScript 11.8%
  • Just 3.8%
Find a file
Sangmin Kim e003f7fa0a
Some checks failed
Deploy / switch alfheim (push) Has been cancelled
Deploy / switch midgard (push) Has been cancelled
Deploy / switch yggdrasil (push) Has been cancelled
flake: update jamye-plz input to c7537fb78015 (#83)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-17 05:26:45 +00:00
.agents Show open PR number in statusline HUD 2026-06-12 17:25:08 +09:00
.claude chore: format claude and codex config files 2026-07-28 22:24:35 +09:00
.codex chore: format claude and codex config files 2026-07-28 22:24:35 +09:00
.github/workflows feat(jamye-server): deploy service stack to midgard (#75) 2026-09-08 09:05:19 +09:00
docs chore(yggdrasil): remove AdGuard Home (#79) 2026-09-09 20:06:34 +09:00
home/poby [codex] add hermes-agent local bin path 2026-06-22 22:15:56 +09:00
hosts chore(yggdrasil): remove AdGuard Home (#79) 2026-09-09 20:06:34 +09:00
modules Add GitHub Actions CI/CD for homelab deploys 2026-06-16 22:37:06 +09:00
secrets feat(jamye-server): enable kakao and google oauth (#77) 2026-09-08 23:08:47 +09:00
services chore(yggdrasil): remove AdGuard Home (#79) 2026-09-09 20:06:34 +09:00
.gitignore feat: ignore Mac store file 2026-06-12 13:45:49 +09:00
.mcp.json Add Claude Code project configuration 2026-06-12 01:09:39 +09:00
.sops.yaml deploy jamye-plz to alfheim 2026-06-18 10:49:32 +09:00
AGENTS.md Remove Grafana/Prometheus/Loki/Alloy stack (migration phase 5 teardown) 2026-07-06 18:55:39 +09:00
CLAUDE.md Add shared agent guidance in AGENTS.md 2026-06-12 01:09:18 +09:00
flake.lock flake: update jamye-plz input to c7537fb78015 (#83) 2026-09-17 05:26:45 +00:00
flake.nix feat(jamye-server): deploy service stack to midgard (#75) 2026-09-08 09:05:19 +09:00
Justfile Gate just switch behind an interactive confirm 2026-07-14 13:51:57 +09:00
README-ko.md Document static site routing 2026-07-06 14:54:36 +09:00
README.md chore(yggdrasil): remove AdGuard Home (#79) 2026-09-09 20:06:34 +09:00

Homelab

English | 한국어

This repository is the source of truth for a NixOS homelab. Host configuration, shared modules, services, operator environment, and encrypted secrets are declared in a single Nix flake and deployed through GitHub Actions.

Documentation

The detailed documentation lives on the docs site:

Use the docs site for architecture details, host runbooks, service notes, secrets, CI/CD, rollback, and operational procedures.

Overview

The homelab is split into an edge/infra node, an application host, and an ARM cloud node. Public traffic enters through Cloudflare Tunnel and lands on Caddy on yggdrasil; internal backend traffic moves over Tailscale. The repository is treated as the server: changes are made here, reviewed through pull requests, and rolled out by CI/CD.

Hosts

Host Role Notes
yggdrasil Edge / infrastructure Cloudflare Tunnel, Caddy ingress, monitoring, status page
midgard Application host Static sites, Forgejo, Vaultwarden, Homepage, Podman-backed applications
alfheim OCI ARM node ARM/cloud-host validation and jamye-plz

Architecture

flake.nix pins NixOS 26.05 and exposes one nixosConfiguration per host. Shared system behavior comes from modules/; service definitions live under services/; each host wires in its hardware and host-specific modules from hosts/<host>/.

External users reach public services through:

Internet -> Cloudflare -> cloudflared on yggdrasil -> Caddy -> service backend

Private administration and host-to-host traffic use the Tailscale tailnet. Application ports are not opened directly to the public Internet.

Repository Layout

Path Purpose
flake.nix / flake.lock Nix flake inputs and host outputs
hosts/ Per-host NixOS configuration, hardware config, and disk layout
modules/ Shared NixOS modules used across hosts
services/ Service modules and ingress/monitoring configuration
home/ Home Manager profile for the poby operator account
secrets/ sops-nix encrypted secrets
docs/ English and Korean documentation site source

Change Flow

Normal changes follow the GitHub Actions workflow:

edit -> pull request -> CI builds every host -> merge -> CD deploys all nodes

Local just test and just switch are explicit-request break-glass or bootstrap commands, not the default validation or deployment path.

Useful Docs