One flake raises the whole Mac.
pre-release · Nothing here changes your Mac without a way back: every rebuild is a Nix generation haus rollback returns to, and macOS's own settings — the one thing a rollback can't reach — are what haus capture and haus revert-settings are for. That's the intent, not a warranty: run it on a machine you can afford to rebuild, and tell us what breaks.
Tiling windows, a status bar, a ⌘Space palette, the terminal, Touch ID for
sudo, and every app you actually use — declared in one file, applied by one
command, native to the grain of the Mac rather than a Linux desktop bolted onto
it. Wipe the machine, run one line, and the house stands again exactly as it
was, down to the fog-grey.
haus is the layer: nix-darwin modules, the haus.* options you set, the
haus CLI you run. A desktop is one complete set of answers to those
options. hacker is the first desktop — grey, quiet, developer-shaped.
This repo ships both; hausfold is the org that makes them, which is why the
repo is hausfold/haus.
curl -fsSL https://hausfold.co/haus.sh | bashThat puts the prerequisites in place and scaffolds a thin config of your own at
~/.config/nix. It selects no desktop, so nothing you can see changes until you
turn a room on; hausfold.co/hacker.sh selects hacker instead. You never
edit this repo to use it.
📖 hausfold.co/docs/haus — and it only
lives there: installing,
choosing a desktop,
what each room does,
every haus command,
every option,
keeping it current and
leaving.
Taking one room into a flake of your own — the tiling, the bar — is how the flakes fit together. Changing your Mac by asking an agent is the AI room.
AGENTS.md— hacking on the houseTHANKS.md— the founding testers, and the projects haus is built ondocs/model.md— the contract the modules are written against: layer, room, desktop, host, and what each one may owndocs/macos-settings.md— what a desktop can actually set, measured domain by domaindocs/focus.md— the design record for a room built against an API Apple does not ship: the declarative hotkey, the alternatives rejected, and the rules the scene daemon loses every argument by. The user-facing half is hausfold.co/docs/haus/rooms/focusdocs/night-shift-internals.md— the seams an unattended merge shift leans on here, none of them visible from the shift's own side: why thealwayslid hold draws nothing, the fixer-lane endings that leave no record, the nine-column usage feed it meters against, and what a night puts on screen. The operator half is hausfold.co/docs/haus/night-shift