syntaxis/scripts/provisioning/setup-config.sh

369 lines
7.3 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# setup-config.sh - syntaxis Configuration Helper
# Helps users interactively configure syntaxis applications
set -e
# Colors
BLUE='\033[0;34m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
CONFIG_DIR="${SYNTAXIS_CONFIG_DIR:-$HOME/.config/syntaxis}"
INTERACTIVE=false
# Functions
log_info() {
echo -e "${BLUE}${NC} $1"
}
log_success() {
echo -e "${GREEN}${NC} $1"
}
log_warn() {
echo -e "${YELLOW}${NC} $1"
}
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--interactive)
INTERACTIVE=true
shift
;;
--config-dir)
CONFIG_DIR="$2"
shift 2
;;
--help)
cat << 'EOF'
syntaxis Configuration Helper
Usage: ./setup-config.sh [OPTIONS]
Options:
--interactive Interactive configuration mode
--config-dir DIR Configuration directory (default: ~/.config/syntaxis)
--help Show this help message
Examples:
./setup-config.sh --interactive
./setup-config.sh --config-dir ~/.config/my-syntaxis
This script helps configure syntaxis applications:
- syntaxis-cli
- syntaxis-tui
- syntaxis-api
EOF
exit 0
;;
*)
echo "Unknown option: $1"
exit 1
;;
esac
done
# Ensure config directory exists
mkdir -p "$CONFIG_DIR"
# CLI Configuration
configure_cli() {
log_info "Configuring syntaxis-cli..."
local cli_config="$CONFIG_DIR/syntaxis-cli.toml"
if [ -f "$cli_config" ]; then
log_warn "syntaxis-cli.toml already exists"
if [ "$INTERACTIVE" = true ]; then
read -p "Overwrite existing config? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "Skipped CLI configuration"
return
fi
else
log_info "Skipped CLI configuration (use --interactive to overwrite)"
return
fi
fi
# Create config
cat > "$cli_config" << 'EOF'
[general]
# Output format: table, json, yaml, plain
output_format = "table"
# Verbose output
verbose = false
# Use colors
use_colors = true
[database]
# Database backend: sqlite (default) or surrealdb
backend = "sqlite"
# SQLite path (relative to SYNTAXIS_DATA_DIR)
sqlite_path = "syntaxis.db"
[pagination]
# Items per page
items_per_page = 20
EOF
log_success "CLI configuration created"
}
# TUI Configuration
configure_tui() {
log_info "Configuring syntaxis-tui..."
local tui_config="$CONFIG_DIR/syntaxis-tui.toml"
if [ -f "$tui_config" ]; then
log_warn "syntaxis-tui.toml already exists"
if [ "$INTERACTIVE" = true ]; then
read -p "Overwrite existing config? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "Skipped TUI configuration"
return
fi
else
log_info "Skipped TUI configuration (use --interactive to overwrite)"
return
fi
fi
# Create config
cat > "$tui_config" << 'EOF'
[keybindings]
# vim-style navigation
move_up = "k"
move_down = "j"
move_left = "h"
move_right = "l"
# Actions
select = "Enter"
insert = "i"
edit = "e"
delete = "d"
save = ":w"
quit = ":q"
search = "/"
[colors]
# Theme: dark, light, solarized
theme = "dark"
[behavior]
# Enable mouse
enable_mouse = true
# Auto-save
auto_save = true
# Confirm before delete
confirm_delete = true
EOF
log_success "TUI configuration created"
}
# API Configuration
configure_api() {
log_info "Configuring syntaxis-api..."
local api_config="$CONFIG_DIR/syntaxis-api.toml"
if [ -f "$api_config" ]; then
log_warn "syntaxis-api.toml already exists"
if [ "$INTERACTIVE" = true ]; then
read -p "Overwrite existing config? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
log_info "Skipped API configuration"
return
fi
else
log_info "Skipped API configuration (use --interactive to overwrite)"
return
fi
fi
# Create config
cat > "$api_config" << 'EOF'
[server]
# Server address and port
host = "127.0.0.1"
port = 3000
# CORS settings
cors_enabled = true
cors_origins = ["http://localhost:3000", "http://localhost:8080"]
# Request logging
log_requests = true
[database]
# Backend: sqlite (default) or surrealdb
backend = "sqlite"
[database.sqlite]
# Database path
path = "syntaxis.db"
# Connection pool
pool_size = 5
# WAL mode
wal_mode = true
[features]
# Feature flags
auth_enabled = false
metrics_enabled = true
logging_enabled = true
EOF
log_success "API configuration created"
}
# Database Configuration
configure_database() {
log_info "Configuring database..."
local db_config="$CONFIG_DIR/database-default.toml"
if [ -f "$db_config" ]; then
log_info "SQLite config already exists"
else
# Create SQLite config
cat > "$db_config" << 'EOF'
[database]
type = "sqlite"
path = "syntaxis.db"
[database.connection]
pool_size = 5
max_connections = 20
wal_mode = true
journal_mode = "WAL"
synchronous = "NORMAL"
[migrations]
auto_migrate = true
EOF
log_success "SQLite configuration created"
fi
# SurrealDB config (optional)
local sdb_config="$CONFIG_DIR/database-surrealdb.toml"
if [ ! -f "$sdb_config" ]; then
cat > "$sdb_config" << 'EOF'
[database]
type = "surrealdb"
url = "file:///tmp/syntaxis.db"
# For remote: url = "http://localhost:8000"
namespace = "syntaxis"
database = "syntaxis"
[credentials]
username = "root"
password = "root"
[connection]
pool_size = 10
timeout = 30
EOF
log_info "SurrealDB config template created (optional)"
fi
}
# Interactive Setup
interactive_setup() {
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "syntaxis Configuration Setup"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Configuration directory: $CONFIG_DIR"
echo ""
read -p "Configure syntaxis-cli? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
configure_cli
fi
echo ""
read -p "Configure syntaxis-tui? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
configure_tui
fi
echo ""
read -p "Configure syntaxis-api? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
configure_api
fi
echo ""
read -p "Configure database? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
configure_database
fi
}
# Auto Setup (non-interactive)
auto_setup() {
log_info "Setting up default configuration..."
configure_cli
configure_tui
configure_api
configure_database
}
# Main
main() {
echo ""
echo "syntaxis Configuration Helper"
echo ""
if [ "$INTERACTIVE" = true ]; then
interactive_setup
else
auto_setup
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
log_success "Configuration setup complete"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Configuration files in: $CONFIG_DIR"
echo ""
echo "Next steps:"
echo " 1. Review config files: ls $CONFIG_DIR"
echo " 2. Edit if needed: nano $CONFIG_DIR/syntaxis-cli.toml"
echo " 3. Set environment: export SYNTAXIS_CONFIG_DIR=$CONFIG_DIR"
echo " 4. Run syntaxis: syntaxis-cli --version"
echo ""
}
main