Private/Rendering/Get-WindowsTerminalSettingsPath.ps1

function Get-WindowsTerminalSettingsPath {
    <#
    .SYNOPSIS
        Returns the path to the user's Windows Terminal settings.json, or $null if none is found.
 
    .DESCRIPTION
        Single source of truth for locating Windows Terminal's settings.json. Windows Terminal
        ships in a few flavors that each store settings.json in a different place; this probes the
        known locations in order and returns the first that exists:
 
          1. Stable (Store / packaged): %LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json
          2. Preview (packaged): %LOCALAPPDATA%\Packages\Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe\LocalState\settings.json
          3. Unpackaged (scoop / portable): %LOCALAPPDATA%\Microsoft\Windows Terminal\settings.json
 
        Returns $null when none exist (e.g. Windows Terminal isn't installed, or has never been
        launched so settings.json hasn't been generated yet) — callers treat that as a silent,
        non-fatal condition (Write-Warning + return), not an error.
 
    .EXAMPLE
        $path = Get-WindowsTerminalSettingsPath
        if ($path) { Install-WindowsTerminalScheme -SettingsPath $path }
    #>

    [CmdletBinding()]
    param()

    $candidates = @(
        (Join-Path $env:LOCALAPPDATA 'Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json')
        (Join-Path $env:LOCALAPPDATA 'Packages\Microsoft.WindowsTerminalPreview_8wekyb3d8bbwe\LocalState\settings.json')
        (Join-Path $env:LOCALAPPDATA 'Microsoft\Windows Terminal\settings.json')
    )

    foreach ($candidate in $candidates) {
        if (Test-Path -LiteralPath $candidate -PathType Leaf) { return $candidate }
    }

    return $null
}