provisioning/tools/nickel-installation-guide.md

4.3 KiB

Nickel Installation Guide

Overview

Nickel is a configuration language that complements KCL in the provisioning system. It provides:

  • Lazy evaluation for efficient configuration processing
  • Modern functional programming paradigms
  • Excellent integration with the CLI daemon for config rendering

Installation Methods

Nickel is maintained by Tweag and officially recommends Nix for installation. This avoids all dependency issues:

# Install Nix (one-time setup) - Using official NixOS installer
curl https://nixos.org/nix/install | sh

# Install Nickel via Nix
nix profile install nixpkgs#nickel

# Verify installation
nickel --version

Why Nix?

  • Isolated, reproducible environments
  • No system library conflicts
  • Official Nickel distribution method
  • Works on macOS, Linux, and other Unix-like systems
  • Pre-built binaries available

Alternative: Automatic Installation

The provisioning system can automate installation:

# Via tools-install script (uses Nix if available)
$PROVISIONING/core/cli/tools-install nickel

# Check installation status
$PROVISIONING/core/cli/tools-install check

Alternative: Manual Installation from Source

If you have a Rust toolchain:

cargo install nickel-lang-cli

Note: This requires Rust compiler (slower than pre-built binaries)

Troubleshooting

"Library not loaded: /nix/store/..." Error

This occurs when using pre-built binaries without Nix installed. Solution: Install Nix or use Cargo:

# Option 1: Install Nix (recommended) - Using official NixOS installer
curl https://nixos.org/nix/install | sh

# Then install Nickel
nix profile install nixpkgs#nickel

# Option 2: Build from source with Cargo
cargo install nickel-lang-cli

Command Not Found

Ensure Nix is properly installed and in PATH:

# Check if Nix is installed
which nix

# If not found, install Nix first using official NixOS installer:
curl https://nixos.org/nix/install | sh

# Then install Nickel
nix profile install nixpkgs#nickel

Version Mismatch

To ensure you're using the correct version:

# Check installed version
nickel --version

# Expected version (from provisioning/core/versions)
echo $NICKEL_VERSION

# Update to latest
nix profile upgrade '*'

Integration with Provisioning System

CLI Daemon Integration

Nickel is integrated into the CLI daemon for configuration rendering:

# Render Nickel configuration via daemon
curl -X POST http://localhost:9091/config/render 
  -H "Content-Type: application/json" 
  -d '{
    "language": "nickel",
    "content": "{name = \"my-config\", enabled = true}",
    "context": {"env": "prod"}
  }'

Comparison with KCL

Feature KCL Nickel
Type System Gradual, OOP-style Gradual, Functional
Evaluation Eager Lazy (partial evaluation)
Performance Fast Very fast (lazy)
Learning Curve Moderate Functional programming knowledge helps
Use Cases Infrastructure schemas Configuration merging, lazy evaluation

Deployment Considerations

macOS M1/M2/M3 (arm64)

Nix automatically handles architecture:

nix profile install nixpkgs#nickel
# Automatically installs arm64 binary

Linux (x86_64/arm64)

nix profile install nixpkgs#nickel
# Automatically installs correct architecture

CI/CD Environments

For GitHub Actions or other CI/CD:

# .github/workflows/example.yml
- name: Install Nickel
  run: |
    curl https://nixos.org/nix/install | sh
    nix profile install nixpkgs#nickel

Resources

Version Information

Current provisioning system configuration:

# View configured version
cat $PROVISIONING/core/versions | grep NICKEL_VERSION

# Current: 1.15.1

Support

For issues related to: