syntaxis/scripts/provisioning/setup-config.sh
Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
Merge _configs/ into config/ for single configuration directory.
Update all path references.

Changes:
- Move _configs/* to config/
- Update .gitignore for new patterns
- No code references to _configs/ found

Impact: -1 root directory (layout_conventions.md compliance)
2025-12-26 18:36:23 +00:00

369 lines
7.3 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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