hausfold

haus

What haus is

One file describes your Mac. One command makes the Mac match it. Everything else here is detail.

haus is a layer for macOS. You describe the machine you want in one text file: apps, window management, the bar, the shell, the colours, the macOS settings you always change by hand. Then one command makes the Mac match it.

haus.theme.accent = "sapphire";
haus.hearth.editorName = "neovim";
haus.roster.slack = { key = "s"; name = "Slack"; cask = "slack"; };
haus rebuild

Slack is installed and bound to a launcher key, your terminal is themed, and the change is a line in git you can read six months later.

That is the whole idea. The rest of these pages are the detail.

Why bother

  • It survives the machine. A new Mac, or a wiped one, is one command away from being the old one, because the old one was text.
  • It undoes. A failed build never activates. A regretted change is haus rollback, atomic, in seconds.
  • It's one setting, not forty. The accent colour lands in the terminal, the file manager, git, the bar and the browser at once, because they all read the same value.
  • Nothing is buried. Every knob is a documented option with a default, and haus edit opens the file that sets them.

You do not need to know Nix going in. It is what makes this reproducible, and the installer sets it up for you. You will pick some of it up over time, and that's the whole curve.

What's in the box

haus is organised into twelve rooms, each one a capability you can turn on, off, or leave alone. Turn on the ones you want; the rest cost you nothing.

RoomWhat it does
AppsOne list holds every app, font and CLI tool, and where each installs from
AppearanceThe palette, the accent, the wallpaper, fonts and interface scale
DisplaysPer-screen scaling, said as an intent rather than a pixel count
DevelopmentGhostty, zellij, zsh, the editor, Git tooling and language runtimes
WindowsTiling, workspaces, and a launcher on a tap of Caps-Lock
BarA status bar: workspaces, weather, media, battery, clock
LauncherA ⌘Space command palette where every command is a file
ShelfA file shelf that drops out of the notch to catch drag-drops
FocusOne quiet switch: Do Not Disturb, your status, your hooks
AICoding agents, each with its own checkout of the repo
Text expansionType a short trigger, get the long thing, in any app
SecurityTouch ID for sudo, lock behaviour, firewall, secrets

Underneath them is the foundation nobody switches off: the macOS defaults, the Homebrew policy and the haus CLI itself. The full reference lists every option in every room, with its type and default.

Which rooms are on is your desktop's decision, and disagreeing with it is one line in your host file. Each piece also stands alone: you can take the whole thing, or just pounce, or just the palette.

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; it never edits it. haus stays upstream, pinned to an exact commit, and nothing about your machine changes until you run haus update.

That split is the whole design. Your identity is never in someone else's repo, and their improvements are never a surprise on your machine.

Where to go next

On this page