121 lines
4.0 KiB
Bash
121 lines
4.0 KiB
Bash
|
|
#!/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}" <<EOF
|
||
|
|
{
|
||
|
|
system_config = {
|
||
|
|
config_path = "${config_path}",
|
||
|
|
use_defaults = true,
|
||
|
|
},
|
||
|
|
deployment_mode = "docker-compose",
|
||
|
|
providers = {
|
||
|
|
upcloud = false,
|
||
|
|
aws = false,
|
||
|
|
hetzner = false,
|
||
|
|
local = true,
|
||
|
|
},
|
||
|
|
resources = {
|
||
|
|
cpu_count = ${cpu_count},
|
||
|
|
memory_gb = ${memory_gb},
|
||
|
|
},
|
||
|
|
security = {
|
||
|
|
enable_mfa = true,
|
||
|
|
enable_audit = true,
|
||
|
|
require_approval_for_destructive = true,
|
||
|
|
},
|
||
|
|
workspace = {
|
||
|
|
create_workspace = true,
|
||
|
|
name = "default",
|
||
|
|
description = "Default workspace",
|
||
|
|
},
|
||
|
|
}
|
||
|
|
EOF
|
||
|
|
}
|
||
|
|
|
||
|
|
# Function to check if typedialog is available
|
||
|
|
check_typedialog() {
|
||
|
|
if ! command -v typedialog &> /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 "$@"
|