Skip to content

The family

nebelhaus is not one repo — it’s a small family, each piece owning one job and usable on its own. The rice (nebelhaus) ties them together, but pounce, trill, perch, and nebelung stand alone too.

RepoOwnsYou touch it when…
🏠 nebelhausthe rice — nix-darwin modules for tiling, bar, shell, security, palette wiringanything about how the system behaves
🐾 pouncethe launcher — a native Swift command palette + its generic command scriptsthe palette app or a built-in command changes
🐦 trillthe messages — a native iMessage/SMS/RCS client reading chat.db read-onlyyou want to change the Messages client
🐈 perchthe shelf — a native notch file tray that stages dropped files and drags them out as one groupyou want to change the file shelf
🌫 nebelungthe colours — a silver-mist Catppuccin variant + per-tool theme templatesyou want a different shade of fog
🍺 homebrew-tapthe Homebrew tap (brew tap nebelhaus/tap)almost never — CI bumps it on every release
🧰 workshopevery repo checked out side-by-side + the bench dev CLIyou’re hacking on the family itself

Your private machine config — identity, secrets, your app roster — lives at ~/.config/nix and is yours, never part of the rice.

There are four command-line tools in nebelhaus, and knowing which is which saves a lot of confusion. Two jobs, four commands — and if you only use nebelhaus, you only ever need the first one:

CommandYou reach for it to…Works onShips in
hausdrive your own machine — rebuild, update, roll back, diagnoseyour Mac (~/.config/nix)the rice — every install has it
wtmanage agent worktrees — safe parallel agents, resumable panesany git repothe rice — every install has it
benchmove a change across the family repos — try, ship, releasethe workshop checkoutsthe workshop — contributors only
zscratchfeel-test a zellij edit with no rebuildthe rice’s zellij configthe rice — for rice contributors

haus and bench never overlap — they’re named differently on purpose so they can’t shadow each other. haus knows only your machine; bench knows only the family repos. wt and zscratch are dev tools the rice puts on your PATH whether or not you ever contribute — wt especially is worth knowing for anyone who runs Claude Code, nebelhaus contributor or not.

  • pounce installs from Homebrew (brew install pounce) with zero Nix. It’s a general command palette; the rice just wires it up.
  • perch is a plain menu-bar app — the notch file shelf — that needs none of the rest of the family to run.
  • nebelung is a plain colour system. Any tool — Ghostty, bat, lazygit, Slack, Zen — can consume its rendered themes without touching the rest.
  • nebelhaus is the whole system, but its modules (den, hearth, prowl, sill, collar, pounce, hush, secrets) are exported individually so you can cherry-pick.

The repos form a chain of pinned flake inputs. Each link is a flake input — a reference to an exact commit, recorded in the downstream repo’s flake.lock:

one colour change rippling down the chain: nebelung → pounce → nebelhaus → ~/.config/nix → your Mac, each lock pinning the exact commit of the one before

The catch that surprises everyone: a flake input is not “whatever is on GitHub right now” — it’s a frozen commit hash. So pushing a change to nebelung changes nothing downstream until each downstream flake.lock is bumped to the new commit. That’s what makes rebuilds reproducible, and it’s why updating is a deliberate nix flake update, not automatic.

As an end user you rarely feel this — haus update handles it. It matters if you contribute to the family or want to understand how the flakes fit together.

nebelhaus stands on the shoulders of excellent open-source projects:

All of nebelhaus is MIT-licensed.