#!/usr/bin/env bash # Bash wrapper for TypeDialog setup wizard # Handles TTY input and generates Nickel config for Nushell consumption set -euo pipefail # Configuration SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" FORM_PATH="${PROJECT_ROOT}/provisioning/.typedialog/core/forms/setup-wizard.toml" OUTPUT_CONFIG="${PROJECT_ROOT}/provisioning/.typedialog/core/generated/setup-wizard-result.ncl" OUTPUT_JSON="${PROJECT_ROOT}/provisioning/.typedialog/core/generated/setup-wizard-result.json" BACKEND="${TYPEDIALOG_BACKEND:-tui}" # Ensure generated directory exists mkdir -p "$(dirname "${OUTPUT_CONFIG}")" # Default config template DEFAULT_CONFIG="${PROJECT_ROOT}/provisioning/.typedialog/core/generated/setup-wizard-defaults.ncl" # Function to create default config create_default_config() { local config_path="${1:-${HOME}/.config/provisioning}" local cpu_count="${2:-4}" local memory_gb="${3:-8}" cat > "${DEFAULT_CONFIG}" < /dev/null; then echo "ERROR: TypeDialog is not installed" >&2 echo "Please install TypeDialog first: https://github.com/tweag/typedialog" >&2 return 1 fi return 0 } # Main execution main() { echo "╔═══════════════════════════════════════════════════════════════╗" echo "║ PROVISIONING SYSTEM SETUP WIZARD ║" echo "║ (TypeDialog - Bash Wrapper) ║" echo "╚═══════════════════════════════════════════════════════════════╝" echo "" # Check TypeDialog availability if ! check_typedialog; then exit 1 fi # Detect system defaults local default_config_path="${HOME}/.config/provisioning" local default_cpu_count=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo "4") local default_memory_gb=$(($(free -g 2>/dev/null | awk '/^Mem:/{print $2}' || sysctl -n hw.memsize 2>/dev/null | awk '{print int($1/1024/1024/1024)}' || echo "8"))) # Create default config create_default_config "${default_config_path}" "${default_cpu_count}" "${default_memory_gb}" echo "Running TypeDialog setup wizard (backend: ${BACKEND})..." echo "" # Run TypeDialog nickel-roundtrip if typedialog nickel-roundtrip "${DEFAULT_CONFIG}" "${FORM_PATH}" \ --output "${OUTPUT_CONFIG}" \ --backend "${BACKEND}"; then echo "" echo "✅ Configuration saved to: ${OUTPUT_CONFIG}" # Export to JSON for easy consumption if command -v nickel &> /dev/null; then if nickel export --format json "${OUTPUT_CONFIG}" > "${OUTPUT_JSON}"; then echo "✅ JSON export saved to: ${OUTPUT_JSON}" echo "" echo "You can now use this configuration in Nushell scripts:" echo " let config = (open ${OUTPUT_JSON} | from json)" else echo "⚠️ Warning: Failed to export to JSON" >&2 fi fi exit 0 else echo "❌ TypeDialog wizard failed or was cancelled" >&2 exit 1 fi } # Run main main "$@"