Public/Initialize-DFEnvironment.ps1

#Requires -Version 7.0

function Initialize-DFEnvironment {
    <#
    .SYNOPSIS
        Bootstraps the DotForge environment: sets XDG base directory env vars
        if absent, creates the directories, and reports available package managers.
        Safe to call multiple times (idempotent).
    .DESCRIPTION
        Sets XDG_CONFIG_HOME, XDG_DATA_HOME, XDG_STATE_HOME, and XDG_CACHE_HOME
        if not already in the environment, creates all four directories, then
        detects available package managers (scoop, winget, choco). Designed to
        run once at the top of a profile before any Register-DFTool call.
    .EXAMPLE
        Initialize-DFEnvironment
        Bootstraps XDG dirs and reports which package managers are available.
    .OUTPUTS
        None
    #>

    [CmdletBinding()]
    param()

    if (-not $Env:XDG_CONFIG_HOME) { $Env:XDG_CONFIG_HOME = Join-Path $home '.config' }
    if (-not $Env:XDG_DATA_HOME)   { $Env:XDG_DATA_HOME   = Join-Path $home '.local' 'share' }
    if (-not $Env:XDG_STATE_HOME)  { $Env:XDG_STATE_HOME  = Join-Path $home '.local' 'state' }
    if (-not $Env:XDG_CACHE_HOME)  { $Env:XDG_CACHE_HOME  = Join-Path $home '.cache' }

    @($Env:XDG_CONFIG_HOME, $Env:XDG_DATA_HOME, $Env:XDG_STATE_HOME, $Env:XDG_CACHE_HOME) |
        ForEach-Object { New-DFDirectory $_ }

    $pms = @(Resolve-DFPackageManager -Force | Where-Object { $_ })

    if ($pms.Count -eq 0) {
        Write-Warning 'DotForge: No supported package managers found (scoop, winget, choco). Install one to use Install-DFTool.'
    } else {
        Write-Host "DotForge: Environment ready. Package managers: $($pms -join ', ')" -ForegroundColor Green
    }
}