Custom Configuration Files
Learn how to create custom configuration files that integrate seamlessly with pyrig’s configuration system.Overview
Pyrig’s configuration system automatically discovers and manages anyConfigFile subclass in your project. Create custom configurations for:
- Application-specific settings
- Custom tool configurations
- Project templates
- CI/CD configurations
- Documentation files
Basic Custom Configuration
Step 1: Choose a Base Class
Select the appropriate base class for your file format:TomlConfigFile- For TOML files (.toml)YamlConfigFile- For YAML files (.yaml,.yml)JsonConfigFile- For JSON files (.json)PythonConfigFile- For Python files (.py)MarkdownConfigFile- For Markdown files (.md)StringConfigFile- For plain text files (.txt,.env, etc.)
Step 2: Create Your Config Class
Create a new file in your project’srig/configs/ directory:
Step 3: Initialize
Runuv run pyrig mkroot to create the file:
myconfig.toml with your default configuration.
TOML Configuration Example
Database Configuration
config/database.toml:
YAML Configuration Example
Custom GitHub Workflow
JSON Configuration Example
API Configuration
config/api.json:
Python Configuration Example
Custom CLI Subcommand
Markdown Configuration Example
Custom Documentation Page
Advanced: Priority-Based Validation
Set higher priority for configs that others depend on:Advanced: Dynamic Configuration
Generate configuration based on project state:Override Existing Configuration
Replace pyrig’s default configuration with your own:rig.configs.pyproject), it overrides the default configuration.
Best Practices
Structure
-
Organize by purpose: Group related configs in subdirectories
myapp/rig/configs/database/- Database configurationsmyapp/rig/configs/api/- API configurationsmyapp/rig/configs/workflows/- Custom workflows
-
Use descriptive names: Name classes after their purpose
DatabaseConfigFilenotDbCfgApiConfigFilenotApiCfg
- Document behavior: Add docstrings explaining what the config does
Configuration
- Provide sensible defaults: Users should be able to use the defaults
- Support customization: Allow users to add their own settings
- Validate input: Raise clear errors for invalid configuration
- Use environment variables: For sensitive or environment-specific settings
Priority
-
Use HIGH priority (30) for:
- Configs that define core project settings
- Configs that other configs read from
-
Use MEDIUM priority (20) for:
- Configs that need early creation
- Configs similar to pyproject.toml
-
Use DEFAULT priority (0) for:
- Most custom configurations
- Configs that depend on others