{"id":51146421,"url":"https://github.com/dallanwagz/homelab-mini","last_synced_at":"2026-06-26T03:01:46.472Z","repository":{"id":366689883,"uuid":"1277353725","full_name":"dallanwagz/homelab-mini","owner":"dallanwagz","description":"Turn a cheap mini PC — or an old Intel Mac mini — into a bulletproof, always-on headless homelab server. Tested power-on/wake fixes, per-model guides, and an agent setup wizard.","archived":false,"fork":false,"pushed_at":"2026-06-22T22:19:02.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T00:14:42.821Z","etag":null,"topics":["beelink","e-waste","headless-server","homelab","intel-mac","linux","mac-mini","mini-pc","n100","repurpose","self-hosted","ubuntu","wake-on-lan"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dallanwagz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-22T20:24:15.000Z","updated_at":"2026-06-22T22:19:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dallanwagz/homelab-mini","commit_stats":null,"previous_names":["dallanwagz/homelab-mini"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/dallanwagz/homelab-mini","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dallanwagz%2Fhomelab-mini","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dallanwagz%2Fhomelab-mini/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dallanwagz%2Fhomelab-mini/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dallanwagz%2Fhomelab-mini/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dallanwagz","download_url":"https://codeload.github.com/dallanwagz/homelab-mini/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dallanwagz%2Fhomelab-mini/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34801014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beelink","e-waste","headless-server","homelab","intel-mac","linux","mac-mini","mini-pc","n100","repurpose","self-hosted","ubuntu","wake-on-lan"],"created_at":"2026-06-26T03:01:45.605Z","updated_at":"2026-06-26T03:01:46.464Z","avatar_url":"https://github.com/dallanwagz.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Homelab Mini\n\n**Turn a cheap mini PC — or an old Intel Mac mini — into a bulletproof, always-on headless homelab server.**\n\nMini PCs (Beelink, Intel N100 boxes, NUCs) and out-of-support Intel Mac minis make\nnear-perfect homelab servers: small, silent, power-sipping (~6–12 W idle), with a\nreal SSD and gigabit Ethernet. But running one *headless* on Linux surfaces\ngenuinely non-obvious quirks — starting with the most important one: **does it come\nback on by itself after a power cut?** This repo collects the **scripts, reports,\nand tested per-model fixes** to make any little box behave like a proper server.\n\n\u003e The flagship example: **automatically powering back on after a power outage.** On\n\u003e a normal PC BIOS that's one menu toggle — but a Mac mini *hides* the setting, so\n\u003e you have to flip a chipset register from Linux. We figured both out, tested them on\n\u003e real hardware, and wrote them up. See [`docs/how-it-works.md`](docs/how-it-works.md).\n\n---\n\n## 💸 Your VPC, in your closet\n\nA cloud provider will happily rent you an always-on VM with a few cores, a few gigs\nof RAM, and an SSD for **$X–$Y a month, forever**. Or… you put an Intel Mac mini you\n*already own* in the closet and pay **about the price of a coffee per *year*** in\nelectricity. Same always-on box. You own it. No monthly bill, no egress fees, nobody\nelse's hands on your data. Call it your **VPC — Virtual Private Cloud — except it's\nin your closet.**\n\n\u003e 📏 **Measured cost: `$_____ /month`** *(placeholder — we're putting a mini on a\n\u003e metering smart plug to get the real number).* Ballpark: an Intel Mac mini idles\n\u003e around **6–12 W** ≈ **~$1–2/month**. Live tracker + cloud price comparison:\n\u003e [`reports/closet-vpc-cost.md`](reports/closet-vpc-cost.md).\n\n---\n\n## Two ways to use this\n\n### 🧙 Guided (recommended): open this repo in [Claude Code](https://claude.com/claude-code)\nThere's an agent wizard baked into [`CLAUDE.md`](CLAUDE.md). Open the repo and\nsay *\"set up my headless Mac mini.\"* The agent will detect your model, run the\nright scripts over SSH, explain each step, and walk you through the **physical\ntests** that prove it actually works. It will refuse to touch hardware registers\non a model that hasn't been verified.\n\n### 🛠️ Manual: run the scripts yourself\nOn the mini (running Ubuntu/Debian), as a user with sudo:\n\n```bash\ngit clone https://github.com/dallanwagz/homelab-mini.git\ncd homelab-mini\n\nsudo ./scripts/power-on-after-failure.sh    # auto power-on after power loss\nsudo ./scripts/wake-on-lan.sh               # configure + persist Wake-on-LAN\nsudo ./scripts/headless-harden.sh           # never-sleep, no GRUB hang, SSH on boot\nsudo ./scripts/hibernate-wol-setup.sh       # hibernate (S4) + WoL = near-off, wakeable\n```\n\nEach script is **model-aware where it needs to be, idempotent, and has a\n`--status` mode** to just report current state without changing anything.\n\n---\n\n## What's here\n\n| Path | What |\n|------|------|\n| [`scripts/`](scripts/) | The tools: power-on-after-failure, Wake-on-LAN, headless hardening, hibernate+WoL |\n| [`docs/how-it-works.md`](docs/how-it-works.md) | The technical deep-dive: ACPI power states, the AfterG3 bit, why `pmset` fails on Linux |\n| [`docs/testing.md`](docs/testing.md) | **How to actually test this** — the physical pull-the-plug test, and using graceful shutdown to cleanly test Wake-on-LAN |\n| [`models/`](models/) | Per-model registry of verified register values + reports |\n| [`reports/`](reports/) | Community case studies — what people built with their revived minis |\n| [`CONTRIBUTING.md`](CONTRIBUTING.md) | What we want, and how to know if your contribution fits |\n\n## Tested models\n\n| Model | Identifier | Method | Status | Report |\n|-------|-----------|--------|--------|--------|\n| Mac mini (Late 2014) | `Macmini7,1` | `setpci` register write | ✅ verified | [report](models/macmini7,1.md) |\n| Beelink Mini S12 Pro | Intel N100 (AZW) | BIOS toggle | ✅ verified | [report](models/beelink-mini-s12-pro.md) |\n| *yours?* | | | | [add it →](CONTRIBUTING.md) |\n\n\u003e **Not just Mac minis.** The goal — *power back on after an outage* — applies to any\n\u003e small headless box. Machines with a normal PC BIOS (like the Beelink) just flip a\n\u003e menu setting; Mac minis hide it, so we patch the chipset bit from Linux. Both are\n\u003e documented here.\n\nIf your Mac model isn't listed, the power-on script will **stop and tell you** rather\nthan guess at a register that could hang your machine — and point you here to\ncontribute the values once you've found and tested them.\n\n## Ethos\n\nWhat this project believes, and what makes a contribution fit:\n\n1. **Tested on real hardware, or it doesn't ship.** The whole value here is trust. A\n   wrong power register can hang someone's machine — so verified findings are gold, and\n   unverified ones must say so plainly. Honesty about *how you know* beats being clever.\n2. **Keep good hardware out of landfills.** Apple (and everyone) drops support long\n   before the silicon stops being useful. Give it a second life instead.\n3. **You should own your compute.** A box in your closet beats renting one forever — no\n   monthly bill, no egress fees, nobody else's hands on your data.\n4. **Document the gotchas, not just the happy path.** The non-obvious firmware quirks\n   (power-after-outage, WoL S-states, boot hangs) are the entire point — write them down.\n5. **Friendly to humans *and* agents.** Setup is a guided wizard; contribution rules are\n   explicit enough that an AI agent can tell whether something belongs and how to prove it.\n\nIf your idea is in scope, you ran it on real hardware, and you're honest about what you\nverified — it fits. See [`CONTRIBUTING.md`](CONTRIBUTING.md).\n\n## Scope\n\n**In scope:** repurposing small/cheap/old hardware — mini PCs *and* Intel Mac minis\n— as headless Linux homelab servers: power behavior, wake, boot reliability,\nsensors/fans, running cost, and write-ups of what works.\n\n**Out of scope:** running macOS, Hackintosh on non-Apple hardware, or anything that\nisn't about giving small hardware a useful second life on Linux.\n\n## ⚠️ Disclaimer\n\nSome scripts here write low-level chipset/PCI registers. They are conservative\n(masked writes, model gating, sanity checks) and tested on the models listed, but\nfirmware is firmware: **use at your own risk.** Always read what a script does and\nrun the physical tests in [`docs/testing.md`](docs/testing.md) to confirm behavior\non *your* machine.\n\n## License\n\n[MIT](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdallanwagz%2Fhomelab-mini","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdallanwagz%2Fhomelab-mini","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdallanwagz%2Fhomelab-mini/lists"}