#!/bin/bash # moreminimore-service-system installer # Works on macOS and Linux # Usage: bash install.sh [--vault-path PATH] [--skip-vault] [--skip-skills] set -euo pipefail # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # Defaults SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" VAULT_PATH="${VAULT_PATH:-$HOME/vault}" HERMES_HOME="${HERMES_HOME:-$HOME/.hermes}" SKIP_VAULT=false SKIP_SKILLS=false # Parse args while [[ $# -gt 0 ]]; do case $1 in --vault-path) VAULT_PATH="$2"; shift 2 ;; --skip-vault) SKIP_VAULT=true; shift ;; --skip-skills) SKIP_SKILLS=true; shift ;; --help|-h) echo "Usage: bash install.sh [OPTIONS]" echo "" echo "Options:" echo " --vault-path PATH Vault location (default: ~/vault)" echo " --skip-vault Don't copy vault templates" echo " --skip-skills Don't copy skills" echo " --help Show this help" exit 0 ;; *) echo "Unknown option: $1"; exit 1 ;; esac done echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo " moreminimore-service-system installer" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo " Vault: $VAULT_PATH" echo " Hermes: $HERMES_HOME" echo "" # Detect OS OS="$(uname -s)" case "$OS" in Darwin) PLATFORM="macos" ;; Linux) PLATFORM="linux" ;; *) echo -e "${RED}Unsupported OS: $OS${NC}"; exit 1 ;; esac echo -e "${GREEN}✓ Detected: $PLATFORM${NC}" # ─── 1. Install skills ─────────────────────────────────────────── if [ "$SKIP_SKILLS" = false ]; then echo "" echo "── Installing skills ──" SKILLS_DIR="$HERMES_HOME/skills" mkdir -p "$SKILLS_DIR" # mm* skills (9) for skill_dir in "$SCRIPT_DIR"/skills/mm-*/; do [ -d "$skill_dir" ] || continue skill_name=$(basename "$skill_dir") cp -r "$skill_dir" "$SKILLS_DIR/" echo -e " ${GREEN}✓${NC} $skill_name" done # Dependency skills (6) for skill in content-writer geo-optimizer post-formatter hook-generator graphic-designer; do src="$SCRIPT_DIR/skills/$skill" if [ -d "$src" ]; then cp -r "$src" "$SKILLS_DIR/" echo -e " ${GREEN}✓${NC} $skill (dependency)" fi done # xurl if [ -d "$SCRIPT_DIR/skills/xurl" ]; then mkdir -p "$SKILLS_DIR/social-media" cp -r "$SCRIPT_DIR/skills/xurl" "$SKILLS_DIR/social-media/" echo -e " ${GREEN}✓${NC} xurl (dependency)" fi # OrbitOS skills (15) for skill_dir in "$SCRIPT_DIR"/skills/orbitos/*/; do [ -d "$skill_dir" ] || continue skill_name=$(basename "$skill_dir") cp -r "$skill_dir" "$SKILLS_DIR/" echo -e " ${GREEN}✓${NC} $skill_name (orbitos)" done echo -e "${GREEN}✓ All skills installed${NC}" else echo -e "${YELLOW}⏭ Skipping skills${NC}" fi # ─── 2. Setup vault ────────────────────────────────────────────── if [ "$SKIP_VAULT" = false ]; then echo "" echo "── Setting up vault ──" mkdir -p "$VAULT_PATH" # Copy vault structure (don't overwrite existing files) for dir in 00_Inbox 10_Daily 20_Projects 30_Research 40_Wiki 50_Resources 60_Articles 90_Plans 99_System; do src="$SCRIPT_DIR/vault-structure/$dir" if [ -d "$src" ]; then mkdir -p "$VAULT_PATH/$dir" # Copy files that don't exist find "$src" -type f | while read -r file; do rel="${file#$src/}" dest="$VAULT_PATH/$dir/$rel" if [ ! -f "$dest" ]; then mkdir -p "$(dirname "$dest")" cp "$file" "$dest" fi done echo -e " ${GREEN}✓${NC} $dir/" fi done # Copy root vault files (don't overwrite) for file in .hermes.md AGENTS.md .gitignore; do src="$SCRIPT_DIR/vault-structure/$file" dest="$VAULT_PATH/$file" if [ -f "$src" ] && [ ! -f "$dest" ]; then cp "$src" "$dest" echo -e " ${GREEN}✓${NC} $file" fi done # Copy views (don't overwrite) if [ -d "$SCRIPT_DIR/vault-structure/views" ]; then mkdir -p "$VAULT_PATH/views" cp -n "$SCRIPT_DIR/vault-structure/views/"*.yml "$VAULT_PATH/views/" 2>/dev/null || true echo -e " ${GREEN}✓${NC} views/" fi # Copy .obsidian config (don't overwrite) if [ -d "$SCRIPT_DIR/vault-structure/.obsidian" ]; then mkdir -p "$VAULT_PATH/.obsidian" cp -n "$SCRIPT_DIR/vault-structure/.obsidian/"*.json "$VAULT_PATH/.obsidian/" 2>/dev/null || true echo -e " ${GREEN}✓${NC} .obsidian/" fi echo -e "${GREEN}✓ Vault structure ready${NC}" else echo -e "${YELLOW}⏭ Skipping vault${NC}" fi # ─── 3. Setup config ───────────────────────────────────────────── echo "" echo "── Setting up config ──" CONFIG_FILE="$VAULT_PATH/99_System/clients-config.json" CONFIG_TEMPLATE="$SCRIPT_DIR/config/clients-config.template.json" if [ ! -f "$CONFIG_FILE" ]; then if [ -f "$CONFIG_TEMPLATE" ]; then mkdir -p "$VAULT_PATH/99_System" cp "$CONFIG_TEMPLATE" "$CONFIG_FILE" echo -e " ${GREEN}✓${NC} clients-config.json created from template" echo -e " ${YELLOW}⚠ Edit $CONFIG_FILE to add credentials${NC}" fi else echo -e " ${GREEN}✓${NC} clients-config.json already exists" fi # ─── 4. Make scripts executable ────────────────────────────────── echo "" echo "── Scripts ──" chmod +x "$SCRIPT_DIR/scripts/"*.sh 2>/dev/null || true chmod +x "$SCRIPT_DIR/scripts/"*.py 2>/dev/null || true echo -e " ${GREEN}✓${NC} Scripts are executable" # ─── Done ──────────────────────────────────────────────────────── echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo -e " ${GREEN}✓ Installation complete!${NC}" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo " Skills: $HERMES_HOME/skills/" echo " Vault: $VAULT_PATH/" echo " Config: $CONFIG_FILE" echo "" echo " Next steps:" echo " 1. Edit $CONFIG_FILE with your credentials" echo " 2. Run: mm idea: [topic] to start" echo ""