# Launcher (/docs/haus/rooms/launcher)



Hit **⌘Space**, fuzzy-type, hit **Return**: apps, your own commands, clipboard
history and quick answers, every command a shell script. The palette is
[pounce](/docs/pounce); this room is its wiring.

```nix
haus.launcher.enable = true;
haus.keys.palette = "cmd-space";   # or alt-space, ctrl-space, "none"
```

Only `cmd-space` displaces Spotlight; the rest keep both. `haus permissions` has
a card for each macOS grant. Without **Automation**, Lock Screen and Force Quit
do nothing and say nothing, and a popup lands wherever Ghostty last left a
window rather than over the one you summoned it from. The Accessibility grant
survives every rebuild.

## Configure it [#configure-it]

`config.json` is generated from `haus.launcher.*`, `haus.ui.scale`,
[`haus.fonts.sans.name`](/docs/haus/rooms/appearance#type) and your theme, so
`pounce config init` refuses inside haus. Edit your host file instead.

```nix
haus.launcher.windowSwitcher = true;      # ⌘Tab by window, on here
haus.launcher.autoQuit.enable = false;
haus.launcher.plugins = [ "docker" "tailscale" ];
```

`plugins` turns on commands that assume a tool you have: `audio`, `bluetooth`,
`caffeinate`, `docker`, `github`, `perplexity`, `spotify`, `ssh`, `tailscale`.
Naming one installs the CLI behind it: `bluetooth` brings `blueutil`. An app or
daemon stays yours to provide.

## Links into the palette [#links-into-the-palette]

`pounce://run?item=cmd:<id>` runs a palette item from anything that can open a
URL: a row in an Obsidian base, a line in a note, a spreadsheet cell, a
Shortcut. Pounce.app claims the scheme in its bundle and nothing at runtime can
unclaim it, so these two are the machine's only say over it.

```nix
haus.launcher.urlScheme.enable = false;    # refuse every link, with a banner
haus.launcher.urlScheme.confirm = false;   # trust a link as much as your keyboard
```

Both are on. A link that would *run* something asks on screen first, naming the
app that opened it and every argument it carries; one that only opens a window
or a settings pane never asks. What a link may carry, and what it is refused
for, is [pounce's own page](/docs/pounce/config#running-an-item-from-a-link-urlscheme).

## Haus Settings [#haus-settings]

Three haus settings change from the palette, no host file involved: *Make text
bigger* (`ui.scale` 1.35), *Switch to light mode* (`theme.flavor` latte and
`theme.systemAppearance` flavor, sent together) and *High contrast on*
(`theme.contrast` high). Each runs
[`haus set`](/docs/haus/reference/haus#changing-a-setting-without-opening-an-editor)
in a floating terminal you can watch. The palette keeps no settings of its own,
so the type checking, the file it writes and the rebuild are all haus's.

## Rows that are listed on some pages only [#rows-that-are-listed-on-some-pages-only]

**New Agent Lane** (⌘⏎), **New Shell Window** (⌘N) and its `⇧` twin act on the
page you are on, so haus lists them on `T` and the `T/<repo>` lane pages, and
only where [Windows](/docs/haus/rooms/windows) is on. **Spawn Agent** and **New
Terminal Window** (⌘T) inherit nothing and stay everywhere. Hand one back:

```nix
haus.launcher.items."cmd:lane-here".workspaces = [ ];
```

Add `bundleIds` beside it, never instead: the predicates are ANDed. Both scope
the **row**, never a `hotkey`: ⌘⏎ and ⌘N work wherever Ghostty is frontmost.
`pounce doctor` says why a row is missing.

## The Fn/Globe key [#the-fnglobe-key]

Fn opens the emoji grid, and macOS wants it too. `haus.launcher.fnKey` settles
it: `"tap"` (the default) shares the key and may lose the race, `"remap"` turns
Fn into F19 and owns it, giving up Fn+arrows and Fn+Delete. haus declares the
remap, so a rebuild cannot drop it. Or hand Fn back:
`haus.launcher.items."mode:emoji".hotkey = null`.

## Copy text from screen [#copy-text-from-screen]

**⌘⇧2** crops an area and puts its text on the clipboard, offline. The first
capture asks for **Screen Recording**; without it crops come back
wallpaper-only, reading "No text found".

```nix
haus.launcher.items."cmd:copy-text".hotkey = "cmd+shift+6";   # or null
```

`haus.launcher.enable = false;` removes the room.

<Callout type="warn" title="⌘Space doesn't go back on its own">
  The write is one way. Put it back in System Settings ▸ Keyboard ▸ Keyboard
  Shortcuts.
</Callout>

## Options [#options]

[Every setting, with types and defaults](/docs/haus/reference/options#launcher).
