Forráskód Böngészése

docs: add wiki pages directory for automated wiki sync

xcad 2 hónapja
szülő
commit
c77186a385

+ 422 - 0
.wiki/Core-Concepts-Defaults.md

@@ -0,0 +1,422 @@
+# Default Variables
+
+Save time by setting default values for variables you use frequently. This page explains how to manage your default variable configuration.
+
+## What are Default Variables?
+
+**Default variables** are user-defined values that override module and template defaults. They allow you to:
+- Avoid repetitive typing during template generation
+- Standardize values across multiple templates
+- Customize your environment once, use everywhere
+
+## Precedence Order
+
+Variables are resolved in this order (lowest to highest priority):
+
+1. Module spec (module-wide defaults)
+2. Template spec (template-specific defaults)
+3. **User config** (your saved defaults) ← This page
+4. CLI arguments (`--var` flags)
+
+Your defaults override module and template values but can be overridden by CLI arguments.
+
+## Managing Defaults
+
+All default management commands follow this pattern:
+```bash
+boilerplates <module> defaults <command> [args]
+```
+
+### View Defaults
+
+List all saved defaults for a module:
+
+```bash
+boilerplates compose defaults list
+```
+
+Output:
+```
+Default Variables (Compose):
+  container_timezone: America/New_York
+  restart_policy: unless-stopped
+  traefik_network: traefik
+  network_external: true
+```
+
+### Set a Default
+
+Save a default value:
+
+```bash
+boilerplates compose defaults set container_timezone "America/New_York"
+```
+
+Response:
+```
+Set default: container_timezone = America/New_York
+```
+
+**Tips:**
+- Use quotes for values with spaces
+- Booleans: `true` or `false`
+- Numbers: no quotes needed
+
+**Examples:**
+```bash
+# String
+boilerplates compose defaults set restart_policy "unless-stopped"
+
+# Integer
+boilerplates compose defaults set user_uid 1000
+
+# Boolean
+boilerplates compose defaults set traefik_enabled true
+
+# String with spaces
+boilerplates compose defaults set container_hostname "my app server"
+```
+
+### Get a Default
+
+View a single default value:
+
+```bash
+boilerplates compose defaults get container_timezone
+```
+
+Output:
+```
+container_timezone: America/New_York
+```
+
+### Remove a Default
+
+Delete a saved default:
+
+```bash
+boilerplates compose defaults rm container_timezone
+```
+
+Response:
+```
+Removed default: container_timezone
+```
+
+The variable will now use module/template defaults again.
+
+### Clear All Defaults
+
+Remove all saved defaults for a module:
+
+```bash
+boilerplates compose defaults clear
+```
+
+Response:
+```
+Cleared all defaults for compose
+```
+
+**Warning:** This cannot be undone. Consider backing up your config first.
+
+## Configuration Storage
+
+Defaults are stored in:
+```
+~/.config/boilerplates/config.yaml
+```
+
+Example content:
+```yaml
+libraries:
+  - name: default
+    type: git
+    url: https://github.com/christianlempa/boilerplates
+    branch: main
+    directory: library
+
+defaults:
+  compose:
+    container_timezone: America/New_York
+    restart_policy: unless-stopped
+    traefik_network: traefik
+    network_external: true
+  terraform:
+    region: us-east-1
+    instance_type: t3.micro
+```
+
+### Manual Editing
+
+You can manually edit the config file:
+
+```bash
+# Edit configuration
+nano ~/.config/boilerplates/config.yaml
+
+# Verify defaults
+boilerplates compose defaults list
+```
+
+## Common Use Cases
+
+### Timezone Configuration
+
+Set your local timezone once:
+
+```bash
+boilerplates compose defaults set container_timezone "Europe/Berlin"
+```
+
+Now all Docker containers use your timezone by default.
+
+### Network Configuration
+
+Standardize network settings:
+
+```bash
+boilerplates compose defaults set network_external true
+boilerplates compose defaults set network_name "docker-network"
+```
+
+### Traefik Configuration
+
+Set common Traefik values:
+
+```bash
+boilerplates compose defaults set traefik_network "traefik"
+boilerplates compose defaults set traefik_domain "example.com"
+boilerplates compose defaults set traefik_tls_certresolver "cloudflare"
+```
+
+### User IDs
+
+Match your host user:
+
+```bash
+boilerplates compose defaults set user_uid $(id -u)
+boilerplates compose defaults set user_gid $(id -g)
+```
+
+### Restart Policy
+
+Standardize container behavior:
+
+```bash
+boilerplates compose defaults set restart_policy "unless-stopped"
+```
+
+## Overriding Defaults
+
+Even with defaults set, you can override them:
+
+### Interactive Mode
+
+During interactive generation, defaults appear as pre-filled values. Press Enter to accept or type a new value:
+
+```
+Container timezone [America/New_York]: Europe/London
+```
+
+### CLI Arguments
+
+Override with `--var`:
+
+```bash
+boilerplates compose generate nginx \
+  --var container_timezone="UTC" \
+  --no-interactive
+```
+
+The CLI argument takes precedence over your saved default.
+
+## Per-Module Defaults
+
+Each module has its own defaults:
+
+```bash
+# Compose defaults
+boilerplates compose defaults set restart_policy "unless-stopped"
+
+# Terraform defaults (separate)
+boilerplates terraform defaults set region "us-east-1"
+
+# Ansible defaults (separate)
+boilerplates ansible defaults set become true
+```
+
+Defaults don't transfer between modules—they're module-specific.
+
+## Backup and Restore
+
+### Backup Configuration
+
+Save your configuration:
+
+```bash
+cp ~/.config/boilerplates/config.yaml ~/boilerplates-config-backup.yaml
+```
+
+### Restore Configuration
+
+Restore from backup:
+
+```bash
+cp ~/boilerplates-config-backup.yaml ~/.config/boilerplates/config.yaml
+```
+
+### Share Configuration
+
+Share defaults with your team:
+
+```bash
+# Export defaults
+cat ~/.config/boilerplates/config.yaml | grep -A 100 "defaults:" > team-defaults.yaml
+
+# Share file with team
+# Team members can merge into their config.yaml
+```
+
+## Advanced Usage
+
+### Environment-Specific Defaults
+
+Maintain multiple configurations:
+
+```bash
+# Production defaults
+cp ~/.config/boilerplates/config.yaml ~/.config/boilerplates/config-prod.yaml
+
+# Development defaults
+cp ~/.config/boilerplates/config.yaml ~/.config/boilerplates/config-dev.yaml
+
+# Switch between them
+cp ~/.config/boilerplates/config-prod.yaml ~/.config/boilerplates/config.yaml
+```
+
+### Scripted Configuration
+
+Set defaults programmatically:
+
+```bash
+#!/bin/bash
+
+# Set common defaults
+boilerplates compose defaults set container_timezone "$(cat /etc/timezone)"
+boilerplates compose defaults set user_uid "$(id -u)"
+boilerplates compose defaults set user_gid "$(id -g)"
+boilerplates compose defaults set restart_policy "unless-stopped"
+```
+
+## Troubleshooting
+
+### Defaults Not Applied
+
+If defaults aren't being used:
+
+```bash
+# Verify defaults are set
+boilerplates compose defaults list
+
+# Check config file
+cat ~/.config/boilerplates/config.yaml
+
+# Ensure module name matches
+# "compose" not "docker-compose"
+```
+
+### Config File Errors
+
+If config file is corrupted:
+
+```bash
+# Validate YAML syntax
+python3 -c "import yaml; yaml.safe_load(open('~/.config/boilerplates/config.yaml'))"
+
+# Or remove and recreate
+mv ~/.config/boilerplates/config.yaml ~/.config/boilerplates/config.yaml.bak
+boilerplates repo update  # Recreates config
+```
+
+### Wrong Values
+
+If wrong values appear:
+
+```bash
+# Check precedence
+# 1. Module spec
+# 2. Template spec
+# 3. User defaults ← Check here
+# 4. CLI --var
+
+# Verify your defaults
+boilerplates compose defaults list
+
+# Check template spec
+boilerplates compose show <template-name>
+```
+
+## Best Practices
+
+### Essential Defaults
+
+Set these common defaults:
+
+```bash
+# System
+boilerplates compose defaults set container_timezone "$(cat /etc/timezone)"
+boilerplates compose defaults set user_uid $(id -u)
+boilerplates compose defaults set user_gid $(id -g)
+
+# Containers
+boilerplates compose defaults set restart_policy "unless-stopped"
+
+# Networking (if using external networks)
+boilerplates compose defaults set network_external true
+boilerplates compose defaults set network_name "docker-network"
+```
+
+### Don't Over-Configure
+
+Only set defaults for values you use consistently:
+
+**Good:**
+- Timezone (same everywhere)
+- User UID/GID (same everywhere)
+- Network settings (if standardized)
+
+**Bad:**
+- Service names (unique per service)
+- Hostnames (unique per service)
+- Port numbers (conflict-prone)
+
+### Document Your Defaults
+
+Keep a list of your defaults for reference:
+
+```bash
+# Save to file
+boilerplates compose defaults list > ~/my-defaults.txt
+```
+
+### Review Periodically
+
+Check your defaults occasionally:
+
+```bash
+boilerplates compose defaults list
+```
+
+Remove obsolete or unused values.
+
+## Next Steps
+
+- [Libraries](Core-Concepts-Libraries) - Managing template libraries
+- [Variables](Core-Concepts-Variables) - Understanding variable types and behavior
+- [Getting Started](Getting-Started) - Using defaults in template generation
+
+## See Also
+
+- [Installation](Installation) - CLI setup
+- [Concepts](Core-Concepts-Templates) - How templates work

+ 392 - 0
.wiki/Core-Concepts-Libraries.md

@@ -0,0 +1,392 @@
+# Libraries
+
+Libraries are collections of templates that can be synced from Git repositories or loaded from local directories. This page explains how to manage template libraries.
+
+## What is a Library?
+
+A **library** is a collection of templates organized by module type (compose, terraform, ansible, etc.). Libraries can be:
+- **Git-based** - Synced from remote repositories
+- **Static** - Local directories on your filesystem
+
+## Default Library
+
+By default, Boilerplates uses the official template library:
+
+```
+Name: default
+URL: https://github.com/christianlempa/boilerplates
+Branch: main
+Directory: library
+```
+
+This provides production-ready templates for various services and infrastructure.
+
+## Library Location
+
+Libraries are stored locally at:
+```
+~/.config/boilerplates/libraries/
+└── default/
+    └── library/
+        ├── compose/
+        ├── terraform/
+        └── ansible/
+```
+
+## Managing Libraries
+
+### List Libraries
+
+View all configured libraries:
+
+```bash
+boilerplates repo list
+```
+
+Output:
+```
+Libraries:
+  default (git)
+    URL: https://github.com/christianlempa/boilerplates
+    Branch: main
+    Directory: library
+    Status: Synced
+```
+
+### Update Libraries
+
+Sync all Git-based libraries:
+
+```bash
+boilerplates repo update
+```
+
+This:
+- Pulls latest changes from Git repositories
+- Uses sparse-checkout (only downloads template directories)
+- Updates metadata cache
+
+### Add Custom Library
+
+Add your own template library:
+
+```bash
+boilerplates repo add my-templates https://github.com/user/templates \
+  --directory library \
+  --branch main
+```
+
+Parameters:
+- **name** - Unique library identifier
+- **url** - Git repository URL
+- **--directory** - Path to templates within repository (default: `.`)
+- **--branch** - Git branch to use (default: `main`)
+
+### Remove Library
+
+Remove a library from configuration:
+
+```bash
+boilerplates repo remove my-templates
+```
+
+This removes the configuration but keeps downloaded files. To fully clean up:
+
+```bash
+rm -rf ~/.config/boilerplates/libraries/my-templates
+```
+
+## Library Types
+
+### Git Libraries
+
+Synced from remote Git repositories:
+
+```yaml
+libraries:
+  - name: default
+    type: git
+    url: https://github.com/christianlempa/boilerplates
+    branch: main
+    directory: library
+```
+
+**Benefits:**
+- Always up-to-date
+- Version controlled
+- Easy to share
+- Automatic updates
+
+**Use cases:**
+- Official templates
+- Team-shared templates
+- Public template collections
+
+### Static Libraries
+
+Local directories on your filesystem:
+
+```yaml
+libraries:
+  - name: local
+    type: static
+    path: ~/my-templates
+```
+
+**Benefits:**
+- No network required
+- Full control
+- Fast access
+- Development/testing
+
+**Use cases:**
+- Local development
+- Private templates
+- Custom modifications
+- Testing new templates
+
+## Library Priority
+
+When multiple libraries contain the same template, **priority** determines which is used:
+
+```yaml
+libraries:
+  - name: local      # Priority 1 (highest)
+    type: static
+    path: ~/my-templates
+  - name: default    # Priority 2
+    type: git
+    url: https://github.com/christianlempa/boilerplates
+```
+
+### Simple IDs
+
+Use the template name without qualification:
+
+```bash
+boilerplates compose generate nginx
+```
+
+The CLI uses the first matching template (from `local` in the example above).
+
+### Qualified IDs
+
+Target a specific library:
+
+```bash
+boilerplates compose generate nginx.local    # Uses local library
+boilerplates compose generate nginx.default  # Uses default library
+```
+
+## Configuration File
+
+Library configuration is stored in:
+```
+~/.config/boilerplates/config.yaml
+```
+
+Example:
+```yaml
+libraries:
+  - name: default
+    type: git
+    url: https://github.com/christianlempa/boilerplates
+    branch: main
+    directory: library
+  - name: local
+    type: static
+    path: /Users/me/my-templates
+```
+
+### Manual Editing
+
+You can manually edit `config.yaml`:
+
+```bash
+# Edit configuration
+nano ~/.config/boilerplates/config.yaml
+
+# Verify changes
+boilerplates repo list
+```
+
+## Advanced Usage
+
+### Multiple Git Branches
+
+Use different branches for stable vs. development templates:
+
+```yaml
+libraries:
+  - name: stable
+    type: git
+    url: https://github.com/user/templates
+    branch: main
+    directory: library
+  - name: dev
+    type: git
+    url: https://github.com/user/templates
+    branch: development
+    directory: library
+```
+
+### Sparse Checkout
+
+Git libraries use sparse-checkout to minimize disk usage:
+
+```
+# Only downloads:
+library/compose/
+library/terraform/
+library/ansible/
+
+# Ignores:
+.github/
+docs/
+tests/
+README.md
+```
+
+This keeps library downloads fast and disk usage low.
+
+### Private Repositories
+
+For private Git repositories, ensure SSH or HTTPS authentication is configured:
+
+**SSH:**
+```bash
+boilerplates repo add private git@github.com:user/private-templates.git \
+  --directory library \
+  --branch main
+```
+
+Requires SSH key configured with GitHub/GitLab.
+
+**HTTPS with credentials:**
+```bash
+# Configure Git credential helper
+git config --global credential.helper store
+
+# Add library (will prompt for credentials on first sync)
+boilerplates repo add private https://github.com/user/private-templates.git \
+  --directory library \
+  --branch main
+```
+
+## Template Discovery
+
+After adding libraries, templates are discovered automatically:
+
+```bash
+# Sync libraries
+boilerplates repo update
+
+# List templates from all libraries
+boilerplates compose list
+
+# Show template details (uses priority order)
+boilerplates compose show nginx
+
+# Show from specific library
+boilerplates compose show nginx.local
+```
+
+## Troubleshooting
+
+### Library Not Syncing
+
+If `repo update` fails:
+
+```bash
+# Check network connectivity
+ping github.com
+
+# Verify Git access
+git ls-remote https://github.com/christianlempa/boilerplates
+
+# Remove and re-add library
+boilerplates repo remove default
+boilerplates repo add default https://github.com/christianlempa/boilerplates \
+  --directory library \
+  --branch main
+```
+
+### Templates Not Found
+
+If templates don't appear:
+
+```bash
+# Verify library is configured
+boilerplates repo list
+
+# Update libraries
+boilerplates repo update
+
+# Check library directory structure
+ls -la ~/.config/boilerplates/libraries/default/library/compose/
+```
+
+### Duplicate Template Names
+
+If two libraries have the same template:
+
+```bash
+# Check which library provides it
+boilerplates compose show nginx
+
+# Use qualified ID to target specific library
+boilerplates compose generate nginx.local
+```
+
+## Best Practices
+
+### Library Organization
+
+Structure your libraries consistently:
+
+```
+my-templates/
+├── library/
+│   ├── compose/
+│   │   ├── app1/
+│   │   └── app2/
+│   ├── terraform/
+│   └── ansible/
+└── README.md
+```
+
+### Version Control
+
+For Git libraries:
+- Use semantic versioning tags
+- Maintain a CHANGELOG
+- Test templates before merging
+- Use branches for development
+
+### Naming
+
+- Use descriptive library names
+- Avoid special characters
+- Keep names short but meaningful
+
+**Good:** `production`, `dev`, `team-infra`  
+**Bad:** `my-lib-123`, `temp`, `new`
+
+### Documentation
+
+Each library should have:
+- README.md with overview
+- Template documentation
+- Usage examples
+- Contribution guidelines
+
+## Next Steps
+
+- [Default Variables](Core-Concepts-Defaults) - Managing variable defaults
+- [Templates](Core-Concepts-Templates) - Understanding template structure
+- [Developer Guide](Developers-Templates) - Creating templates for libraries
+
+## See Also
+
+- [Getting Started](Getting-Started) - Your first template
+- [Installation](Installation) - Installing the CLI

+ 386 - 0
.wiki/Core-Concepts-Templates.md

@@ -0,0 +1,386 @@
+# Templates
+
+Templates are the core building blocks of the Boilerplates CLI. This page explains what templates are, how they work, and how to use them effectively.
+
+## What is a Template?
+
+A template is a **directory-based configuration package** that contains:
+- **Metadata** - Name, description, version, author information
+- **Variable specifications** - Configurable parameters
+- **Template files** - Jinja2 templates that generate your configuration
+- **Static files** - Files copied as-is (optional)
+
+When you generate a template, the CLI:
+1. Prompts you for variable values (or uses defaults/CLI overrides)
+2. Renders template files using Jinja2
+3. Writes the generated files to your specified directory
+
+## Template Structure
+
+Every template is a directory containing at minimum a `template.yaml` file:
+
+```
+template-name/
+├── template.yaml          # Template definition and metadata
+├── docker-compose.yml.j2  # Jinja2 template files
+├── .env.j2               # Environment configuration
+└── README.md             # Static file (copied as-is)
+```
+
+### The template.yaml File
+
+This file defines everything about your template:
+
+```yaml
+---
+kind: compose              # Module type (compose, terraform, ansible, etc.)
+schema: "X.Y"             # Schema version (affects available features)
+metadata:
+  name: My Service
+  description: Service description with Markdown support
+  version: 1.0.0          # Application/service version
+  author: Your Name
+  date: '2025-01-12'
+  tags:
+    - docker
+    - service
+spec:
+  # Variable specifications (see Variables page)
+```
+
+## Template Discovery
+
+Templates are organized in **libraries**. A library is a collection of templates for a specific module type.
+
+### Default Library Structure
+
+```
+~/.config/boilerplates/libraries/
+└── default/
+    └── library/
+        ├── compose/
+        │   ├── nginx/
+        │   ├── traefik/
+        │   └── whoami/
+        ├── terraform/
+        └── ansible/
+```
+
+### Finding Templates
+
+```bash
+# List all templates for a module
+boilerplates compose list
+
+# Search templates by name
+boilerplates compose search proxy
+
+# Show details about a template
+boilerplates compose show nginx
+```
+
+## Template Metadata
+
+### Required Fields
+
+```yaml
+metadata:
+  name: Template Name        # Display name
+  description: Description   # What the template does
+  version: 1.0.0            # Application version
+  author: Your Name         # Template author
+  date: '2025-01-12'       # Last update date
+```
+
+### Optional Fields
+
+```yaml
+metadata:
+  tags:                     # Searchable tags
+    - docker
+    - web-server
+  draft: false             # Hide from listings if true
+  next_steps: |            # Post-generation instructions
+    ## What's Next
+    1. Review the generated files
+    2. Customize as needed
+    3. Deploy!
+```
+
+### Description Markdown
+
+The `description` field supports Markdown:
+
+```yaml
+metadata:
+  description: |
+    A **powerful reverse proxy** and load balancer.
+    
+    ## Features
+    - Automatic HTTPS
+    - Load balancing
+    - Let's Encrypt integration
+    
+    ## Resources
+    - **Project**: https://traefik.io
+    - **Documentation**: https://doc.traefik.io
+```
+
+This renders nicely when you run `boilerplates compose show <template>`.
+
+## Template Files
+
+### Jinja2 Templates
+
+Files ending in `.j2` are processed by Jinja2:
+
+**docker-compose.yml.j2:**
+```yaml
+services:
+  {{ service_name }}:
+    image: nginx:{{ nginx_version }}
+    ports:
+      - "{{ nginx_port }}:80"
+    {% if enable_ssl %}
+    volumes:
+      - ./ssl:/etc/nginx/ssl
+    {% endif %}
+```
+
+After rendering with variables:
+- `service_name=web`
+- `nginx_version=1.25`
+- `nginx_port=8080`
+- `enable_ssl=true`
+
+**Generated docker-compose.yml:**
+```yaml
+services:
+  web:
+    image: nginx:1.25
+    ports:
+      - "8080:80"
+    volumes:
+      - ./ssl:/etc/nginx/ssl
+```
+
+### Static Files
+
+Files without `.j2` extension are copied as-is:
+- `README.md` - Copied unchanged
+- `scripts/setup.sh` - Copied unchanged
+
+### File Includes
+
+Templates can include other template files:
+
+**main.j2:**
+```jinja2
+{% include 'common/header.j2' %}
+
+services:
+  {{ service_name }}:
+    image: nginx:latest
+```
+
+**common/header.j2:**
+```yaml
+version: '3.8'
+name: {{ project_name }}
+```
+
+## Schema Versioning
+
+Templates declare a schema version that determines available features:
+
+```yaml
+schema: "X.Y"  # Use schema version X.Y (e.g., "1.0", "1.2")
+```
+
+**Why Schema Versions?**
+- Modules evolve with new features over time
+- Older templates continue working (backward compatibility)
+- Templates opt-into new features by upgrading schema version
+
+**Checking Current Schema:**
+
+To find the latest schema version and available features for each module, refer to the module-specific variable documentation:
+- [Compose Variables](Variables-Compose) - Shows current schema version at bottom
+- [Terraform Variables](Variables-Terraform)
+- [Ansible Variables](Variables-Ansible)
+- [Kubernetes Variables](Variables-Kubernetes)
+- [Helm Variables](Variables-Helm)
+- [Packer Variables](Variables-Packer)
+
+Each Variables page documents the current schema and which features are available.
+
+## Template Lifecycle
+
+### 1. Discovery
+
+```bash
+boilerplates repo update    # Sync libraries
+boilerplates compose list   # Discover templates
+```
+
+### 2. Preview
+
+```bash
+boilerplates compose show nginx
+```
+
+Shows:
+- Metadata
+- Variable specifications
+- File structure
+
+### 3. Generation
+
+```bash
+# Interactive mode
+boilerplates compose generate nginx
+
+# Non-interactive mode
+boilerplates compose generate nginx ./my-nginx \
+  --var service_name=my-nginx \
+  --no-interactive
+```
+
+### 4. Validation (Optional)
+
+```bash
+# Validate template structure
+boilerplates compose validate nginx
+
+# Validate all templates
+boilerplates compose validate
+```
+
+## Template Identification
+
+Templates are identified by their directory name:
+
+```
+library/compose/nginx/   → template ID: nginx
+library/compose/traefik/ → template ID: traefik
+```
+
+### Qualified IDs
+
+When using multiple libraries, templates can have qualified IDs:
+
+```bash
+# Simple ID (uses first matching template from priority order)
+boilerplates compose generate nginx
+
+# Qualified ID (targets specific library)
+boilerplates compose generate nginx.local
+boilerplates compose generate nginx.default
+```
+
+## Template Inheritance
+
+Templates inherit variables from module specifications. You only need to override what's different.
+
+**Module spec defines:**
+- `service_name` (default: empty)
+- `container_port` (default: 8080)
+- `restart_policy` (default: unless-stopped)
+
+**Template overrides:**
+```yaml
+spec:
+  general:
+    vars:
+      service_name:
+        default: nginx  # Override default
+      # container_port inherits 8080
+      # restart_policy inherits unless-stopped
+```
+
+This keeps templates concise—you only specify what's unique.
+
+## Best Practices
+
+### Naming Conventions
+
+- **Template directories**: lowercase, hyphen-separated (`my-service`, `nginx-proxy`)
+- **Service names**: match template name by default
+- **File names**: descriptive and clear (`docker-compose.yml.j2`, not `dc.j2`)
+
+### Version Management
+
+**Application Versions:**
+- Hardcode in template files: `image: nginx:1.25.3`
+- Update `metadata.version` to match application
+- Don't create version variables unless necessary
+
+**Template Updates:**
+- Increment `metadata.version` when updating
+- Update `metadata.date` to current date
+- Document changes in commit messages
+
+### Documentation
+
+- Use Markdown in `description`
+- Provide `next_steps` for post-generation instructions
+- Include links to official documentation
+- Add usage examples
+
+### Testing
+
+Before publishing:
+```bash
+# Validate template
+boilerplates compose validate my-template
+
+# Test generation (dry run)
+boilerplates compose generate my-template --dry-run
+
+# Test with real generation
+boilerplates compose generate my-template /tmp/test
+
+# Verify generated files
+cd /tmp/test && docker compose config
+```
+
+## Advanced Features
+
+### Conditional File Generation
+
+Use Jinja2 conditionals to skip entire sections:
+
+```jinja2
+{% if traefik_enabled %}
+    labels:
+      - "traefik.enable=true"
+      - "traefik.http.routers.{{ service_name }}.rule=Host(`{{ traefik_host }}`)"
+{% endif %}
+```
+
+### Dynamic File Names
+
+Template file names can use variables (though this is rare):
+
+```
+config-{{ environment }}.yml.j2  # Generates: config-prod.yml
+```
+
+### Template Validation
+
+Templates are validated on load:
+- Jinja2 syntax errors detected
+- Undefined variables reported
+- Schema compatibility checked
+
+## Next Steps
+
+- [Variables](Core-Concepts-Variables) - Learn about variable types and configuration
+- [Configuration](Core-Concepts-Libraries) - Manage template libraries
+- [Variable Reference](Variables-Compose) - Complete variable documentation for modules
+- [Developer Guide](Developers-Templates) - Create your own templates
+
+## See Also
+
+- [Getting Started](Getting-Started) - Generate your first template
+- [Installation](Installation) - Install the CLI

+ 558 - 0
.wiki/Core-Concepts-Variables.md

@@ -0,0 +1,558 @@
+# Variables
+
+Variables are the configurable parameters that customize your templates. This page explains variable types, sections, dependencies, and how to work with them effectively.
+
+## What are Variables?
+
+Variables are **parameters** that control template generation. They can be:
+- Simple values (strings, numbers, booleans)
+- Selections from options (enums)
+- Validated inputs (emails, URLs, hostnames)
+
+**Example:**
+```yaml
+service_name: my-app        # String
+container_port: 8080        # Integer
+traefik_enabled: true       # Boolean
+restart_policy: unless-stopped  # Enum (selection from options)
+```
+
+## Variable Types
+
+### String (`str`)
+
+Text values with optional constraints:
+
+```yaml
+service_name:
+  type: str
+  description: Service name
+  default: my-service
+```
+
+**Usage:**
+- Service names
+- Hostnames
+- Paths
+- General text
+
+### Integer (`int`)
+
+Whole numbers:
+
+```yaml
+container_port:
+  type: int
+  description: Container port
+  default: 8080
+```
+
+**Usage:**
+- Port numbers
+- UIDs/GIDs
+- Counts and limits
+
+### Float (`float`)
+
+Decimal numbers:
+
+```yaml
+cpu_limit:
+  type: float
+  description: CPU limit in cores
+  default: 1.5
+```
+
+**Usage:**
+- Resource limits
+- Ratios and percentages
+
+### Boolean (`bool`)
+
+True/false values:
+
+```yaml
+traefik_enabled:
+  type: bool
+  description: Enable Traefik integration
+  default: false
+```
+
+**Usage:**
+- Feature toggles
+- Conditional configuration
+- Enable/disable options
+
+### Enum (`enum`)
+
+Selection from predefined options:
+
+```yaml
+restart_policy:
+  type: enum
+  description: Container restart policy
+  options: [unless-stopped, always, on-failure, no]
+  default: unless-stopped
+```
+
+**Usage:**
+- Network modes (bridge, host, macvlan)
+- Log levels (debug, info, warn, error)
+- Policies and strategies
+
+### Email (`email`)
+
+Email addresses with validation:
+
+```yaml
+admin_email:
+  type: email
+  description: Administrator email
+  default: admin@example.com
+```
+
+**Validation:**
+- Must match email format (user@domain.com)
+- Rejects invalid email addresses
+
+### URL (`url`)
+
+Full URLs with scheme validation:
+
+```yaml
+api_endpoint:
+  type: url
+  description: API endpoint URL
+  default: https://api.example.com
+```
+
+**Validation:**
+- Must include scheme (http://, https://)
+- Must have valid host
+
+### Hostname (`hostname`)
+
+Domain names or hostnames:
+
+```yaml
+traefik_host:
+  type: hostname
+  description: Service hostname
+  default: app.example.com
+```
+
+**Validation:**
+- Valid DNS hostname format
+- Accepts subdomains and domains
+
+## Variable Properties
+
+Every variable can have these properties:
+
+```yaml
+variable_name:
+  type: str                    # Variable type (required)
+  description: Description     # Help text
+  default: value               # Default value
+  prompt: Custom prompt text   # Override description in prompts
+  extra: Additional help       # Extended help text
+  sensitive: false             # Mask input (for passwords)
+  autogenerated: false         # Auto-generate if empty
+  needs: condition             # Dependency constraint
+```
+
+### Sensitive Variables
+
+Mask input for passwords and secrets:
+
+```yaml
+admin_password:
+  type: str
+  description: Administrator password
+  sensitive: true
+```
+
+**Behavior:**
+- Input is masked in prompts (`********`)
+- Displayed as `***` in output
+- Suitable for passwords, API keys, tokens
+
+### Autogenerated Variables
+
+Automatically generate values if not provided:
+
+```yaml
+secret_key:
+  type: str
+  description: Secret key
+  autogenerated: true
+```
+
+**Behavior:**
+- Shows `*auto` placeholder in prompts
+- Generates value during rendering if empty
+- Press Enter to accept auto-generation
+
+### Custom Prompts
+
+Override the description text in interactive prompts:
+
+```yaml
+service_name:
+  description: Service name (used in docker-compose)
+  prompt: Enter service name
+```
+
+## Variable Sections
+
+Variables are organized into **sections** that group related configuration:
+
+```yaml
+spec:
+  general:        # Required by default
+    title: General Settings
+    vars:
+      service_name: {...}
+      container_port: {...}
+  
+  networking:     # Optional section
+    title: Network Configuration
+    toggle: networking_enabled
+    vars:
+      network_name: {...}
+      network_mode: {...}
+```
+
+### Required Sections
+
+Sections marked as `required: true` must be configured:
+
+```yaml
+general:
+  title: General
+  required: true
+  vars:
+    service_name: {...}
+```
+
+**Behavior:**
+- Users must provide values
+- No way to skip
+- `general` section is implicitly required
+
+### Optional Sections
+
+Sections with a toggle variable:
+
+```yaml
+traefik:
+  title: Traefik
+  toggle: traefik_enabled
+  vars:
+    traefik_host: {...}
+    traefik_network: {...}
+```
+
+**Behavior:**
+- User chooses whether to enable
+- If disabled, section variables are skipped
+- Toggle variable is auto-created as boolean
+
+### Section Dependencies
+
+Sections can depend on other sections:
+
+```yaml
+traefik_tls:
+  title: Traefik TLS/SSL
+  needs: traefik
+  vars:
+    traefik_tls_enabled: {...}
+```
+
+**Behavior:**
+- Only shown if dependency section is enabled
+- Supports multiple dependencies: `needs: [traefik, networking]`
+- Automatically sorted in dependency order
+
+## Variable Dependencies
+
+Variables can depend on other variables using `needs` constraints:
+
+### Simple Constraint
+
+Variable only visible when condition is met:
+
+```yaml
+network_name:
+  type: str
+  description: Network name
+  needs: network_mode=bridge
+```
+
+**Behavior:**
+- Only shown when `network_mode` equals `bridge`
+- Hidden for other network modes
+
+### Multiple Values (OR)
+
+Variable visible for multiple values:
+
+```yaml
+network_name:
+  type: str
+  description: Network name
+  needs: network_mode=bridge,macvlan
+```
+
+**Behavior:**
+- Shown when `network_mode` is `bridge` OR `macvlan`
+- Hidden when `network_mode` is `host`
+
+### Multiple Constraints (AND)
+
+Variable requires multiple conditions:
+
+```yaml
+traefik_tls_certresolver:
+  type: str
+  description: Certificate resolver
+  needs: traefik_enabled=true;network_mode=bridge
+```
+
+**Behavior:**
+- Requires ALL conditions to be true
+- Semicolon (`;`) separates conditions
+- Comma (`,`) within a condition is OR
+
+## Variable Precedence
+
+Variables are resolved in priority order (lowest to highest):
+
+1. **Module spec** - Default values for all templates
+2. **Template spec** - Template-specific overrides
+3. **User config** - Saved defaults in `~/.config/boilerplates/config.yaml`
+4. **CLI arguments** - `--var` flags
+
+**Example:**
+
+```bash
+# Module default: restart_policy=unless-stopped
+# Template override: restart_policy=always
+# User config: restart_policy=on-failure
+# CLI override: --var restart_policy=no
+
+# Result: restart_policy=no (CLI wins)
+```
+
+### Setting Default Values
+
+Save frequently used values:
+
+```bash
+# Set a default
+boilerplates compose defaults set container_timezone "America/New_York"
+
+# View all defaults
+boilerplates compose defaults list
+
+# Remove a default
+boilerplates compose defaults rm container_timezone
+
+# Clear all defaults
+boilerplates compose defaults clear
+```
+
+## Interactive Prompts
+
+When generating templates interactively, the CLI prompts for each variable:
+
+### Text Input
+
+```
+Service name: |my-app|
+```
+
+- Type your value or press Enter for default
+- Default shown in brackets
+
+### Boolean Input
+
+```
+Enable Traefik? (y/n) [n]:
+```
+
+- `y` or `yes` for true
+- `n` or `no` for false
+- Press Enter for default
+
+### Enum Selection
+
+```
+Restart policy:
+  1) unless-stopped (default)
+  2) always
+  3) on-failure
+  4) no
+Select [1]:
+```
+
+- Enter number to select
+- Press Enter for default
+
+### Sensitive Input
+
+```
+Admin password: ********
+```
+
+- Input is masked
+- Not echoed to terminal
+
+## Non-Interactive Mode
+
+Skip prompts entirely using `--no-interactive`:
+
+```bash
+boilerplates compose generate nginx ./output \
+  --var service_name=my-nginx \
+  --var container_port=8080 \
+  --no-interactive
+```
+
+**Behavior:**
+- Uses defaults for all variables
+- No user interaction required
+- Suitable for automation and CI/CD
+
+## Variable Validation
+
+### At Prompt Time
+
+Variables are validated during prompts:
+- Type checking (int must be number)
+- Format validation (email, URL, hostname)
+- Option validation (enum must be in options list)
+
+**Example:**
+```
+Container port: abc
+Error: Must be a valid integer
+Container port:
+```
+
+### At Template Load
+
+Templates are validated when loaded:
+- Check for undefined variables used in templates
+- Verify variable dependencies are valid
+- Ensure no circular dependencies
+
+## Advanced Features
+
+### Template Variable Inheritance
+
+Templates inherit ALL variables from their module schema. You only override what's different:
+
+**Module defines:**
+```yaml
+general:
+  vars:
+    service_name:
+      type: str
+    container_port:
+      type: int
+      default: 8080
+```
+
+**Template overrides:**
+```yaml
+spec:
+  general:
+    vars:
+      service_name:
+        default: nginx  # Only override default
+      # container_port inherits 8080
+```
+
+### Dynamic Visibility
+
+Variables with `needs` constraints are dynamically shown/hidden based on other values:
+
+```bash
+# If user selects network_mode=host
+# → Network name prompt is skipped (needs: network_mode=bridge)
+
+# If user selects network_mode=bridge
+# → Network name prompt is shown
+```
+
+### Dependency Resolution
+
+The CLI automatically:
+- Topologically sorts sections based on dependencies
+- Validates no circular dependencies exist
+- Reports errors for missing dependencies
+
+## Best Practices
+
+### Naming Conventions
+
+- Use **snake_case** for variable names
+- Group related variables with common prefixes:
+  - `traefik_*` for Traefik variables
+  - `network_*` for networking variables
+  - `ports_*` for port configuration
+
+### Provide Good Defaults
+
+- Choose sensible defaults for common use cases
+- Use empty defaults when user input is required
+- Document why a default was chosen
+
+### Use Descriptions
+
+- Clear, concise descriptions
+- Explain what the variable controls
+- Include examples if helpful
+
+**Good:**
+```yaml
+traefik_host:
+  description: Service subdomain or full hostname (e.g., 'app' or 'app.example.com')
+```
+
+**Bad:**
+```yaml
+traefik_host:
+  description: Host
+```
+
+### Group Related Variables
+
+Use sections to organize configuration:
+
+```yaml
+spec:
+  general:        # Core configuration
+  network:        # Network settings
+  traefik:        # Reverse proxy
+  traefik_tls:    # TLS/SSL configuration
+```
+
+### Use Dependencies Wisely
+
+- Keep dependency chains short
+- Avoid overly complex conditions
+- Test dependency behavior thoroughly
+
+## Next Steps
+
+- [Configuration](Core-Concepts-Defaults) - Managing default values
+- [Variable Reference](Variables-Compose) - Complete variable list for each module
+- [Templates](Core-Concepts-Templates) - How variables are used in templates
+
+## See Also
+
+- [Getting Started](Getting-Started) - Your first template generation
+- [Developer Guide](Developers-Templates) - Creating templates with variables

+ 305 - 0
.wiki/Getting-Started.md

@@ -0,0 +1,305 @@
+# Getting Started
+
+Welcome to Boilerplates! This guide will help you get up and running in just a few minutes.
+
+## Overview
+
+Boilerplates provides two main components:
+
+### Template Library
+
+A collection of ready-to-use templates for common infrastructure components:
+- **Docker Compose**: Containerized applications (Nginx, Traefik, Grafana, etc.)
+- **Terraform**: Cloud infrastructure (AWS, Azure, GCP)
+- **Ansible**: Configuration management and automation
+- **Kubernetes**: Container orchestration deployments
+- **Packer**: Machine image builders
+
+Templates include:
+- Pre-configured defaults for common use cases
+- Documentation and usage examples
+- Variable specifications for customization
+- Best practices baked in
+
+### Management CLI
+
+A Python-based command-line tool to work with templates:
+- Browse and search the template library
+- Interactive configuration with validation
+- Generate customized templates
+- Manage multiple template libraries (official + custom)
+- Sync updates from repositories
+
+## Prerequisites
+
+Before you begin, ensure you have:
+
+- Python 3.10 or higher installed
+- Git installed (for syncing template libraries)
+- Basic command-line knowledge
+- Internet connection (for downloading templates)
+
+## Installation
+
+The quickest way to install the management CLI is using the automated installer:
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/christianlempa/boilerplates/main/scripts/install.sh | bash
+```
+
+This installs the `boilerplates` command and configures access to the official template library.
+
+For detailed installation instructions including platform-specific guidance, see the [Installation](Installation) page.
+
+## Your First Template
+
+Once installed, let's generate your first template!
+
+### 1. Sync the Template Library
+
+Download the latest templates from the library:
+
+```bash
+boilerplates repo update
+```
+
+This syncs the official template library to `~/.config/boilerplates/libraries/default/`.
+
+### 2. Browse the Template Library
+
+Explore available Docker Compose templates:
+
+```bash
+boilerplates compose list
+```
+
+You'll see a table showing available templates from the library with their descriptions.
+
+### 3. Inspect a Template
+
+Before generating, preview a template's structure and variables:
+
+```bash
+boilerplates compose show nginx
+```
+
+This shows:
+- Template metadata (name, version, author, description)
+- Available configuration variables and defaults
+- Template file structure
+- Variable dependencies and sections
+
+### 4. Generate Files from Template
+
+Now, let's use the CLI to generate customized files from a template! You have two options:
+
+**Interactive Mode** (Recommended for beginners):
+
+```bash
+boilerplates compose generate nginx
+```
+
+The tool prompts you for each variable. You can:
+- Press Enter to accept defaults from the template
+- Type custom values
+- Navigate with arrow keys for selections
+- Skip optional sections
+
+**Non-Interactive Mode** (For automation):
+
+```bash
+boilerplates compose generate nginx my-nginx \
+  --var service_name=my-nginx \
+  --var container_port=8080 \
+  --no-interactive
+```
+
+This uses template defaults and provided variables without prompts.
+
+### 5. Review Generated Files
+
+After generation, you'll find:
+
+```
+my-nginx/
+├── docker-compose.yml
+└── .env
+```
+
+Review the files and adjust as needed for your environment.
+
+## Basic Commands
+
+Here are the essential commands you'll use regularly:
+
+### Library Management
+
+Manage template library repositories:
+
+```bash
+# Sync official template library
+boilerplates repo update
+
+# List all configured libraries
+boilerplates repo list
+
+# Add a custom template library
+boilerplates repo add my-templates https://github.com/user/templates \
+  --directory library \
+  --branch main
+```
+
+### Working with Templates
+
+Discover and use templates from the library:
+
+```bash
+# Browse available templates
+boilerplates compose list
+
+# Search the library
+boilerplates compose search nginx
+
+# Inspect template structure
+boilerplates compose show nginx
+
+# Generate files from template
+boilerplates compose generate nginx ./output
+
+# Validate template syntax
+boilerplates compose validate
+```
+
+### Working with Defaults
+
+Save frequently used values to avoid repetitive typing:
+
+```bash
+# Set a default value
+boilerplates compose defaults set container_timezone "America/New_York"
+
+# View all defaults
+boilerplates compose defaults list
+
+# Remove a default
+boilerplates compose defaults rm container_timezone
+
+# Clear all defaults
+boilerplates compose defaults clear
+```
+
+## Common Workflows
+
+### Workflow 1: Quick Generation with Defaults
+
+Use template defaults without customization:
+
+```bash
+boilerplates compose generate portainer --no-interactive
+```
+
+### Workflow 2: Interactive Customization
+
+Customize template variables interactively:
+
+```bash
+boilerplates compose show traefik         # Review template structure
+boilerplates compose generate traefik     # Customize via prompts
+```
+
+### Workflow 3: Automation
+
+For scripts and CI/CD pipelines:
+
+```bash
+boilerplates compose generate authentik ./auth \
+  --var service_name=authentik \
+  --var traefik_enabled=true \
+  --var traefik_host=auth.example.com \
+  --no-interactive \
+  --dry-run  # Preview first
+```
+
+## Advanced Features
+
+### Dry Run
+
+Preview generated files without writing them:
+
+```bash
+boilerplates compose generate nginx --dry-run
+```
+
+### Debug Mode
+
+Enable detailed logging for troubleshooting:
+
+```bash
+boilerplates --log-level DEBUG compose generate nginx
+```
+
+### Variable Override
+
+Override specific variables without interactive prompts:
+
+```bash
+boilerplates compose generate grafana \
+  --var service_name=monitoring-grafana \
+  --var grafana_port=3000
+```
+
+## Next Steps
+
+Now that you know the basics, explore more:
+
+- [Templates](Core-Concepts-Templates) - Learn how templates work
+- [Variables](Core-Concepts-Variables) - Understand variable types and dependencies
+- [Configuration](Core-Concepts-Libraries) - Customize your setup
+- [Variable Reference](Variables-Compose) - Complete variable documentation
+
+## Troubleshooting
+
+### CLI Command Not Found
+
+If the `boilerplates` command is not found after installation:
+
+```bash
+# Ensure pipx binaries are in PATH
+export PATH="$HOME/.local/bin:$PATH"
+
+# Add to your shell profile (.bashrc, .zshrc, etc.)
+echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
+```
+
+### Templates Not Available
+
+If templates aren't showing up after installation:
+
+```bash
+# Sync the template library
+boilerplates repo update
+
+# Verify library is configured
+boilerplates repo list
+```
+
+### Permission Issues
+
+If you encounter permission errors:
+
+```bash
+# Ensure output directory is writable
+chmod +w ./output-directory
+
+# Or generate to a different location
+boilerplates compose generate nginx ~/my-projects/nginx
+```
+
+## Getting Help
+
+- **Documentation:** Browse the [Wiki](Home) for comprehensive guides
+- **Discord:** Join the [community](https://christianlempa.de/discord) for real-time help
+- **GitHub Issues:** Report bugs or request features
+- **YouTube:** Watch [video tutorials](https://www.youtube.com/@christianlempa)
+
+Happy templating!

+ 45 - 0
.wiki/Home.md

@@ -0,0 +1,45 @@
+# Boilerplates Documentation
+
+Instant access to battle-tested templates for Docker, Terraform, Ansible, Kubernetes, and more.
+
+Each template includes sensible defaults, best practices, and common configuration patterns—so you can focus on customizing for your environment.
+
+## Boilerplates CLI Tool
+
+The Boilerplates CLI is a Python-based tool that streamlines infrastructure template management. It provides an interactive interface for browsing, customizing, and generating configuration files from a curated template library. The tool handles variable validation, dependency resolution, and multi-source template management—giving you a consistent workflow whether you're deploying a single container or orchestrating complex infrastructure.
+
+## User Documentation
+
+**Getting Started**
+
+- [Getting Started](Getting-Started) - Quick introduction and first steps
+- [Installation](Installation) - Install the Boilerplates CLI tool on Linux, MacOS, or NixOS
+
+**Core Concepts**
+
+- [Templates](Core-Concepts-Templates) - Understanding templates and how they work
+- [Variables](Core-Concepts-Variables) - Variable types, sections, and dependencies
+- [Libraries](Core-Concepts-Libraries) - Managing template libraries
+- [Defaults](Core-Concepts-Defaults) - Setting and managing default values
+
+**Variable Reference**
+
+- [Ansible Variables](Variables-Ansible)
+- [Compose Variables](Variables-Compose)
+- [Helm Variables](Variables-Helm)
+- [Kubernetes Variables](Variables-Kubernetes)
+- [Packer Variables](Variables-Packer)
+- [Terraform Variables](Variables-Terraform)
+
+## Developer Documentation
+
+**Architecture & Development**
+
+- [Architecture Overview](Developers-Architecture) - System design and core components
+- [Module Development](Developers-Modules) - Creating new modules
+- [Template Development](Developers-Templates) - Building templates
+- [Contributing Guide](Developers-Contributing) - Detailed contribution workflow
+
+**Contributing**
+
+Before contributing, please read our [Contributing Guidelines](https://github.com/ChristianLempa/boilerplates/blob/main/CONTRIBUTING.md)

+ 418 - 0
.wiki/Installation.md

@@ -0,0 +1,418 @@
+# Installation
+
+This guide covers installing the Boilerplates CLI on various platforms.
+
+## Prerequisites
+
+Before installing, ensure you have:
+
+- **Python 3.10 or higher** - Check with `python3 --version`
+- **Git** - Required for syncing template libraries
+- **Internet connection** - For downloading dependencies and templates
+
+### Checking Python Version
+
+```bash
+python3 --version
+```
+
+If you see version 3.10 or higher, you're ready to proceed. If not, see the platform-specific instructions below for installing Python.
+
+## Quick Install (Recommended)
+
+The automated installer script handles all dependencies and setup:
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/christianlempa/boilerplates/main/scripts/install.sh | bash
+```
+
+### Install Specific Version
+
+```bash
+curl -fsSL https://raw.githubusercontent.com/christianlempa/boilerplates/main/scripts/install.sh | bash -s -- --version v0.1.0
+```
+
+The installer will:
+1. Check for required dependencies (Python, pipx)
+2. Install pipx if not present
+3. Install the Boilerplates CLI in an isolated environment
+4. Add the `boilerplates` command to your PATH
+
+## Platform-Specific Installation
+
+### Linux
+
+#### Ubuntu / Debian
+
+1. **Install Python and dependencies:**
+
+```bash
+sudo apt update
+sudo apt install -y python3 python3-pip python3-venv git
+```
+
+2. **Install pipx:**
+
+```bash
+python3 -m pip install --user pipx
+python3 -m pipx ensurepath
+```
+
+3. **Install Boilerplates:**
+
+```bash
+pipx install boilerplates-cli
+```
+
+4. **Verify installation:**
+
+```bash
+boilerplates --version
+```
+
+#### Fedora / RHEL / CentOS
+
+1. **Install Python and dependencies:**
+
+```bash
+sudo dnf install -y python3 python3-pip git
+```
+
+2. **Install pipx:**
+
+```bash
+python3 -m pip install --user pipx
+python3 -m pipx ensurepath
+```
+
+3. **Install Boilerplates:**
+
+```bash
+pipx install boilerplates-cli
+```
+
+#### Arch Linux
+
+1. **Install Python and dependencies:**
+
+```bash
+sudo pacman -S python python-pip git
+```
+
+2. **Install pipx:**
+
+```bash
+python3 -m pip install --user pipx
+python3 -m pipx ensurepath
+```
+
+3. **Install Boilerplates:**
+
+```bash
+pipx install boilerplates-cli
+```
+
+### MacOS
+
+#### Using Homebrew (Recommended)
+
+1. **Install Homebrew** (if not already installed):
+
+```bash
+/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
+```
+
+2. **Install Python and pipx:**
+
+```bash
+brew install python pipx
+pipx ensurepath
+```
+
+3. **Install Boilerplates:**
+
+```bash
+pipx install boilerplates-cli
+```
+
+#### Using Python from python.org
+
+1. Download and install Python 3.10+ from [python.org](https://www.python.org/downloads/macos/)
+
+2. **Install pipx:**
+
+```bash
+python3 -m pip install --user pipx
+python3 -m pipx ensurepath
+```
+
+3. **Install Boilerplates:**
+
+```bash
+pipx install boilerplates-cli
+```
+
+### NixOS
+
+Boilerplates is available as a Nix Flake for NixOS and Nix users.
+
+#### Run Without Installing
+
+```bash
+nix run github:christianlempa/boilerplates -- --help
+```
+
+#### Install to Profile
+
+```bash
+nix profile install github:christianlempa/boilerplates
+```
+
+#### Use in Flake
+
+Add to your `flake.nix`:
+
+```nix
+{
+  inputs.boilerplates.url = "github:christianlempa/boilerplates";
+
+  outputs = { self, nixpkgs, boilerplates }: {
+    # Use boilerplates.packages.${system}.default
+    packages.x86_64-linux.default = boilerplates.packages.x86_64-linux.default;
+  };
+}
+```
+
+#### Temporary Shell
+
+```bash
+nix shell github:christianlempa/boilerplates
+```
+
+### Windows (WSL Recommended)
+
+While Boilerplates can run on Windows, we recommend using Windows Subsystem for Linux (WSL) for the best experience.
+
+#### Install WSL (Windows 10/11)
+
+1. **Install WSL:**
+
+```powershell
+wsl --install
+```
+
+2. **Restart** your computer
+
+3. **Follow Linux installation** instructions above (Ubuntu is the default distribution)
+
+#### Native Windows (Not Recommended)
+
+1. Install Python 3.10+ from [python.org](https://www.python.org/downloads/windows/)
+
+2. Install pipx:
+
+```powershell
+python -m pip install --user pipx
+python -m pipx ensurepath
+```
+
+3. Install Boilerplates:
+
+```powershell
+pipx install boilerplates-cli
+```
+
+## Manual Installation
+
+For development or custom installations:
+
+### Using pip (Not Recommended for End Users)
+
+```bash
+pip install --user boilerplates-cli
+```
+
+Note: This installs globally and may conflict with system packages. Use pipx instead.
+
+### From Source
+
+1. **Clone the repository:**
+
+```bash
+git clone https://github.com/ChristianLempa/boilerplates.git
+cd boilerplates
+```
+
+2. **Create virtual environment:**
+
+```bash
+python3 -m venv venv
+source venv/bin/activate  # On Windows: venv\Scripts\activate
+```
+
+3. **Install in development mode:**
+
+```bash
+pip install -e .
+```
+
+4. **Run the CLI:**
+
+```bash
+python3 -m cli --help
+```
+
+## Post-Installation Setup
+
+### Verify Installation
+
+```bash
+boilerplates --version
+```
+
+Expected output:
+```
+Boilerplates CLI v0.1.0
+```
+
+### Initialize Template Library
+
+Sync the default template library:
+
+```bash
+boilerplates repo update
+```
+
+This downloads all available templates to:
+```
+~/.config/boilerplates/libraries/
+```
+
+### Shell Completion (Optional)
+
+Enable tab completion for your shell:
+
+#### Bash
+
+```bash
+echo 'eval "$(_BOILERPLATES_COMPLETE=bash_source boilerplates)"' >> ~/.bashrc
+source ~/.bashrc
+```
+
+#### Zsh
+
+```bash
+echo 'eval "$(_BOILERPLATES_COMPLETE=zsh_source boilerplates)"' >> ~/.zshrc
+source ~/.zshrc
+```
+
+#### Fish
+
+```bash
+echo '_BOILERPLATES_COMPLETE=fish_source boilerplates | source' >> ~/.config/fish/completions/boilerplates.fish
+```
+
+## Updating
+
+### Update to Latest Version
+
+```bash
+pipx upgrade boilerplates-cli
+```
+
+### Update Template Library
+
+```bash
+boilerplates repo update
+```
+
+## Uninstalling
+
+### Remove the CLI
+
+```bash
+pipx uninstall boilerplates-cli
+```
+
+### Remove Configuration and Templates
+
+```bash
+rm -rf ~/.config/boilerplates
+```
+
+## Troubleshooting
+
+### Command Not Found After Installation
+
+If `boilerplates` is not found, ensure pipx binaries are in your PATH:
+
+```bash
+# Add to your shell profile (.bashrc, .zshrc, etc.)
+export PATH="$HOME/.local/bin:$PATH"
+```
+
+Then reload your shell:
+```bash
+source ~/.bashrc  # or ~/.zshrc
+```
+
+### Python Version Too Old
+
+If you have Python < 3.10, install a newer version:
+
+**Ubuntu/Debian:**
+```bash
+sudo add-apt-repository ppa:deadsnakes/ppa
+sudo apt update
+sudo apt install python3.11
+```
+
+**Fedora:**
+```bash
+sudo dnf install python3.11
+```
+
+**MacOS (Homebrew):**
+```bash
+brew install python@3.11
+```
+
+### Permission Denied Errors
+
+If you encounter permission errors during installation:
+
+```bash
+# Use --user flag
+python3 -m pip install --user pipx
+
+# Or use virtual environments
+python3 -m venv ~/venvs/boilerplates
+source ~/venvs/boilerplates/bin/activate
+pip install boilerplates-cli
+```
+
+### SSL Certificate Errors
+
+If you encounter SSL errors:
+
+```bash
+# Ubuntu/Debian
+sudo apt install ca-certificates
+
+# Update certificates
+sudo update-ca-certificates
+```
+
+## Next Steps
+
+Now that you've installed Boilerplates:
+
+- [Getting Started](Getting-Started) - Generate your first template
+- [Configuration](Core-Concepts-Libraries) - Customize your setup
+- [Templates](Core-Concepts-Templates) - Learn about template structure
+
+## Getting Help
+
+- **Discord:** [Join the community](https://christianlempa.de/discord)
+- **GitHub Issues:** [Report installation problems](https://github.com/ChristianLempa/boilerplates/issues)
+- **Documentation:** [Browse the Wiki](Home)

+ 63 - 0
.wiki/Variables-Ansible.md

@@ -0,0 +1,63 @@
+# Ansible Variables
+
+**Module:** `ansible`  
+**Schema Version:** `1.0`  
+**Description:** Manage Ansible playbooks
+
+---
+
+This page documents all available variables for the ansible module. Variables are organized into sections that can be enabled/disabled based on your configuration needs.
+
+## Table of Contents
+
+- [General](#general)
+- [Options](#options)
+- [Secrets](#secrets)
+
+---
+
+## General
+
+**Required:** Yes
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `playbook_name` | `str` | _none_ | Ansible playbook name |
+| `target_hosts` | `str` | `{{ my_hosts | d([]) }}` | Target hosts pattern (e.g., 'all', 'webservers', or '{{ my_hosts | d([]) }}') |
+| `become` | `bool` | ✗ | Run tasks with privilege escalation (sudo) |
+
+---
+
+## Options
+
+**Toggle Variable:** `options_enabled`
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `options_enabled` | `bool` | ✗ | Enable additional playbook options |
+| `gather_facts` | `bool` | ✓ | Gather facts about target hosts |
+
+---
+
+## Secrets
+
+**Toggle Variable:** `secrets_enabled`
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `secrets_enabled` | `bool` | ✗ | Use external secrets file |
+| `secrets_file` | `str` | `secrets.yaml` | Path to secrets file |
+
+---
+
+## Notes
+
+- **Required sections** must be configured
+- **Toggle variables** enable/disable entire sections
+- **Dependencies** (`needs`) control when sections/variables are available
+- **Sensitive variables** are masked during prompts
+- **Auto-generated variables** are populated automatically if not provided
+
+---
+
+_Last updated: Schema version 1.0_

+ 214 - 0
.wiki/Variables-Compose.md

@@ -0,0 +1,214 @@
+# Compose Variables
+
+**Module:** `compose`  
+**Schema Version:** `1.2`  
+**Description:** Manage Docker Compose configurations
+
+---
+
+This page documents all available variables for the compose module. Variables are organized into sections that can be enabled/disabled based on your configuration needs.
+
+## Table of Contents
+
+- [General](#general)
+- [Network](#network)
+- [Ports](#ports)
+- [Traefik](#traefik)
+- [Traefik TLS/SSL](#traefik-tlsssl)
+- [Volume Storage](#volume-storage)
+- [Resource Limits](#resource-limits)
+- [Docker Swarm](#docker-swarm)
+- [Database](#database)
+- [Email Server](#email-server)
+- [Authentik SSO](#authentik-sso)
+
+---
+
+## General
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `service_name` | `str` | _none_ | Service name |
+| `container_name` | `str` | _none_ | Container name |
+| `container_hostname` | `str` | _none_ | Container internal hostname |
+| `container_timezone` | `str` | `UTC` | Container timezone (e.g., Europe/Berlin) |
+| `user_uid` | `int` | `1000` | User UID for container process |
+| `user_gid` | `int` | `1000` | User GID for container process |
+| `container_loglevel` | `enum` | `info` | Container log level<br>**Options:** `debug`, `info`, `warn`, `error` |
+| `restart_policy` | `enum` | `unless-stopped` | Container restart policy<br>**Options:** `unless-stopped`, `always`, `on-failure`, `no` |
+
+---
+
+## Network
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `network_mode` | `enum` | `bridge` | Docker network mode<br>**Options:** `bridge`, `host`, `macvlan` |
+| `network_name` | `str` | `bridge` | Docker network name<br>**Needs:** `network_mode=bridge,macvlan` |
+| `network_external` | `bool` | ✗ | Use existing Docker network (external)<br>**Needs:** `network_mode=bridge,macvlan` |
+| `network_macvlan_ipv4_address` | `str` | `192.168.1.253` | Static IP address for container<br>**Needs:** `network_mode=macvlan` |
+| `network_macvlan_parent_interface` | `str` | `eth0` | Host network interface name<br>**Needs:** `network_mode=macvlan` |
+| `network_macvlan_subnet` | `str` | `192.168.1.0/24` | Network subnet in CIDR notation<br>**Needs:** `network_mode=macvlan` |
+| `network_macvlan_gateway` | `str` | `192.168.1.1` | Network gateway IP address<br>**Needs:** `network_mode=macvlan` |
+
+---
+
+## Ports
+
+**Toggle Variable:** `ports_enabled`  
+**Depends On:** `network_mode=bridge`
+
+Expose service ports to the host.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `ports_http` | `int` | `8080` | HTTP port on host |
+| `ports_https` | `int` | `8443` | HTTPS port on host |
+| `ports_ssh` | `int` | `22` | SSH port on host |
+| `ports_dns` | `int` | `53` | DNS port on host |
+| `ports_dhcp` | `int` | `67` | DHCP port on host |
+| `ports_smtp` | `int` | `25` | SMTP port on host |
+
+---
+
+## Traefik
+
+**Toggle Variable:** `traefik_enabled`  
+**Depends On:** `network_mode=bridge`
+
+Traefik routes external traffic to your service.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `traefik_enabled` | `bool` | ✗ | Enable Traefik reverse proxy integration |
+| `traefik_network` | `str` | `traefik` | Traefik network name |
+| `traefik_host` | `str` | _none_ | Service subdomain or full hostname (e.g., 'app' or 'app.example.com') |
+| `traefik_domain` | `str` | `home.arpa` | Base domain (e.g., example.com) |
+| `traefik_entrypoint` | `str` | `web` | HTTP entrypoint (non-TLS) |
+
+---
+
+## Traefik TLS/SSL
+
+**Toggle Variable:** `traefik_tls_enabled`  
+**Depends On:** `traefik_enabled=true;network_mode=bridge`
+
+Enable HTTPS/TLS for Traefik with certificate management.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `traefik_tls_enabled` | `bool` | ✓ | Enable HTTPS/TLS |
+| `traefik_tls_entrypoint` | `str` | `websecure` | TLS entrypoint |
+| `traefik_tls_certresolver` | `str` | `cloudflare` | Traefik certificate resolver name |
+
+---
+
+## Volume Storage
+
+Configure persistent storage for your service.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `volume_mode` | `enum` | `local` | Volume storage backend<br>**Options:** `local`, `mount`, `nfs` • local: Docker-managed volumes | mount: Bind mount from host | nfs: Network filesystem |
+| `volume_mount_path` | `str` | `/mnt/storage` | Host path for bind mounts<br>**Needs:** `volume_mode=mount` |
+| `volume_nfs_server` | `str` | `192.168.1.1` | NFS server address<br>**Needs:** `volume_mode=nfs` |
+| `volume_nfs_path` | `str` | `/export` | NFS export path<br>**Needs:** `volume_mode=nfs` |
+| `volume_nfs_options` | `str` | `rw,nolock,soft` | NFS mount options (comma-separated)<br>**Needs:** `volume_mode=nfs` |
+
+---
+
+## Resource Limits
+
+**Toggle Variable:** `resources_enabled`
+
+Set CPU and memory limits for the service.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `resources_enabled` | `bool` | ✗ | Enable resource limits |
+| `resources_cpu_limit` | `str` | `1.0` | Maximum CPU cores (e.g., 0.5, 1.0, 2.0) |
+| `resources_cpu_reservation` | `str` | `0.25` | Reserved CPU cores<br>**Needs:** `swarm_enabled=true` |
+| `resources_memory_limit` | `str` | `1G` | Maximum memory (e.g., 512M, 1G, 2G) |
+| `resources_memory_reservation` | `str` | `512M` | Reserved memory<br>**Needs:** `swarm_enabled=true` |
+
+---
+
+## Docker Swarm
+
+**Toggle Variable:** `swarm_enabled`  
+**Depends On:** `network_mode=bridge`
+
+Deploy service in Docker Swarm mode.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `swarm_enabled` | `bool` | ✗ | Enable Docker Swarm mode |
+| `swarm_placement_mode` | `enum` | `replicated` | Swarm placement mode<br>**Options:** `replicated`, `global` |
+| `swarm_replicas` | `int` | `1` | Number of replicas<br>**Needs:** `swarm_placement_mode=replicated` |
+| `swarm_placement_host` | `str` | _none_ | Target hostname for placement constraint<br>**Needs:** `swarm_placement_mode=replicated` • Constrains service to run on specific node by hostname |
+
+---
+
+## Database
+
+**Toggle Variable:** `database_enabled`
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `database_type` | `enum` | `default` | Database type<br>**Options:** `default`, `sqlite`, `postgres`, `mysql` |
+| `database_external` | `bool` | ✗ | Use an external database server?<br>skips creation of internal database container |
+| `database_host` | `str` | `database` | Database host |
+| `database_port` | `int` | _none_ | Database port |
+| `database_name` | `str` | _none_ | Database name |
+| `database_user` | `str` | _none_ | Database user |
+| `database_password` | `str` | _none_ | Database password<br>**Sensitive** • **Auto-generated** |
+
+---
+
+## Email Server
+
+**Toggle Variable:** `email_enabled`
+
+Configure email server for notifications and user management.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `email_enabled` | `bool` | ✗ | Enable email server configuration |
+| `email_host` | `str` | _none_ | SMTP server hostname |
+| `email_port` | `int` | `587` | SMTP server port |
+| `email_username` | `str` | _none_ | SMTP username |
+| `email_password` | `str` | _none_ | SMTP password<br>**Sensitive** |
+| `email_from` | `str` | _none_ | From email address |
+| `email_use_tls` | `bool` | ✓ | Use TLS encryption |
+| `email_use_ssl` | `bool` | ✗ | Use SSL encryption |
+
+---
+
+## Authentik SSO
+
+**Toggle Variable:** `authentik_enabled`
+
+Integrate with Authentik for Single Sign-On authentication.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `authentik_enabled` | `bool` | ✗ | Enable Authentik SSO integration |
+| `authentik_url` | `str` | _none_ | Authentik base URL (e.g., https://auth.example.com) |
+| `authentik_slug` | `str` | _none_ | Authentik application slug |
+| `authentik_client_id` | `str` | _none_ | OAuth client ID from Authentik provider |
+| `authentik_client_secret` | `str` | _none_ | OAuth client secret from Authentik provider<br>**Sensitive** |
+| `authentik_traefik_middleware` | `str` | `authentik-middleware@file` | Traefik middleware name for Authentik authentication<br>**Needs:** `traefik_enabled=true` |
+
+---
+
+## Notes
+
+- **Required sections** must be configured
+- **Toggle variables** enable/disable entire sections
+- **Dependencies** (`needs`) control when sections/variables are available
+- **Sensitive variables** are masked during prompts
+- **Auto-generated variables** are populated automatically if not provided
+
+---
+
+_Last updated: Schema version 1.2_

+ 125 - 0
.wiki/Variables-Helm.md

@@ -0,0 +1,125 @@
+# Helm Variables
+
+**Module:** `helm`  
+**Schema Version:** `1.0`  
+**Description:** Manage Helm charts
+
+---
+
+This page documents all available variables for the helm module. Variables are organized into sections that can be enabled/disabled based on your configuration needs.
+
+## Table of Contents
+
+- [General](#general)
+- [Networking](#networking)
+- [Traefik Ingress](#traefik-ingress)
+- [Traefik TLS/SSL](#traefik-tlsssl)
+- [Volumes](#volumes)
+- [Database](#database)
+- [Email Server](#email-server)
+
+---
+
+## General
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `release_name` | `str` | _none_ | Helm release name |
+| `namespace` | `str` | `default` | Kubernetes namespace for the Helm release |
+
+---
+
+## Networking
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `network_mode` | `enum` | `ClusterIP` | Kubernetes service type<br>**Options:** `ClusterIP`, `NodePort`, `LoadBalancer` |
+
+---
+
+## Traefik Ingress
+
+**Toggle Variable:** `traefik_enabled`  
+**Depends On:** `network_mode=ClusterIP`
+
+Traefik routes external traffic to your service.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `traefik_enabled` | `bool` | ✗ | Enable Traefik Ingress/IngressRoute |
+| `traefik_host` | `hostname` | _none_ | Hostname for Traefik ingress |
+
+---
+
+## Traefik TLS/SSL
+
+**Toggle Variable:** `traefik_tls_enabled`  
+**Depends On:** `traefik_enabled=true;network_mode=ClusterIP`
+
+Enable HTTPS/TLS for Traefik with certificate management.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `traefik_tls_enabled` | `bool` | ✓ | Enable HTTPS/TLS |
+| `traefik_tls_secret` | `str` | `traefik-tls` | TLS secret name |
+| `traefik_tls_certmanager` | `bool` | ✗ | Use cert-manager for automatic certificate provisioning |
+| `certmanager_issuer` | `str` | `cloudflare` | Cert-manager ClusterIssuer or Issuer name<br>**Needs:** `traefik_tls_certmanager=true` |
+| `certmanager_issuer_kind` | `enum` | `ClusterIssuer` | Issuer kind<br>**Options:** `ClusterIssuer`, `Issuer` • **Needs:** `traefik_tls_certmanager=true` |
+
+---
+
+## Volumes
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `volumes_mode` | `enum` | `default` | Persistent volume mode<br>**Options:** `default`, `existing-pvc` |
+| `volumes_pvc_name` | `str` | _none_ | Name of existing PVC<br>**Needs:** `volumes_mode=existing-pvc` |
+
+---
+
+## Database
+
+**Toggle Variable:** `database_enabled`
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `database_enabled` | `bool` | ✗ | Enable database configuration |
+| `database_type` | `enum` | `postgres` | Database type<br>**Options:** `postgres`, `mysql`, `mariadb` |
+| `database_host` | `hostname` | _none_ | Database host |
+| `database_port` | `int` | _none_ | Database port |
+| `database_name` | `str` | _none_ | Database name |
+| `database_user` | `str` | _none_ | Database user |
+| `database_password` | `str` | _none_ | Database password<br>**Sensitive** • **Auto-generated** |
+
+---
+
+## Email Server
+
+**Toggle Variable:** `email_enabled`
+
+Configure email server for notifications and user management.
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `email_enabled` | `bool` | ✗ | Enable email server configuration |
+| `email_host` | `hostname` | _none_ | SMTP server hostname |
+| `email_port` | `int` | `587` | SMTP server port |
+| `email_username` | `str` | _none_ | SMTP username |
+| `email_password` | `str` | _none_ | SMTP password<br>**Sensitive** |
+| `email_from` | `email` | _none_ | From email address |
+| `email_use_tls` | `bool` | ✓ | Use TLS encryption |
+| `email_use_ssl` | `bool` | ✗ | Use SSL encryption |
+
+---
+
+## Notes
+
+- **Required sections** must be configured
+- **Toggle variables** enable/disable entire sections
+- **Dependencies** (`needs`) control when sections/variables are available
+- **Sensitive variables** are masked during prompts
+- **Auto-generated variables** are populated automatically if not provided
+
+---
+
+_Last updated: Schema version 1.0_

+ 84 - 0
.wiki/Variables-Kubernetes.md

@@ -0,0 +1,84 @@
+# Kubernetes Variables
+
+**Module:** `kubernetes`  
+**Schema Version:** `1.0`  
+**Description:** Manage Kubernetes configurations
+
+---
+
+This page documents all available variables for the kubernetes module. Variables are organized into sections that can be enabled/disabled based on your configuration needs.
+
+## Table of Contents
+
+- [General](#general)
+- [Traefik](#traefik)
+- [Traefik TLS/SSL](#traefik-tlsssl)
+- [Cert-Manager](#cert-manager)
+
+---
+
+## General
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `resource_name` | `str` | _none_ | Resource name (metadata.name) |
+| `namespace` | `str` | `default` | Kubernetes namespace |
+
+---
+
+## Traefik
+
+**Toggle Variable:** `traefik_enabled`
+
+Traefik IngressRoute configuration for HTTP/HTTPS routing
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `traefik_enabled` | `bool` | ✗ | Enable Traefik IngressRoute |
+| `traefik_entrypoint` | `str` | `web` | Traefik entrypoint (non-TLS) |
+| `traefik_host` | `hostname` | _none_ | Domain name for the service (e.g., app.example.com) |
+| `traefik_service_name` | `str` | _none_ | Backend Kubernetes service name |
+| `traefik_service_port` | `int` | `80` | Backend service port |
+
+---
+
+## Traefik TLS/SSL
+
+**Toggle Variable:** `traefik_tls_enabled`  
+**Depends On:** `traefik`
+
+Enable HTTPS/TLS for Traefik with certificate management
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `traefik_tls_enabled` | `bool` | ✓ | Enable HTTPS/TLS |
+| `traefik_tls_entrypoint` | `str` | `websecure` | TLS entrypoint |
+| `traefik_tls_certresolver` | `str` | `cloudflare` | Traefik certificate resolver name |
+
+---
+
+## Cert-Manager
+
+**Toggle Variable:** `certmanager_enabled`
+
+Cert-manager certificate management configuration
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `certmanager_enabled` | `bool` | ✗ | Enable cert-manager certificate |
+| `certmanager_issuer` | `str` | `cloudflare` | ClusterIssuer or Issuer name |
+| `certmanager_issuer_kind` | `enum` | `ClusterIssuer` | Issuer kind<br>**Options:** `ClusterIssuer`, `Issuer` |
+
+---
+
+## Notes
+
+- **Required sections** must be configured
+- **Toggle variables** enable/disable entire sections
+- **Dependencies** (`needs`) control when sections/variables are available
+- **Sensitive variables** are masked during prompts
+- **Auto-generated variables** are populated automatically if not provided
+
+---
+
+_Last updated: Schema version 1.0_

+ 35 - 0
.wiki/Variables-Packer.md

@@ -0,0 +1,35 @@
+# Packer Variables
+
+**Module:** `packer`  
+**Schema Version:** `1.0`  
+**Description:** Manage Packer templates
+
+---
+
+This page documents all available variables for the packer module. Variables are organized into sections that can be enabled/disabled based on your configuration needs.
+
+## Table of Contents
+
+- [General](#general)
+
+---
+
+## General
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `image_name` | `str` | _none_ | Image name |
+
+---
+
+## Notes
+
+- **Required sections** must be configured
+- **Toggle variables** enable/disable entire sections
+- **Dependencies** (`needs`) control when sections/variables are available
+- **Sensitive variables** are masked during prompts
+- **Auto-generated variables** are populated automatically if not provided
+
+---
+
+_Last updated: Schema version 1.0_

+ 36 - 0
.wiki/Variables-Terraform.md

@@ -0,0 +1,36 @@
+# Terraform Variables
+
+**Module:** `terraform`  
+**Schema Version:** `1.0`  
+**Description:** Manage Terraform configurations
+
+---
+
+This page documents all available variables for the terraform module. Variables are organized into sections that can be enabled/disabled based on your configuration needs.
+
+## Table of Contents
+
+- [General](#general)
+
+---
+
+## General
+
+| Variable | Type | Default | Description |
+|----------|------|---------|-------------|
+| `resource_name` | `str` | _none_ | Resource name prefix |
+| `backend_mode` | `enum` | `local` | Terraform backend mode<br>**Options:** `local`, `http` |
+
+---
+
+## Notes
+
+- **Required sections** must be configured
+- **Toggle variables** enable/disable entire sections
+- **Dependencies** (`needs`) control when sections/variables are available
+- **Sensitive variables** are masked during prompts
+- **Auto-generated variables** are populated automatically if not provided
+
+---
+
+_Last updated: Schema version 1.0_

+ 25 - 0
.wiki/Variables.md

@@ -0,0 +1,25 @@
+# Variables Documentation
+
+This section contains auto-generated documentation for all available variables in each module.
+
+## Available Modules
+
+- [Ansible](Variables-Ansible)
+- [Compose](Variables-Compose)
+- [Helm](Variables-Helm)
+- [Kubernetes](Variables-Kubernetes)
+- [Packer](Variables-Packer)
+- [Terraform](Variables-Terraform)
+
+---
+
+Each module page includes:
+
+- Schema version information
+- Complete list of sections and variables
+- Variable types, defaults, and descriptions
+- Section dependencies and toggle configurations
+
+---
+
+_This documentation is auto-generated from module schemas._

+ 28 - 0
.wiki/_Sidebar.md

@@ -0,0 +1,28 @@
+## Boilerplates Wiki
+
+- **[Home](Home)**
+
+### Getting Started
+- [Getting Started](Getting-Started)
+- [Installation](Installation)
+
+### Core Concepts
+- [Templates](Core-Concepts-Templates)
+- [Variables](Core-Concepts-Variables)
+- [Libraries](Core-Concepts-Libraries)
+- [Defaults](Core-Concepts-Defaults)
+
+### Variables Reference
+- [All Modules](Variables)
+- [Ansible](Variables-Ansible)
+- [Compose](Variables-Compose)
+- [Helm](Variables-Helm)
+- [Kubernetes](Variables-Kubernetes)
+- [Packer](Variables-Packer)
+- [Terraform](Variables-Terraform)
+
+### Developer Docs
+- [Architecture](Developers-Architecture)
+- [Modules](Developers-Modules)
+- [Templates](Developers-Templates)
+- [Contributing](Developers-Contributing)