# hacker (/docs/haus/desktops/hacker)



**hacker** is a Mac arranged like a tiling Linux rig, but native to the grain
of the Mac: fog-grey, keyboard-first, and the same after you wipe the machine.
It is the one desktop haus ships. The installer selects none unless you ask
for this one by URL.

You never edit the desktop to use it: the installer scaffolds a thin config of
your own at `~/.config/nix` that consumes it as an input, so your machine stays
yours and haus stays upstream.

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

That URL selects this desktop; `haus.sh` installs the foundation instead, and
`haus desktop hacker` selects it on a machine that already has haus.
[Install](/docs/haus/install) has the rest.

## What it turns on [#what-it-turns-on]

Nearly every [room](/docs/haus): [Windows](/docs/haus/rooms/windows),
[Bar](/docs/haus/rooms/bar), [Launcher](/docs/haus/rooms/launcher),
[Shelf](/docs/haus/rooms/shelf), [Focus](/docs/haus/rooms/focus),
[Security](/docs/haus/rooms/security), [AI](/docs/haus/rooms/ai),
[Development](/docs/haus/rooms/development) with Ghostty, zmx, zsh, a tinted
prompt and Zed, and [Appearance](/docs/haus/rooms/appearance), whose nebelung
palette is rendered onto twenty-odd tools at once. Each has its own switch, so
anything the desktop chose your own file overrides in a line: see [Customize a
desktop](/docs/haus/desktops/customizing).

## First moves [#first-moves]

The first switch has finished. Windows tile themselves, the menu bar has been
replaced, your terminal opens into a themed session, ⌘Space belongs to the
palette, and `haus` is on your `PATH`. Here's the muscle memory.

| Keys                     | What happens                                                                                          |
| ------------------------ | ----------------------------------------------------------------------------------------------------- |
| **⌘Space**               | The palette. Type a few letters, hit Return. Start here for everything                                |
| **Tap ⇪, then a letter** | Launch or focus that app. `T` is the terminal, `B` the browser                                        |
| **Tap ⇪, then an arrow** | Move focus between tiled windows. Keep arrowing; hold ⇧ to *move* the window instead                  |
| **Tap ⇪, then a digit**  | Jump to that workspace. Add ⇧ to throw the current window there and follow it, ⌥⇧ to send it and stay |
| **Tap ⇪, then /**        | The cheatsheet, generated from *your* app list, so it is never out of date                            |

<Callout title="Tap Caps-Lock, don't hold it">
  It's a leader key now, not a modifier. Tap and release, then press the letter.
</Callout>

Try these in order: tap **⇪ T*&#x2A; and the terminal opens and tiles itself;
**⌘Space**, type `saf&#x60;, Return and Safari launches; &#x2A;*⇪ then ← / →*&#x2A; jumps focus
between the two; &#x2A;*⌥/*&#x2A; flips the split between horizontal and vertical;
**⌘Space**, type `emoji`, Return turns the palette into an emoji grid.

One permission to grant: a few palette features use a keyboard path macOS gates
behind Accessibility. Everything else works without it.

```sh
pounce --request-accessibility
```

The rest of the keys live where they're configured:
[Keys](/docs/haus/rooms/keys) has the leader, every workspace throw and how to
move all of it onto keys you'd rather use;
[Windows](/docs/haus/rooms/windows) has the tiling they drive,
[Development](/docs/haus/rooms/development) the terminal's chords and
[pounce](/docs/pounce/using&#x29; the palette. Your own machine carries a live
cheatsheet too (tap &#x2A;*⇪ /**), generated from your own tables, so trust that one
when they disagree.

## Making it yours [#making-it-yours]

Your settings live in one file, and `haus edit` opens it. The tweaks people
reach for first are an accent, an editor, and an app with a launcher key and a
workspace of its own.

```nix
haus.theme.accent = "sapphire";        # one accent, everywhere
haus.terminal.editorName = "neovim";   # named, so haus installs it

haus.roster.slack = {                  # an app, with a launcher key
  key = "s";
  name = "Slack";
  appId = "com.tinyspeck.slackmacgap";
  cask = "slack";
};
haus.workspaces.S = {                  # and a workspace of its own
  key = "s";
  icon = ":slack:";
  apps = [ "slack" ];
};
```

Then `haus rebuild`. [Customize a
desktop](/docs/haus/desktops/customizing) is the rest of what that file can
say, and [the haus reference](/docs/haus/reference/haus) is every command the
CLI has.
