# What haus is (/docs/haus)



A Mac out of the box is somebody else's idea of a Mac. **haus** is a layer for
macOS that rebuilds it into yours: the windows, the bar, the shell, the keys,
the apps, the settings you always change by hand. One text file describes the
machine you want, and one command makes the Mac match it.

```nix
haus.theme.accent = "sapphire";  # one hue, everywhere
haus.windows.enable = true;      # tiling, Caps Lock as leader
haus.focus.enable = true;        # Do Not Disturb, one switch
haus.terminal.editorName = "neovim";

# Claude, installed, on Caps Lock + c
haus.roster.claude = { key = "c"; name = "Claude"; cask = "claude"; };
```

```sh
haus rebuild
```

Your windows tile, your terminal is themed, Claude is installed on a launcher
key, and every one of those is a line in git you can read six months later.

## Why bother [#why-bother]

* **It survives the machine.** A new Mac, or a wiped one, is one command from
  being the old one, because the old one was text.
* **It undoes.** A failed build never activates, and a regret is
  `haus rollback`, atomic, in seconds.
* **It's one setting, not forty.** One accent reaches the bar, your wallpaper,
  the notch shelf, the tools in your terminal and the browser, down to the sites
  you name in it.
* **Nothing is buried.** Every knob is an option with a default, and `haus edit`
  opens the file that sets it.

You do **not** need to know [Nix](https://nixos.org) going in. It is what makes
this reproducible, and the installer sets it up.

## Made for agents [#made-for-agents]

Everything is a file and everything is a CLI, which happens to be exactly what a
coding agent needs: "make my terminal look like yours" is a diff, a build that
refuses to activate if it's broken, and one command back if you hate it.
[Changing your Mac with an agent](/docs/haus/agent-rebuilds) is that loop.

The [AI room](/docs/haus/rooms/ai&#x29; installs your agent clients and gives every
agent its own checkout of the repo it's on, so &#x2A;*⌘⏎** opens an isolated lane and
five run at once without fighting over a branch. Every rebuild also writes the
family's agent skills into each client's home, to one [shared
standard](https://github.com/hausfold/workshop/blob/main/docs/agent-surface.md):
haus's own, and the `hausfold` one that sends a bug report or an idea back to
us. Your agents already know the house when they wake up in it.

## What's in the box [#whats-in-the-box]

haus is organised into **rooms**, each a capability you turn on, off, or leave
alone. An app store stops at the app; a room wires the keys and the macOS
settings around it too. The rooms you skip cost nothing.

There is a room for the windows, the bar, the shell, the launcher, the notch
shelf, the apps, the palette, the agents you run and the quiet switch that stops
all of it interrupting you. [Rooms](/docs/haus/rooms) is the catalogue, and the
one page that says which `haus.*` name belongs to which. Under them is the
foundation nobody switches off: the macOS defaults, the Homebrew policy and the
`haus` CLI, and the [full reference](/docs/haus/reference/options) lists every
option inside any of it, with its type and default.

Each piece stands alone too: take all of it, or just the [pounce](/docs/pounce)
launcher, or just the [nebelung](https://github.com/hausfold/nebelung) colours.

## Desktops [#desktops]

A **desktop** is a starter template: a complete setup, written down, with which
rooms are on, how it looks and what it installs. A Mac runs exactly one, or
none, and disagreeing with it is one line in your host file. The installer
selects none, so a fresh haus puts no bar, tiling, palette or wallpaper on
screen until you turn a room on.

A desktop is just a file, so it travels: make your own, or run one a friend
swears by. [Choosing a desktop](/docs/haus/desktops/choosing) covers the
foundation, the one desktop that ships, and how to switch.

## The shape of a haus machine [#the-shape-of-a-haus-machine]

Your config lives at `~/.config/nix` and it is **yours**: your name, your keys,
your app list. It imports haus and never edits it, and haus stays upstream,
pinned to an exact commit, so nothing about your machine changes until you run
`haus update`. Your identity never sits in someone else's repo, and their
improvements are never a surprise on your machine.
