StackPanel

Prelude

Default shell DX layer — MOTD, menu/x, and docs via Prelude

Prelude

Prelude is Darkmatter’s devshell UI suite. Stackpanel composes it by default so every project gets:

  • motd — welcome banner on nix develop / direnv reload
  • menu / x — interactive command catalogue and dispatcher
  • docs — Markdown docs viewer when README.md (or docs/quick-start.md) is present

You do not add a prelude flake input yourself. It arrives transitively through stackpanel.lib.mkFlake / stackpanel.flakeModules.default.

Demo it (this repo)

From the Stackpanel checkout, after the Nix shell is active:

# 1. Welcome banner (also runs automatically on shell entry)
motd

# 2. Interactive catalogue — filter, expand details with Tab, run with Enter
menu

# 3. Non-interactive dispatch
x --list
x <key>

# 4. In-shell docs TUI — open "Quick start"
docs

The page behind step 4 is docs/quick-start.md at the repo root — a Markdown walkthrough registered automatically when prelude.docs.enable is on. That file is the demo script: MOTD → menu → docs → add a motd.commands entry → disable banner packages.

# Pure render (no agent/status probes) — good for screenshots
motd --pure

Enable / disable

Prelude is on by default. prelude.enable = false skips Prelude packages and the shell banner (there is no alternate Lip Gloss MOTD):

# .stack/config.nix — only needed to opt out or tweak
prelude = {
  enable = false;  # no motd/menu/docs packages; no shell banner
};
OptionDefaultMeaning
prelude.enabletrueInstall Prelude packages + run motd on entry
prelude.themenull → mintedPrelude color theme
prelude.menu.enabletrueInstall menu / x
prelude.docs.enabletrueAuto-register README / quick-start
prelude.prompt.enablefalseThemed Starship (off until theme bridge)
prelude.settings{ }Passthrough merged into flake-parts prelude.*

Command catalogue façade

Existing modules keep writing stackpanel.motd.commands / features / hints. Stackpanel maps those into prelude.commands (sanitized keys, first five on Getting Started). Live agent/service status still comes from stack motd --json into Prelude’s MOTD status lights — there is one banner.

stackpanel.motd.commands = [
  { name = "dev"; description = "Start all local services"; }
];

Status CLI vs shell banner

CommandBehavior
Shell entryRuns Prelude motd (when enabled)
motdWelcome banner (Prelude binary)
stack motd --jsonStatus JSON (Studio / Prelude probes)
stack motd --minimalOne-line status
stackpanel.prelude.enable = falseNo Prelude packages / no shell banner

After nix develop

motd          # reprint the welcome banner
menu          # interactive command picker
x             # list / run catalogue commands
x <command>   # dispatch a bridged or Prelude command
docs          # browse README / quick-start when present (Markdown only)

Note: Prelude’s docs viewer reads Markdown (.md) only — e.g. root README.md and docs/quick-start.md. The Fumadocs site under apps/docs/ is separate and is not auto-registered.

On this page