Reference
Configuration
Complete reference for m1f configuration files and formats
m1f uses YAML configuration files for auto-bundling and presets. This reference covers all configuration options and file formats.
Configuration Files Overview
m1f uses two main types of configuration files:
- Auto-bundle Configuration (
.m1f.config.yml
) - Defines automated bundle creation - Preset Configuration (
*.m1f-presets.yml
) - Defines file-specific processing rules
Auto-Bundle Configuration
File Location
m1f searches for .m1f.config.yml
starting from the current directory and moving up the directory tree to the root.
Basic Structure
# Global settings that apply to all bundles
global:
global_excludes:
- "**/*.pyc"
- "**/*.log"
- "**/tmp/**"
# Bundle definitions
bundles:
docs:
description: "Project documentation"
output: "m1f/docs/manual.txt"
sources:
- path: "docs"
include_extensions: [".md", ".txt"]
code:
description: "Source code bundle"
output: "m1f/src/code.txt"
sources:
- path: "src"
include_extensions: [".py", ".js", ".ts"]
Global Settings
global:
# Default exclusions applied to all bundles
global_excludes:
- "**/*.pyc"
- "**/*.log"
- "**/node_modules/**"
- "**/.git/**"
# Default settings for all bundles
default_separator_style: "Detailed"
default_max_file_size: "1MB"
default_security_check: "warn"
default_encoding: "utf-8"
Bundle Configuration
Each bundle in the bundles
section can have the following properties:
Basic Properties
bundles:
my-bundle:
description: "Bundle description" # Required
output: "path/to/output.txt" # Required
group: "optional-group" # Optional grouping
enabled: true # Optional (default: true)
enabled_if_exists: "file.txt" # Optional conditional enabling
Source Configuration
sources:
- path: "src" # Required
include_extensions: [".py", ".js"] # Optional
exclude_extensions: [".pyc", ".pyo"] # Optional
includes: ["pattern/**"] # Optional gitignore-style patterns
excludes: ["test_*.py", "*.spec.js"] # Optional gitignore-style patterns
max_file_size: "500KB" # Optional
Processing Options
# Output formatting
separator_style: "Markdown" # Optional
line_ending: "lf" # Optional
# Security
security_check: "abort" # Optional: abort, skip, warn
# File handling
include_dot_paths: false # Optional
include_binary_files: false # Optional
include_symlinks: false # Optional
remove_scraped_metadata: true # Optional
# Archive creation
create_archive: true # Optional
archive_type: "zip" # Optional: zip, tar.gz
# Output control
force: true # Optional
minimal_output: false # Optional
add_timestamp: false # Optional
filename_mtime_hash: false # Optional
Preset Integration
# Apply presets to bundles
preset: "presets/my-presets.yml" # Optional
preset_group: "production" # Optional
Complete Bundle Example
bundles:
production-bundle:
description: "Production-ready code bundle"
group: "production"
output: "dist/production.txt"
enabled_if_exists: "package.json"
# Source configuration
sources:
- path: "src"
include_extensions: [".js", ".ts", ".jsx", ".tsx"]
excludes:
- "**/*.test.*"
- "**/*.spec.*"
- "**/test/**"
max_file_size: "1MB"
- path: "docs"
include_extensions: [".md"]
excludes: ["**/draft/**"]
# Processing options
separator_style: "MachineReadable"
security_check: "abort"
create_archive: true
archive_type: "tar.gz"
minimal_output: true
add_timestamp: true
# Preset integration
preset: "presets/production.m1f-presets.yml"
preset_group: "minified"
Preset Configuration
File Naming
Preset files should end with .m1f-presets.yml
or .m1f-presets.yaml
.
Basic Structure
# Preset group
group_name:
description: "Description of this preset group"
enabled: true
priority: 10 # Higher priority = checked first
base_path: "src" # Optional base path for patterns
# Global settings for this group
global_settings:
# Any CLI option can be specified here
security_check: "warn"
max_file_size: "1MB"
separator_style: "Detailed"
# File-specific presets
presets:
preset_name:
description: "Description of this preset"
extensions: [".py", ".js"] # File extensions to match
patterns: ["src/**/*.py"] # Glob patterns to match
actions: ["strip_comments"] # Processing actions to apply
Global Settings in Presets
Any CLI option can be specified in the global settings:
global_settings:
# Input/Output
separator_style: "Detailed"
line_ending: "lf"
# File filtering
include_extensions: [".py", ".js", ".md"]
exclude_extensions: [".pyc", ".pyo"]
include_dot_paths: false
include_binary_files: false
include_symlinks: false
max_file_size: "1MB"
# Security
security_check: "warn"
# Archive
create_archive: false
archive_type: "zip"
# Output control
force: false
minimal_output: false
add_timestamp: false
remove_scraped_metadata: true
# Encoding
convert_to_charset: "utf-8"
abort_on_encoding_error: false
prefer_utf8_for_text_files: true
Extension-Specific Settings
Override settings for specific file extensions:
global_settings:
extensions:
.py:
security_check: "abort"
max_file_size: "500KB"
actions: ["strip_comments"]
.js:
security_check: "warn"
max_file_size: "100KB"
actions: ["minify"]
.md:
security_check: null # Disable security check
actions: ["remove_empty_lines"]
.env:
security_check: "abort"
include_binary_files: false
Preset Actions
Available processing actions:
presets:
my_preset:
extensions: [".py"]
actions:
- "strip_comments" # Remove comments
- "remove_empty_lines" # Remove empty lines
- "compress_whitespace" # Normalize whitespace
- "minify" # Minify content
- "strip_tags" # Remove HTML tags
- "custom" # Apply custom processor
Custom Processors
presets:
custom_processing:
extensions: [".log"]
actions: ["custom"]
custom_processor: "truncate"
processor_args:
max_lines: 1000
add_marker: true
Available custom processors:
- truncate: Limit content length
- redact_secrets: Remove sensitive data patterns
- extract_functions: Extract function definitions (Python)
Complete Preset Example
web_project:
description: "Web project processing rules"
enabled: true
priority: 10
global_settings:
security_check: "warn"
max_file_size: "1MB"
separator_style: "Markdown"
# Extension-specific settings
extensions:
.js:
max_file_size: "100KB"
actions: ["minify"]
.css:
max_file_size: "50KB"
actions: ["minify"]
.html:
actions: ["minify", "strip_tags"]
.md:
security_check: null
actions: ["remove_empty_lines"]
presets:
# JavaScript files
javascript:
extensions: [".js", ".jsx"]
patterns: ["src/**/*.js", "!src/**/*.min.js"]
actions: ["strip_comments", "compress_whitespace"]
# CSS files
styles:
extensions: [".css", ".scss", ".sass"]
actions: ["minify"]
# HTML templates
templates:
extensions: [".html", ".htm"]
actions: ["minify", "strip_tags"]
strip_tags: ["script", "style"]
preserve_tags: ["pre", "code"]
# Configuration files
config:
extensions: [".json", ".yml", ".yaml"]
actions: ["compress_whitespace"]
# Large data files
data:
extensions: [".csv", ".tsv", ".data"]
actions: ["custom"]
custom_processor: "truncate"
processor_args:
max_lines: 100
add_marker: true
# Sensitive files
secrets:
patterns: ["**/.env*", "**/config/secrets*"]
actions: ["custom"]
custom_processor: "redact_secrets"
processor_args:
patterns:
- '(?i)api[_-]?key\s*[:=]\s*["\']?[\w-]+["\']?'
- '(?i)password\s*[:=]\s*["\']?[\w-]+["\']?'
Configuration Validation
m1f validates configuration files on load and provides helpful error messages:
Common Validation Errors
-
Invalid YAML syntax
Error: Invalid YAML syntax in .m1f.config.yml: Line 5: mapping values are not allowed here
-
Missing required fields
Error: Bundle 'my-bundle' is missing required field 'output'
-
Invalid file paths
Error: Bundle 'my-bundle' output path contains invalid characters
-
Circular dependencies
Error: Circular dependency detected in preset loading
Environment Variables
Configuration files can use environment variable substitution:
bundles:
production:
output: "${OUTPUT_DIR}/production.txt"
sources:
- path: "${SOURCE_PATH}"
max_file_size: "${MAX_FILE_SIZE:-1MB}"
Configuration Inheritance
Preset Loading Order
- Global Presets (
~/.m1f/global-presets.yml
) - Lowest priority - User Presets (
~/.m1f/presets/*.yml
) - Medium priority - Project Presets (via
--preset
parameter) - Highest priority
Override Behavior
Later configurations override earlier ones:
# base.yml
web_project:
global_settings:
security_check: "warn"
max_file_size: "1MB"
# project.yml (overrides base.yml)
web_project:
global_settings:
security_check: "abort" # Overrides "warn"
# max_file_size: "1MB" # Inherited from base.yml
Configuration Templates
Minimal Configuration
bundles:
simple:
description: "Simple bundle"
output: "bundle.txt"
sources:
- path: "."
Multi-Environment Configuration
bundles:
development:
description: "Development bundle"
group: "dev"
output: "dev/bundle.txt"
sources:
- path: "src"
security_check: "warn"
production:
description: "Production bundle"
group: "prod"
output: "prod/bundle.txt"
sources:
- path: "src"
excludes: ["**/*.test.*"]
security_check: "abort"
minimal_output: true
Large Project Configuration
global:
global_excludes:
- "**/node_modules/**"
- "**/.git/**"
- "**/*.pyc"
- "**/*.log"
bundles:
backend:
description: "Backend API code"
group: "backend"
output: "bundles/backend.txt"
sources:
- path: "api"
include_extensions: [".py"]
max_file_size: "500KB"
security_check: "abort"
frontend:
description: "Frontend application"
group: "frontend"
output: "bundles/frontend.txt"
sources:
- path: "webapp"
include_extensions: [".js", ".jsx", ".ts", ".tsx"]
max_file_size: "200KB"
preset: "presets/frontend.m1f-presets.yml"
documentation:
description: "Project documentation"
group: "docs"
output: "bundles/docs.txt"
sources:
- path: "docs"
include_extensions: [".md", ".rst"]
separator_style: "Markdown"
security_check: "skip"
Best Practices
- Use descriptive names for bundles and presets
- Group related bundles using the
group
property - Set appropriate security levels for different environments
- Use conditional bundles with
enabled_if_exists
for optional features - Leverage preset inheritance to avoid duplication
- Test configurations with small file sets first
- Version control your configuration files
- Document custom processors and complex patterns
Related Topics
- Auto Bundle - Using configuration files for automated bundling
- Presets - Advanced preset configuration
- CLI Reference - Command-line options that can be used in configuration
- Security - Security considerations in configuration
- Previous
- Presets
- Next
- s1f - File Splitter