Skip to content

envconsolidate - Environment Consolidation Tool

Intelligent environment variable management and consolidation tool for shell environments.

Overview

envconsolidate analyzes, consolidates, and optimizes environment variables across different shells and systems. It detects conflicts, removes duplicates, validates paths, and generates optimized environment configurations.

When to use: Cleaning up environment variables, resolving path conflicts, or optimizing shell startup performance.

Usage

envconsolidate [options] [action]
```bash

### Options

- `-o FILE`: Output file
- `-f FORMAT`: Output format (sh, bash, zsh, fish)
- `-v`: Verbose output
- `-q`: Quiet mode
- `-n`: Dry run
- `-c CONFIG`: Configuration file
- `-h`: Show help

### Actions

- `analyze`: Analyze current environment
- `consolidate`: Consolidate and optimize
- `validate`: Validate environment variables
- `clean`: Remove invalid/unused variables
- `export`: Export environment to file

## Examples

### Basic Analysis

```bash
# Analyze current environment
envconsolidate analyze

# Validate environment variables
envconsolidate validate

# Clean invalid variables
envconsolidate clean
```bash

### Consolidation

```bash
# Consolidate environment
envconsolidate consolidate

# Export to file
envconsolidate -o ~/.env.consolidated export

# Generate shell-specific config
envconsolidate -f zsh -o ~/.zshenv export
```bash

### Advanced Usage

```bash
# Dry run consolidation
envconsolidate -n consolidate

# Verbose analysis
envconsolidate -v analyze

# Custom configuration
envconsolidate -c my-config.toml consolidate
```bash

## How It Works

### Analysis Pipeline

1. **Environment Capture**: Collect all environment variables
2. **Variable Classification**: Categorize by type and purpose
3. **Conflict Detection**: Identify conflicting or duplicate values
4. **Path Validation**: Check PATH and library paths
5. **Optimization**: Remove redundancies and optimize ordering
6. **Validation**: Ensure variables are properly set

### Variable Types

- **PATH Variables**: PATH, LD_LIBRARY_PATH, etc.
- **Configuration**: EDITOR, LANG, TZ, etc.
- **Application**: Specific app environment variables
- **System**: System-defined variables
- **User**: User-defined variables

### Conflict Resolution

- **Duplicate Paths**: Remove duplicate entries in PATH
- **Conflicting Values**: Detect and resolve conflicts
- **Invalid Paths**: Remove non-existent directories
- **Ordering**: Optimize path search order

## Configuration

### Configuration File

```toml
# ~/.config/envconsolidate/config.toml
[analysis]
check_duplicates = true
validate_paths = true
check_conflicts = true

[consolidation]
remove_duplicates = true
optimize_order = true
preserve_user_vars = true

[validation]
strict_mode = false
warn_only = true
ignore_patterns = ["TEMP", "TMP"]

[output]
format = "sh"
include_comments = true
group_variables = true

[paths]
max_path_length = 4096
check_permissions = true
follow_symlinks = true
```bash

### Environment Variables

```bash
# Analysis settings
export ENVCONSOLIDATE_STRICT="false"
export ENVCONSOLIDATE_VERBOSE="true"

# Output preferences
export ENVCONSOLIDATE_FORMAT="bash"
export ENVCONSOLIDATE_OUTPUT_FILE="~/.env.consolidated"

# Path validation
export ENVCONSOLIDATE_CHECK_PERMISSIONS="true"
export ENVCONSOLIDATE_MAX_PATH_LENGTH="4096"
```bash

## Dependencies

### Required

- **bash/zsh**: Shell environment access
- **grep/awk**: Text processing
- **sort/uniq**: Data manipulation
- **file**: File type checking

### Optional

- **realpath**: Path normalization
- **readlink**: Symlink resolution
- **stat**: File information
- **getent**: System database access

## Troubleshooting

### No Variables Found

**Symptom:** Analysis shows no environment variables

**Cause:** Environment not properly loaded

**Fix:**

```bash
# Check environment
env | head -10

# Source profile
source ~/.bashrc

# Run in interactive shell
bash -i -c "envconsolidate analyze"

# Check shell
echo $SHELL
```bash

### Path Validation Errors

**Symptom:** Many path validation warnings

**Cause:** Non-existent directories in PATH

**Fix:**

```bash
# Check PATH contents
echo $PATH | tr ':' '\n'

# Remove invalid paths
export PATH=$(echo $PATH | tr ':' '\n' | grep -v "nonexistent" | tr '\n' ':')

# Clean with envconsolidate
envconsolidate clean
```bash

### Permission Issues

**Symptom:** Cannot write output file

**Cause:** Output directory permissions

**Fix:**

```bash
# Check permissions
ls -ld ~/.config/

# Create directory
mkdir -p ~/.config/envconsolidate

# Change permissions
chmod 755 ~/.config/envconsolidate

# Use different location
envconsolidate -o /tmp/env.consolidated export
```bash

### Variable Conflicts

**Symptom:** Conflicting variable values detected

**Cause:** Multiple definitions of same variable

**Fix:**

```bash
# Check variable sources
grep -r "VARIABLE_NAME" ~/.bashrc ~/.zshrc ~/.profile

# Consolidate definitions
# Edit shell config files to have single definition

# Use envconsolidate to resolve
envconsolidate consolidate
```bash

## Performance

### Analysis Times

| Environment Size | Variables | Time | Memory |
| ---------------- | --------- | ---- | ------ |
| Small            | 50        | 1s   | 10MB   |
| Medium           | 200       | 5s   | 25MB   |
| Large            | 500       | 15s  | 50MB   |

### Optimization Impact

- **PATH Cleanup**: 20-50% reduction in PATH length
- **Duplicate Removal**: 10-30% fewer environment variables
- **Shell Startup**: 5-15% faster shell initialization

## Integration

### With Shell Initialization

```bash
# Add to ~/.zshrc
# Load consolidated environment
[ -f ~/.env.consolidated ] && source ~/.env.consolidated

# Or use envconsolidate directly
eval "$(envconsolidate export)"
```bash

### With Development Environments

```bash
# Project-specific environment
cd myproject
envconsolidate -c project.toml consolidate

# Development setup
envconsolidate -f bash -o .envrc export
direnv allow
```bash

### With System Administration

```bash
# User environment audit
sudo -u username envconsolidate analyze

# System-wide consolidation
for user in $(ls /home); do
    sudo -u $user envconsolidate -q consolidate
done

# Compliance checking
envconsolidate validate > compliance-report.txt
```bash

### With CI/CD

```bash
# Environment validation in CI
envconsolidate validate
if [ $? -ne 0 ]; then
    echo "Environment validation failed"
    exit 1
fi

# Export for container builds
envconsolidate -f sh -o .env export
```bash

## Output Formats

### Shell Format (default)

```bash
# Environment variables consolidated by envconsolidate
# Generated on: 2024-01-01 12:00:00

# PATH variables
export PATH="/usr/local/bin:/usr/bin:/bin"
export LD_LIBRARY_PATH="/usr/local/lib:/usr/lib"

# Configuration
export EDITOR="vim"
export LANG="en_US.UTF-8"

# Application variables
export JAVA_HOME="/usr/lib/jvm/java-11"
export GOPATH="$HOME/go"
```bash

### JSON Format

```json
{
  "metadata": {
    "generated": "2024-01-01T12:00:00Z",
    "tool": "envconsolidate",
    "version": "1.0.0"
  },
  "variables": {
    "PATH": {
      "value": "/usr/local/bin:/usr/bin:/bin",
      "type": "path",
      "validated": true,
      "conflicts": []
    },
    "EDITOR": {
      "value": "vim",
      "type": "config",
      "validated": true
    }
  },
  "statistics": {
    "total_variables": 45,
    "path_variables": 3,
    "duplicates_removed": 5,
    "invalid_paths": 2
  }
}
```bash

## Technical Details

### Variable Analysis

- **Type Detection**: Automatic categorization
- **Value Validation**: Type-appropriate validation
- **Conflict Detection**: Cross-variable analysis
- **Dependency Tracking**: Variable relationships

### Path Optimization

- **Duplicate Removal**: Eliminate redundant paths
- **Existence Checking**: Validate directory existence
- **Permission Validation**: Check access permissions
- **Ordering Optimization**: Optimize search order

### Conflict Resolution

- **Priority System**: User > System > Application
- **Merge Strategies**: Concatenation, override, validation
- **Interactive Resolution**: User-guided conflict resolution
- **Automatic Resolution**: Rule-based conflict handling

### Validation Rules

- **PATH Variables**: Directory existence and permissions
- **File Variables**: File accessibility
- **URL Variables**: Format validation
- **Numeric Variables**: Range and type checking

## See Also

- **[auditenv](auditenv.md)** - Environment auditing
- **[diffenv](diffenv.md)** - Environment comparison
- **[Environment Management](../../README.md#environment)** - Environment guide