noora-theme-and-content-customization

Installation
SKILL.md

Noora Theme And Content Customization

Use this skill when a Swift CLI already uses Noora and needs branded colors, different selected-row styling, or custom wording for alerts and prompt instructions.

Apply Theme Customization

Create a Theme and pass it to Noora(theme:).

import Noora

let theme = Theme(
    primary: "005F73",
    secondary: "CA6702",
    muted: "6C757D",
    accent: "BB3E03",
    danger: "AE2012",
    success: "2A9D8F",
    info: "0A9396",
    selectedRowText: "FFFFFF",
    selectedRowBackground: "005F73"
)

let noora = Noora(theme: theme)

Apply Content Customization

Create a Content value when the built-in wording is wrong for the product, locale, or interaction style.

let content = Content(
    errorAlertTitle: "Error",
    errorAlertRecommendedTitle: "What to try next",
    warningAlertTitle: "Warning",
    warningAlertRecommendedTitle: "Please review",
    successAlertTitle: "Done",
    successAlertRecommendedTitle: "Summary",
    infoAlertTitle: "Info",
    infoAlertRecommendedTitle: "Summary",
    choicePromptFilterTitle: "Filter",
    choicePromptInstructionWithoutFilter: "up/down choose • enter confirm",
    choicePromptInstructionWithFilter: "up/down choose • / filter • enter confirm",
    choicePromptInstructionIsFiltering: "up/down choose • esc clear • enter confirm",
    multipleChoicePromptFilterTitle: "Filter",
    multipleChoicePromptErrorTitle: "Selection error",
    multipleChoicePromptInstructionWithoutFilter: "up/down choose • space select • enter confirm",
    multipleChoicePromptInstructionWithFilter: "up/down choose • space select • / filter • enter confirm",
    multipleChoicePromptInstructionIsFiltering: "up/down choose • space select • esc clear • enter confirm",
    textPromptValidationErrorsTitle: "Validation errors",
    yesOrNoChoicePromptInstruction: "left/right choose • enter confirm",
    yesOrNoChoicePromptPositiveText: YesNoAnswerContent(fullText: "Yes", character: "y"),
    yesOrNoChoicePromptNegativeText: YesNoAnswerContent(fullText: "No", character: "n")
)

let noora = Noora(theme: theme, content: content)

Guidance

  • Keep all theme values as 6-character hex strings without #.
  • Treat selectedRowText and selectedRowBackground as required for table legibility, not optional decoration.
  • Customize Content only when product wording needs to be consistent across the CLI. Do not override copy ad hoc at each call site if one global wording change is cleaner.
  • Keep instructions short. Noora prompts already render a lot of context.

Avoid

  • Mixing unrelated branding logic into each command instead of centralizing a shared Noora instance.
  • Choosing low-contrast selected-row colors that make interactive tables unreadable.
  • Rewriting Content just to make minor stylistic edits that could live in the alert or prompt text itself.
Related skills
Installs
1
First Seen
Mar 31, 2026