CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-thefuck

Magnificent app which corrects your previous console command

Overview
Eval results
Files

configuration.mddocs/

Configuration Management

Settings management from configuration files and environment variables, supporting user customization of correction behavior, rule selection, and application preferences. The configuration system provides flexible control over thefuck's behavior through multiple sources.

Capabilities

Settings Loading and Management

Core functions for loading and managing application settings from multiple sources.

def get_settings(user_dir):
    """
    Returns settings filled with values from settings.py and environment variables.
    
    Parameters:
    - user_dir (pathlib.Path): User configuration directory path
    
    Returns:
    Settings: Complete settings object with values from defaults, file, and environment
    
    Loads settings in priority order:
    1. Default settings
    2. User settings file (~/.thefuck/settings.py)
    3. Environment variables (highest priority)
    """

def initialize_settings_file(user_dir):
    """
    Creates initial settings file if it doesn't exist.
    
    Parameters:
    - user_dir (pathlib.Path): User configuration directory path
    
    Returns:
    None
    
    Creates ~/.thefuck/settings.py with default settings template and comments.
    """

Default Configuration

Built-in default settings and constants that define the base behavior.

DEFAULT_RULES = _DefaultRulesNames([])
    """
    Default list of enabled rules.
    Special list type that includes all rules with enabled_by_default=True.
    """

DEFAULT_PRIORITY = 1000
    """
    Default priority value for rules when not specified.
    """

DEFAULT_SETTINGS = {
    'rules': DEFAULT_RULES,
    'wait_command': 3,
    'require_confirmation': True,
    'no_colors': False,
    'debug': False,
    'priority': {},
    'env': {'LC_ALL': 'C', 'LANG': 'C', 'GIT_TRACE': '1'}
}
    """
    Default configuration dictionary containing all default values.
    
    Settings:
    - rules: List of enabled correction rules
    - wait_command: Timeout in seconds for command execution
    - require_confirmation: Whether to require user confirmation before executing
    - no_colors: Disable colored output
    - debug: Enable debug logging
    - priority: Dictionary of rule name to priority overrides
    - env: Environment variables to set when executing commands
    """

Environment Variable Support

Environment variable to setting attribute mapping and processing.

ENV_TO_ATTR = {
    'THEFUCK_RULES': 'rules',
    'THEFUCK_WAIT_COMMAND': 'wait_command',
    'THEFUCK_REQUIRE_CONFIRMATION': 'require_confirmation',
    'THEFUCK_NO_COLORS': 'no_colors',
    'THEFUCK_PRIORITY': 'priority',
    'THEFUCK_DEBUG': 'debug'
}
    """
    Mapping of environment variable names to settings attributes.
    """

Special Rule List Types

Specialized list types for rule management with enhanced behavior.

class _DefaultRulesNames(RulesNamesList):
    """
    Special rules list that automatically includes rules with enabled_by_default=True.
    
    Extends RulesNamesList with default rule inclusion behavior.
    """
    
    def __contains__(self, item):
        """
        Check if rule is enabled.
        
        Parameters:
        - item (Rule): Rule object to check
        
        Returns:
        bool: True if rule is in list or has enabled_by_default=True
        """
    
    def __add__(self, items):
        """
        Add items to rules list.
        
        Parameters:
        - items (list): Items to add
        
        Returns:
        _DefaultRulesNames: New list with added items
        """

Configuration File Format

The settings file (~/.thefuck/settings.py) is a Python file that can set any of the configuration options:

# ~/.thefuck/settings.py example

# Rules to enable (list of rule names)
rules = ['git_push', 'sudo', 'cd_mkdir', 'apt_get']

# Timeout for command execution (seconds)
wait_command = 5

# Require user confirmation before executing corrections
require_confirmation = True

# Disable colored output
no_colors = False

# Enable debug logging
debug = False

# Override rule priorities (rule_name: priority)
priority = {
    'sudo': 2000,
    'git_push': 1500
}

# Environment variables for command execution
env = {
    'LC_ALL': 'C',
    'LANG': 'C',
    'GIT_TRACE': '1'
}

Environment Variables

All settings can be overridden with environment variables:

# Environment variable formats:

THEFUCK_RULES = "sudo:git_push:cd_mkdir"
    """
    Colon-separated list of rule names.
    Use 'DEFAULT_RULES' to include all default rules plus additional ones.
    """

THEFUCK_WAIT_COMMAND = "5"
    """
    Command timeout in seconds (integer).
    """

THEFUCK_REQUIRE_CONFIRMATION = "false"
    """
    Boolean setting: 'true' or 'false' (case-insensitive).
    """

THEFUCK_NO_COLORS = "true"
    """
    Boolean setting: 'true' or 'false' (case-insensitive).
    """

THEFUCK_DEBUG = "true"
    """
    Boolean setting: 'true' or 'false' (case-insensitive).
    """

THEFUCK_PRIORITY = "sudo=2000:git_push=1500"
    """
    Colon-separated rule=priority pairs.
    """

Usage Examples

Basic Settings Setup

from thefuck.conf import get_settings, initialize_settings_file
from thefuck.main import setup_user_dir

# Setup user directory and get settings
user_dir = setup_user_dir()
settings = get_settings(user_dir)

print(f"Wait timeout: {settings.wait_command}")
print(f"Confirmation required: {settings.require_confirmation}")
print(f"Enabled rules: {len(settings.rules)}")
print(f"Debug mode: {settings.debug}")

Environment Override Example

import os
from thefuck.conf import get_settings
from thefuck.main import setup_user_dir

# Set environment variables
os.environ['THEFUCK_DEBUG'] = 'true'
os.environ['THEFUCK_WAIT_COMMAND'] = '10'
os.environ['THEFUCK_RULES'] = 'sudo:git_push:DEFAULT_RULES'

# Get settings (environment overrides file settings)
user_dir = setup_user_dir()
settings = get_settings(user_dir)

print(f"Debug enabled: {settings.debug}")  # True
print(f"Wait timeout: {settings.wait_command}")  # 10

Custom Rules Configuration

from thefuck.conf import get_settings
from thefuck.types import RulesNamesList

# Example of programmatic rules configuration
user_dir = setup_user_dir()
settings = get_settings(user_dir)

# Modify rules list
custom_rules = RulesNamesList(['sudo', 'git_push', 'cd_mkdir', 'apt_get'])
new_settings = settings.update(rules=custom_rules)

print(f"Original rules count: {len(settings.rules)}")
print(f"Custom rules count: {len(new_settings.rules)}")

Priority Customization

from thefuck.conf import get_settings

user_dir = setup_user_dir()
settings = get_settings(user_dir)

# Update rule priorities
priority_overrides = {
    'sudo': 2000,        # Higher priority
    'git_push': 500,     # Lower priority
    'cd_mkdir': 1500     # Medium priority
}

custom_settings = settings.update(priority=priority_overrides)
print(f"Custom priorities: {custom_settings.priority}")

Settings Precedence

Settings are loaded in the following order (later sources override earlier ones):

  1. Default settings - Built-in defaults from DEFAULT_SETTINGS
  2. Settings file - User's ~/.thefuck/settings.py
  3. Environment variables - THEFUCK_* environment variables

This allows for flexible configuration with global defaults, user customization, and per-session overrides.

Error Handling

The configuration system handles errors gracefully:

  • File loading errors: Invalid settings files are logged but don't crash the application
  • Environment parsing errors: Invalid environment values are logged and ignored
  • Missing files: Settings file is created automatically if missing
  • Type conversion errors: Invalid values fall back to defaults with warnings

Install with Tessl CLI

npx tessl i tessl/pypi-thefuck

docs

configuration.md

core-application.md

data-types.md

index.md

rule-development.md

rule-system.md

shell-integration.md

user-interface.md

utilities.md

tile.json