Skip to content

Repository files navigation

⌂ haus

One flake raises the whole Mac. Think omarchy, on macOS instead of Arch.

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.

📖 hausfold.co/docsinstalling, the rooms, and pounce, the palette

install

curl -fsSL https://hausfold.co/haus.sh | bash

That asks which desktop you want. Swapping the URL answers it instead:

curl -fsSL https://hausfold.co/nebelhaus.sh | bash the whole house — tiling, bar, palette, shelf, agents
curl -fsSL https://hausfold.co/everyday.sh | bash a Mac for someone who doesn't write code
curl -fsSL https://hausfold.co/minimal.sh | bash just the themed shell, on otherwise stock macOS

Already have Nix? nix run github:hausfold/haus#bootstrap -- --desktop=minimal. → choosing a desktop

The installer puts the prerequisites in place (Xcode CLT, Determinate Nix), then scaffolds a thin config of your own at ~/.config/nix: an ~18-line flake consuming this repo, plus one host file for what's personal — git identity, signing keys, secrets, your private apps. You never edit this repo to use it.

Beside it lands hosts/<host>/options.nixevery haus.* option there is, at its default, with its type and a docs link, all commented out. You discover options by reading your own config, and it's rendered from the revision you pinned, so it can't offer you one you don't have.

the CLI

haus rebuild                # build, then switch — a bad edit never reaches the running system
haus update                 # pull the latest haus and its apps, then rebuild
haus rollback               # back one generation, atomically
haus edit                   # open your host file
haus options                # re-render that catalogue against the revision you're on
haus set                    # search every option this Mac has, then pick the value
haus set theme.accent teal  # or say it outright: type-checked, then one rebuild
haus plan                   # what the next rebuild would change, without building it
haus diff                   # what you declared vs what macOS actually has right now
haus doctor                 # Nix, the CLT, the GUI agents, Homebrew drift

every command · every option

the rooms

Twelve capabilities, each a switch: Apps · Appearance · Displays · Development · Windows · Bar · Launcher · Shelf · Focus · AI · Text expansion · Security. Your desktop decides which are on; one line in your host overrules it. Six of them are also exported as standalone nix-darwin modules, so you can take the tiling or the bar into a flake of your own and leave the house behind.

what each room does · stealing one

ask an agent to change it

A declarative machine is the one kind an agent can safely reconfigure — the rebuild builds before it switches, so a bad edit never reaches the running system. What was missing was knowledge: left to guess, a model reaches for brew install and dotfiles the next rebuild overwrites.

So the layer ships it. haus.ai.skill writes a haus skill into the directory each client you named actually reads (~/.claude/skills/haus, ~/.codex/skills/haus, ~/.config/opencode/skills/haus), with an option reference generated from the revision you're pinned to — it can only describe options you have. "Install Slack" or "make everything bigger" becomes an edit to your host file, applied and verifiable. → coding agents

more


⌂ hausfold

Releases

Packages

Contributors

Languages