# Nickel Integration

Type-safe form schema generation and roundtrip workflows using Nickel configuration language.

## Files

- **nickel_schema.ncl** - Type-safe form schema definition
- **nickel_template.ncl.j2** - Jinja2 template for schema generation

## About Nickel

Nickel is a powerful configuration language that provides:

- Strong typing
- Validation rules
- Reusable schemas
- Inheritance and composition
- **Roundtrip support** - Edit existing configs via forms

## Usage

### Generate Form from Nickel Schema

```bash
# Process template through Jinja2
j2 nickel_template.ncl.j2 > form_schema.ncl

# Generate TOML from Nickel
nickel eval nickel_schema.ncl > form_config.toml

# Run form
cargo run -p typedialog-web -- --config form_config.toml
```text

### Roundtrip Workflow (Edit Existing Configs)

**New!** Edit existing Nickel configurations through interactive forms:

```bash
# CLI backend (command-line prompts)
typedialog nickel-roundtrip \
  --input config.ncl \
  --form ci-form.toml \
  --output config.ncl \
  --ncl-template config.ncl.j2

# TUI backend (full-screen terminal UI)
typedialog-tui nickel-roundtrip \
  --input config.ncl \
  --form ci-form.toml \
  --output config.ncl \
  --ncl-template config.ncl.j2

# Web backend (browser-based form with HTML diff)
typedialog-web nickel-roundtrip \
  --input config.ncl \
  --form ci-form.toml \
  --output config.ncl \
  --ncl-template config.ncl.j2
```text

**Features:**

- ✓ Load existing values from `.ncl` files
- ✓ Pre-populate form fields with current config
- ✓ Generate new `.ncl` using templates
- ✓ Show diff summary (what changed)
- ✓ Automatic validation with `nickel typecheck`
- ✓ HTML summary page (web backend only)

**See complete example:** `../08-nickel-roundtrip/`

### Example Nickel Schema

```nickel
{
  form = {
    title = "Registration",
    fields = {
      email = {
        type = "email",
        required = true,
        label = "Email Address",
      }
    }
  }
}
```text

## Benefits

- **Type Safety** - Catch schema errors at compile time
- **Inheritance** - Reuse common field definitions
- **Validation** - Built-in schema validation
- **Macros** - Generate repetitive fields
- **Documentation** - Self-documenting schemas

## Advanced Features

- **Field inheritance** - Reuse common field definitions
- **Custom validators** - Built-in schema validation
- **Conditional schemas** - Dynamic form generation
- **Template-driven generation** - Tera template support
- **Schema composition** - Combine multiple schemas
- **Roundtrip editing** - Edit existing configs via forms (NEW!)
- **Diff viewer** - See what changed after editing (NEW!)

## Learn More

- [Nickel Language](https://nickel-lang.org)
- [Nickel Documentation](https://nickel-lang.org/user-manual)
