How the flakes fit together
nebelhaus is built on Nix flakes. You don’t need to
understand Nix deeply to use the rice, but knowing how the pieces fit makes the
update / rebuild model click — and it’s essential if you want to
contribute.
Your config is a thin consumer
Section titled “Your config is a thin consumer”The installer scaffolds ~/.config/nix as a thin consumer of the rice. Its
flake.nix imports nebelhaus as an input and calls the mkNebelhaus builder:
{ inputs.nebelhaus.url = "github:nebelhaus/nebelhaus";
outputs = { nebelhaus, ... }: { darwinConfigurations.<hostname> = nebelhaus.mkNebelhaus { username = "<user>"; hostname = "<hostname>"; host = ./hosts/<hostname>; }; };}All your personal choices live in hosts/<hostname>/default.nix — your
options, your app roster, your casks. The rice stays
upstream; you never edit it directly.
The mkNebelhaus builder
Section titled “The mkNebelhaus builder”mkNebelhaus is the rice’s entry point. Given a username, hostname, and host
file, it returns a full darwin-darwinSystem with every room wired up:
nebelhaus.mkNebelhaus { username = "ada"; hostname = "fog"; host = ./hosts/fog; # your identity + choices system = "aarch64-darwin"; # Apple Silicon only extraModules = [ ]; # extra nix-darwin modules, optional}It composes the rooms — den, theme, hearth, prowl, sill, collar,
pounce, trill, perch, hush, secrets — and layers in home-manager, the
nebelung theme, and the pounce app.
Most rooms are also exported individually under darwinModules (den,
hearth, prowl, sill, collar, pounce, hush, secrets, and default
for all of them) if you’d rather cherry-pick; theme, trill, and perch ride
along only with the full house.
The inputs
Section titled “The inputs”The rice flake pulls together:
nixpkgs(unstable) — the package setnix-darwin— macOS system moduleshome-manager— your user environmentcatppuccin— the theme frameworknebelung— the silver-mist palette (a family input)pounce— the launcher app (a family input)trill— the Messages client (a family input; tracks trill releases, notmain)perch— the notch file shelf (a family input; tracks perch releases, notmain)nix-index-database— fornix-index+comma
Why pins mean “nothing changes until you say so”
Section titled “Why pins mean “nothing changes until you say so””Each input is recorded in flake.lock as an exact commit hash, not “latest”.
That’s what makes a rebuild reproducible — the same lock produces the same system
on any machine, any day.
The flip side, and the thing that surprises everyone: pushing a change to
nebelung or the rice changes nothing on your machine until your flake.lock
is bumped to point at the new commit. A colour change therefore ripples like
this across the family:

Cold-boot safety
Section titled “Cold-boot safety”One subtlety worth knowing if you ever debug a login issue: Determinate Nix
lives on a separate APFS volume, and macOS sometimes tries to launch the rice’s
GUI agents (AeroSpace, SketchyBar, Pounce) before that volume mounts or before
the GUI event manager is ready. The rice wraps each agent in a small
gui-wait shim that polls for Dock/Finder/SystemUIServer readiness before
exec’ing — which is why your bar and tiling reliably come back after a reboot.