Thermage provides ability to create and use custom themes to change the style of command line output with preconfigured themes variables.

Default theme variables

final public function getDefaultVariables(): Collection
{
    return collection([
        // Colors.
        'colors' => [
            'white'   => '#ffffff',
            'gray100' => '#f8f9fa',
            'gray200' => '#e9ecef',
            'gray300' => '#dee2e6',
            'gray400' => '#ced4da',
            'gray500' => '#adb5bd',
            'gray600' => '#6c757d',
            'gray700' => '#495057',
            'gray800' => '#343a40',
            'gray900' => '#212529',
            'black'   => '#000000',

            'blue'    => '#007bff',
            'blue100' => '#a8cbfe',
            'blue200' => '#81b4fe',
            'blue300' => '#5a9cfe',
            'blue400' => '#3485fd',
            'blue500' => '#0d6efd',
            'blue600' => '#0b5cd5',
            'blue700' => '#094bac',
            'blue800' => '#073984',
            'blue900' => '#05285b',

            'indigo'    => '#6610f2',
            'indigo100' => '#c8a9fa',
            'indigo200' => '#af83f8',
            'indigo300' => '#975cf6',
            'indigo400' => '#7e36f4',
            'indigo500' => '#6610f2',
            'indigo600' => '#560dcb',
            'indigo700' => '#450ba5',
            'indigo800' => '#35087e',
            'indigo900' => '#250657',

            'purple'    => '#6f42c1',
            'purple100' => '#cbbbe9',
            'purple200' => '#b49ddf',
            'purple300' => '#9d7ed5',
            'purple400' => '#8660cb',
            'purple500' => '#6f42c1',
            'purple600' => '#5d37a2',
            'purple700' => '#4b2d83',
            'purple800' => '#3a2264',
            'purple900' => '#281845',

            'pink'    => '#e83e8c',
            'pink100' => '#f0b6d3',
            'pink200' => '#ea95bf',
            'pink300' => '#e374ab',
            'pink400' => '#dd5498',
            'pink500' => '#d63384',
            'pink600' => '#b42b6f',
            'pink700' => '#92235a',
            'pink800' => '#6f1b45',
            'pink900' => '#4d1230',

            'red'    => '#dc3545',
            'red100' => '#f2b6bc',
            'red200' => '#ed969e',
            'red300' => '#e77681',
            'red400' => '#e25563',
            'red500' => '#dc3545',
            'red600' => '#b92d3a',
            'red700' => '#96242f',
            'red800' => '#721c24',
            'red900' => '#4f1319',

            'orange'    => '#fd7e14',
            'orange100' => '#fed1aa',
            'orange200' => '#febc85',
            'orange300' => '#fea75f',
            'orange400' => '#fd933a',
            'orange500' => '#fd7e14',
            'orange600' => '#d56a11',
            'orange700' => '#ac560e',
            'orange800' => '#84420a',
            'orange900' => '#5b2d07',

            'yellow'    => '#ffc107',
            'yellow100' => '#ffe9a6',
            'yellow200' => '#ffdf7e',
            'yellow300' => '#ffd556',
            'yellow400' => '#ffcb2f',
            'yellow500' => '#ffc107',
            'yellow600' => '#d6a206',
            'yellow700' => '#ad8305',
            'yellow800' => '#856404',
            'yellow900' => '#5c4503',

            'green'    => '#28a745',
            'green100' => '#b2dfbc',
            'green200' => '#8fd19e',
            'green300' => '#6dc381',
            'green400' => '#4ab563',
            'green500' => '#28a745',
            'green600' => '#228c3a',
            'green700' => '#1b722f',
            'green800' => '#155724',
            'green900' => '#0e3c19',

            'teal'    => '#20c997',
            'teal100' => '#afecda',
            'teal200' => '#8be3c9',
            'teal300' => '#67dab8',
            'teal400' => '#44d2a8',
            'teal500' => '#20c997',
            'teal600' => '#1ba97f',
            'teal700' => '#168967',
            'teal800' => '#11694f',
            'teal900' => '#0c4836',

            'cyan'    => '#17a2b8',
            'cyan100' => '#abdee5',
            'cyan200' => '#86cfda',
            'cyan300' => '#61c0cf',
            'cyan400' => '#3cb1c3',
            'cyan500' => '#17a2b8',
            'cyan600' => '#13889b',
            'cyan700' => '#106e7d',
            'cyan800' => '#0c5460',
            'cyan900' => '#083a42',

            'primary'   => '#007bff', // blue
            'secondary' => '#6c757d', // gray600
            'success'   => '#28a745', // green
            'info'      => '#17a2b8', // cyan
            'warning'   => '#ffc107', // yellow
            'danger'    => '#dc3545', // red
            'light'     => '#f8f9fa', // gray100
            'dark'      => '#212529', // gray900
        ],

        // Borders.
        'borders' => [
            'square' => [
                'top-left' => '┌',
                'top' => '─',
                'top-right' => '┐',
                'right' => '│',
                'left' => '│',
                'bottom-right' => '┘',
                'bottom' => '─',
                'bottom-left' => '└',
            ],
            'rounded' => [
                'top-left' => '╭',
                'top' => '─',
                'top-right' => '╮',
                'right' => '│',
                'left' => '│',
                'bottom-right' => '╯',
                'bottom' => '─',
                'bottom-left' => '╰',
            ],
            'double' => [
                'top-left' => '╔',
                'top' => '═',
                'top-right' => '╗',
                'right' => '║',
                'left' => '║',
                'bottom-right' => '╝',
                'bottom' => '═',
                'bottom-left' => '╚',
            ],
            'heavy' => [
                'top-left' => '┏',
                'top' => '━',
                'top-right' => '┓',
                'right' => '┃',
                'left' => '┃',
                'bottom-right' => '┛',
                'bottom' => '━',
                'bottom-left' => '┗',
            ],
        ],
        
        // Spacing.
        'spacer' => 1,

        // Alert element.
        'alert' => [
            'text-align' => 'left',
            'width-auto' => false,
            'width' => 50,
            'type' => [
                'info' => [
                    'bg' => 'info',
                    'color' => 'black',
                ],
                'warning' => [
                    'bg' => 'warning',
                    'color' => 'black',
                ],
                'danger' => [
                    'bg' => 'danger',
                    'color' => 'white',
                ],
                'success' => [
                    'bg' => 'success',
                    'color' => 'black',
                ],
                'primary' => [
                    'bg' => 'primary',
                    'color' => 'white',
                ],
                'secondary' => [
                    'bg' => 'secondary',
                    'color' => 'white',
                ],
            ],
        ],

        // Chart element.
        'chart' => [
            'text-align' => 'left',
            'border' => 'filled',
            'borders' => [
                'filled' => [
                    'top' => ' ',
                ],
                'thin' => [
                    'top' => '─',
                ],
                'double' => [
                    'top' => '═',
                ],
                'triple' => [
                    'top' => '≡',
                ],
                'heavy' => [
                    'top' => '━'
                ],
                'super-heavy' => [
                    'top' => '▬'
                ],
                'dashed' => [
                    'top' => '-',
                ],
                'rope' => [
                    'top' => '▱'
                ],
                'rope-heavy' => [
                    'top' => '▰'
                ],
                'brick' => [
                    'top' => '▭'
                ],
                'block-small' => [
                    'top' => '▫'
                ],
                'block-small-heavy' => [
                    'top' => '▪'
                ],
                'block' => [
                    'top' => '◻'
                ],
                'noise' => [
                    'top' => '▩'
                ],
            ],
        ],

        // Canvas element.
        'canvas' => [
            'width' => 16,
            'height' => 16,
            'pixel-width' => 3,
        ],
        
        // Hr element.
        'hr' => [
            'text-align' => 'left',
            'border' => 'thin',
            'borders' => [
                'thin' => [
                    'top' => '─',
                ],
                'double' => [
                    'top' => '═',
                ],
                'triple' => [
                    'top' => '≡',
                ],
                'heavy' => [
                    'top' => '━'
                ],
                'super-heavy' => [
                    'top' => '▬'
                ],
                'dashed' => [
                    'top' => '-',
                ],
                'arrow-down' => [
                    'top' => '▼'
                ],
                'arrow-up' => [
                    'top' => '▲'
                ],
                'wave' => [
                    'top' => '~'
                ],
                'rope' => [
                    'top' => '▱'
                ],
                'rope-heavy' => [
                    'top' => '▰'
                ],
                'brick' => [
                    'top' => '▭'
                ],
                'block-small' => [
                    'top' => '▫'
                ],
                'block-small-heavy' => [
                    'top' => '▪'
                ],
                'block' => [
                    'top' => '◻'
                ],
                'noise' => [
                    'top' => '▩'
                ],
            ],
        ],
    ]);
}
// ...

Default theme colors

blue #007bff
blue100
blue200
blue300
blue400
blue500
blue600
blue700
blue800
blue900
indigo #6610f2
indigo100
indigo200
indigo300
indigo400
indigo500
indigo600
indigo700
indigo800
indigo900
purple #6f42c1
purple100
purple200
purple300
purple400
purple500
purple600
purple700
purple800
purple900
pink #e83e8c
pink100
pink200
pink300
pink400
pink500
pink600
pink700
pink800
pink900
red #dc3545
red100
red200
red300
red400
red500
red600
red700
red800
red900
orange #fd7e14
orange100
orange200
orange300
orange400
orange500
orange600
orange700
orange800
orange900
yellow #ffc107
yellow100
yellow200
yellow300
yellow400
yellow500
yellow600
yellow700
yellow800
yellow900
green #28a745
green100
green200
green300
green400
green500
green600
green700
green800
green900
teal #20c997
teal100
teal200
teal300
teal400
teal500
teal600
teal700
teal800
teal900
cyan #17a2b8
cyan100
cyan200
cyan300
cyan400
cyan500
cyan600
cyan700
cyan800
cyan900


If the terminal doesn’t support true colors, the nearest named color is used.
E.g. #c0392b is degraded to red or #f1c40f is degraded to yellow.

By default, the Windows command console doesn't support output coloring. The Console component disables output coloring for Windows systems, but if your commands invoke other scripts which emit color sequences, they will be wrongly displayed as raw escape characters. Install the Cmder, ConEmu, ANSICON, Mintty (used by default in GitBash and Cygwin) or Hyper free applications to add coloring support to your Windows command console.

Create theme

<?php

declare(strict_types=1);

use Atomastic\Arrays\Arrays as Collection;
use Thermage\Themes\Theme;
use Thermage\Themes\ThemeInterface;

use function arrays as collection;

final class RadTheme extends Theme implements ThemeInterface
{
    public function getThemeVariables(): Collection
    {
        return collection([]);
    }
}

Set theme

use Thermage\Thermage;

// ... 

Thermage::setTheme(new RadTheme());