Private/Prompt/Get-BundledThemeBranding.ps1

function Get-BundledThemeBranding {
    <#
    .SYNOPSIS
        Returns the display name, banner color, step icon, bat theme, fd/fzf color specs, and Windows
        Terminal color scheme paired with a bundled theme.
 
    .DESCRIPTION
        Each bundled theme has a matching identity so the startup banner, step marker, and the
        colors of bat, fd, and fzf feel cohesive with the prompt colors:
 
          screwcity -> 'Screw City' / banner #4c81c8 (signature purple #c9aaff stays in the palettes)
                                       / :nut_and_bolt: (🔩) / Dracula
          forestcity -> 'Forest City' / banner #8fce72 (also the signature green)
                                       / :deciduous_tree: (🌳) / gruvbox-dark
 
        DisplayName is the theme's friendly label (shown in the install wizard's theme picker); it is
        NOT the banner text — the default banner text is uniformly $env:COMPUTERNAME for every theme
        (see Get-PwshProfileDefault / Initialize-PwshProfile). The step icon is stored without a
        trailing space; the separator between the glyph and the step text is added at render time
        (Get-StepIconPrefix). BatTheme is the `bat --list-themes` value Enable-Bat assigns to
        $env:BAT_THEME so bat's highlighting matches the prompt palette.
 
        LsColors is an LS_COLORS spec Enable-Fd assigns to $env:LS_COLORS so fd's output is tinted to
        match the prompt; it uses truecolor (38;2;R;G;B) matching the signature hex exactly. FzfColors
        is an fzf `--color` spec Enable-Fzf folds into $env:FZF_DEFAULT_OPTS so fzf's picker matches
        the prompt (also truecolor hex). Both are fixed RGB, so they render identically across
        terminals rather than following the terminal's own scheme.
 
        TerminalScheme is a Windows Terminal color scheme (a hashtable in the shape Windows Terminal's
        settings.json `schemes` array expects: `name`, `background`, `foreground`, `cursorColor`,
        `selectionBackground`, and the 16 ANSI keys black..white + bright*). Install-WindowsTerminalScheme
        writes it into the user's settings.json so the terminal's own palette matches the prompt. Its
        `name` is the DisplayName, so it reads nicely in Windows Terminal's color-scheme dropdown. Like
        LsColors/FzfColors the hex values are hardcoded here (not parsed out of the theme's .omp.json),
        keeping this map the single source of truth for the theme's color identity.
 
        Both Initialize-PwshProfile (at startup, to fill the banner color/icon not explicitly passed)
        and Get-PwshProfileDefault (at install time, to pre-fill the wizard and seed the comparison
        baseline) resolve color/icon through here, so the two stay in sync from one source.
 
        Any unrecognized name — including a custom theme path chosen at install — falls back to the
        'screwcity' branding, which is the module's neutral default identity.
 
    .PARAMETER Name
        The bundled theme name (e.g. 'screwcity', 'forestcity'). Unknown names fall back to
        'screwcity'.
 
    .EXAMPLE
        Get-BundledThemeBranding -Name forestcity
 
        Returns @{ DisplayName = 'Forest City'; BannerColor = '#8fce72'; StepIcon = ':deciduous_tree:';
        BatTheme = 'gruvbox-dark'; LsColors = '…'; FzfColors = '…'; TerminalScheme = @{ … } }.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Position = 0)]
        [string]$Name = 'screwcity'
    )

    $branding = @{
        screwcity  = @{
            DisplayName = 'Screw City'
            BannerColor = '#4c81c8'
            StepIcon    = ':nut_and_bolt:'
            BatTheme    = 'Dracula'
            # Purple dirs / cyan symlinks / green executables / amber archives / magenta images.
            LsColors    = 'di=1;38;2;201;170;255:ln=38;2;95;215;255:ex=1;38;2;143;206;114:*.zip=38;2;255;175;95:*.tar=38;2;255;175;95:*.gz=38;2;255;175;95:*.7z=38;2;255;175;95:*.png=38;2;215;135;255:*.jpg=38;2;215;135;255:*.jpeg=38;2;215;135;255:*.gif=38;2;215;135;255:*.svg=38;2;215;135;255'
            FzfColors   = 'fg:-1,bg:-1,hl:#5fd7ff,fg+:#ffffff,bg+:#3a3a3a,hl+:#c9aaff,info:#c9aaff,prompt:#c9aaff,pointer:#c9aaff,marker:#8fce72,spinner:#5fd7ff,header:#5fd7ff'
            # Maps the shared palette keys (purple-deep bg, gray-light fg, signature purple-light
            # cursor/brightPurple, violet-mid selection, *-bright/*-light pairs for the ANSI 8+8).
            TerminalScheme = @{
                name                = 'Screw City'
                background          = '#1a1033'
                foreground          = '#c4c4c4'
                cursorColor         = '#c9aaff'
                selectionBackground = '#4a3585'
                black               = '#1a1a1a'
                red                 = '#e05e5e'
                green               = '#43c97e'
                yellow              = '#ffb347'
                blue                = '#5ba4d4'
                purple              = '#9f7be7'
                cyan                = '#2496ed'
                white               = '#c4c4c4'
                brightBlack         = '#8a8a8a'
                brightRed           = '#f09090'
                brightGreen         = '#7de0aa'
                brightYellow        = '#ffd080'
                brightBlue          = '#7bb3f0'
                brightPurple        = '#c9aaff'
                brightCyan          = '#60b8f5'
                brightWhite         = '#ffffff'
            }
        }
        forestcity = @{
            DisplayName = 'Forest City'
            BannerColor = '#8fce72'
            StepIcon    = ':deciduous_tree:'
            BatTheme    = 'gruvbox-dark'
            # Green dirs / teal symlinks / gold executables / brown archives / light-green images.
            LsColors    = 'di=1;38;2;143;206;114:ln=38;2;102;217;197:ex=1;38;2;229;192;123:*.zip=38;2;191;143;94:*.tar=38;2;191;143;94:*.gz=38;2;191;143;94:*.7z=38;2;191;143;94:*.png=38;2;152;195;121:*.jpg=38;2;152;195;121:*.jpeg=38;2;152;195;121:*.gif=38;2;152;195;121:*.svg=38;2;152;195;121'
            FzfColors   = 'fg:-1,bg:-1,hl:#66d9c5,fg+:#ffffff,bg+:#3a3a3a,hl+:#8fce72,info:#8fce72,prompt:#8fce72,pointer:#8fce72,marker:#e5c07b,spinner:#66d9c5,header:#66d9c5'
            # Same palette-key mapping as screwcity, recolored to the forest palette.
            TerminalScheme = @{
                name                = 'Forest City'
                background          = '#102a18'
                foreground          = '#ccc6b9'
                cursorColor         = '#8fce72'
                selectionBackground = '#3a5a3d'
                black               = '#1b1a17'
                red                 = '#d65f43'
                green               = '#6fc14b'
                yellow              = '#c89b5a'
                blue                = '#6fa6a0'
                purple              = '#9bbf8a'
                cyan                = '#4fb0a0'
                white               = '#ccc6b9'
                brightBlack         = '#9a9387'
                brightRed           = '#f0937c'
                brightGreen         = '#9fe07d'
                brightYellow        = '#e0c79a'
                brightBlue          = '#9cc6bf'
                brightPurple        = '#8fce72'
                brightCyan          = '#84cdc0'
                brightWhite         = '#ffffff'
            }
        }
    }

    if ($branding.ContainsKey($Name)) { $branding[$Name].Clone() } else { $branding['screwcity'].Clone() }
}