///|
priv struct Logo {
  palette : Array[String]
  lines : Array[String]
}

///|
let macos_logo : Logo = {
  palette: ["32", "33", "91", "31", "35", "34"],
  lines: [
    "                     ..'", "                 ,xNMM.", "               .OMMMMo",
    "               lMM\"", "     .;loddo:.  .olloddol;.", "   cKMMMMMMMMMMNWMMMMMMMMMM0:",
    " $2.KMMMMMMMMMMMMMMMMMMMMMMMWd.", " XMMMMMMMMMMMMMMMMMMMMMMMX.", "$3;MMMMMMMMMMMMMMMMMMMMMMMM:",
    ":MMMMMMMMMMMMMMMMMMMMMMMM:", "$4.MMMMMMMMMMMMMMMMMMMMMMMMX.", " kMMMMMMMMMMMMMMMMMMMMMMMMWd.",
    " $5'XMMMMMMMMMMMMMMMMMMMMMMMMMMk", "  'XMMMMMMMMMMMMMMMMMMMMMMMMK.", "    $6kMMMMMMMMMMMMMMMMMMMMMMd",
    "     ;KMMMMMMMWXXWMMMMMMMk.", "       \"cooc*\"    \"*coo'\"",
  ],
}

///|
let linux_logo : Logo = {
  palette: ["37", "90", "33"],
  lines: [
    "        $2#####", "       $2#######", "       $2##$1O$2#$1O$2##", "       $2#$3#####$2#",
    "     $2##$1##$3###$1##$2##", "    $2#$1##########$2##", "   $2#$1############$2##",
    "   $2#$1############$2###", "  $3##$2#$1###########$2##$3#", "$3######$2#$1#######$2#$3######",
    "$3#######$2#$1#####$2#$3#######", "  $3#####$2#######$3#####",
  ],
}

///|
let arch_logo : Logo = {
  palette: ["36", "36"],
  lines: [
    "                  -`", "                 .o+`", "                `ooo/", "               `+oooo:",
    "              `+oooooo:", "              -+oooooo+:", "            `/:-:++oooo+:",
    "           `/++++/+++++++:", "          `/++++++++++++++:", "         `/+++o$2oooooooo$1oooo/`",
    "        ./$2ooosssso++osssssso$1+`", "$2       .oossssso-````/ossssss+`", "      -osssssso.      :ssssssso.",
    "     :osssssss/        osssso+++.", "    /ossssssss/        +ssssooo/-", "  `/ossssso+/:-        -:/+osssso+-",
    " `+sso+:-`                 `.-/+oso:", "`++:.                           `-/+o/",
    ".`                                 `/",
  ],
}

///|
let ubuntu_logo : Logo = {
  palette: ["31", "31"],
  lines: [
    "                             ....", "              $2.',:clooo:  $1.:looooo:.",
    "           $2.;looooooooc  $1.oooooooooo'", "        $2.;looooool:,''.  $1:ooooooooooc",
    "       $2;looool;.         $1'oooooooooo,", "      $2;clool'             $1.cooooooc.  $2,,",
    "         $2...                $1......  $2.:oo,", "  $1.;clol:,.                        $2.loooo'",
    " $1:ooooooooo,                        $2'ooool", "$1'ooooooooooo.                        $2loooo.",
    "$1'ooooooooool                         $2coooo.", " $1,loooooooc.                        $2.loooo.",
    "   $1.,;;;'.                          $2;ooooc", "       $2...                         $2,ooool.",
    "    $2.cooooc.              $1..',,'.  $2.cooo.", "      $2;ooooo:.           $1;oooooooc.  $2:l.",
    "       $2.coooooc,..      $1coooooooooo.", "         $2.:ooooooolc:. $1.ooooooooooo'",
    "           $2.':loooooo;  $1,oooooooooc", "               $2..';::c'  $1.;loooo:'",
  ],
}

///|
let debian_logo : Logo = {
  palette: ["31", "37"],
  lines: [
    "        $2_,met$$$$$$$$gg.", "     ,g$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$P.", "   ,g$$$$P\"\"       \"\"\"Y$$$$.\".",
    "  ,$$$$P'              `$$$$$$.", " ',$$$$P       ,ggs.     `$$$$b:", " `d$$$$'     ,$P\"'   $1.$2    $$$$$$",
    "  $$$$P      d$'     $1,$2    $$$$P", "  $$$$:      $$$.   $1-$2    ,d$$$$'",
    "  $$$$;      Y$b._   _,d$P'", "  Y$$$$.    $1`.$2`\"Y$$$$$$$$P\"\"", "  `$$$$b      $1\"-.__",
    "  $2`Y$$$$b", "   `Y$$$$.", "     `$$$$b.", "       `Y$$$$b.", "         `\"Y$$b._",
    "             `\"\"\"\"",
  ],
}

///|
let fedora_logo : Logo = {
  palette: ["34", "37"],
  lines: [
    "             .',;::::;,'.", "         .';:cccccccccccc:;,.", "      .;cccccccccccccccccccccc;.",
    "    .:cccccccccccccccccccccccccc:.", "  .;ccccccccccccc;$2.:dddl:.$1;ccccccc;.",
    " .:ccccccccccccc;$2OWMKOOXMWd$1;ccccccc:.", ".:ccccccccccccc;$2KMMc$1;cc;$2xMMc$1;ccccccc:.",
    ",cccccccccccccc;$2MMM.$1;cc;$2;WW:$1;cccccccc,", ":cccccccccccccc;$2MMM.$1;cccccccccccccccc:",
    ":ccccccc;$2oxOOOo$1;$2MMM000k.$1;cccccccccccc:", "ccccc;$20MMKxdd:$1;$2MMMkddc.$1;cccccccccccc;",
    "ccccc;$2XMO'$1;cccc;$2MMM.$1;cccccccccccccccc'", "ccccc;$2MMo$1;ccccc;$2MMW.$1;ccccccccccccccc;",
    "ccccc;$20MNc.$1ccc$2.xMMd$1;ccccccccccccccc;", "cccccc;$2dNMWXXXWM0:$1;cccccccccccccc:,",
    "cccccccc;$2.:odl:.$1;cccccccccccccc:,.", "ccccccccccccccccccccccccccccc:'.",
    ":ccccccccccccccccccccccc:;,..", " ':cccccccccccccccc::;,.",
  ],
}

///|
let nixos_logo : Logo = {
  palette: ["34", "36", "34", "36", "34", "36"],
  lines: [
    "          $1▗▄▄▄       $2▗▄▄▄▄    ▄▄▄▖", "          $1▜███▙       $2▜███▙  ▟███▛",
    "           $1▜███▙       $2▜███▙▟███▛", "            $1▜███▙       $2▜██████▛",
    "     $1▟█████████████████▙ $2▜████▛     $3▟▙",
    "    $1▟███████████████████▙ $2▜███▙    $3▟██▙",
    "           $6▄▄▄▄▖           $2▜███▙  $3▟███▛",
    "          $6▟███▛             $2▜██▛ $3▟███▛", "         $6▟███▛               $2▜▛ $3▟███▛",
    "$6▟███████████▛                  $3▟██████████▙",
    "$6▜██████████▛                  $3▟███████████▛",
    "      $6▟███▛ $5▟▙               $3▟███▛", "     $6▟███▛ $5▟██▙             $3▟███▛",
    "    $6▟███▛  $5▜███▙           $3▝▀▀▀▀", "    $6▜██▛    $5▜███▙ $4▜██████████████████▛",
    "     $6▜▛     $5▟████▙ $4▜████████████████▛",
    "           $5▟██████▙         $4▜███▙", "          $5▟███▛▜███▙         $4▜███▙",
    "         $5▟███▛  ▜███▙         $4▜███▙", "         $5▝▀▀▀    ▀▀▀▀▘         $4▀▀▀▘",
  ],
}

///|
let windows_logo : Logo = {
  palette: ["31", "32", "34", "33"],
  lines: [
    "$1        ,.=:!!t3Z3z.,", "       :tt:::tt333EE3", "$1       Et:::ztt33EEEL$2 @Ee.,      ..,",
    "$1      ;tt:::tt333EE7$2 ;EEEEEEttttt33#", "$1     :Et:::zt333EEQ.$2 $EEEEEttttt33QL",
    "$1     it::::tt333EEF$2 @EEEEEEttttt33F", "$1    ;3=*^```\"*4EEV$2 :EEEEEEttttt33@.",
    "$3    ,.=::::!t=., $1`$2 @EEEEEEtttz33QF", "$3   ;::::::::zt33)$2   \"4EEEtttji3P*",
    "$3  :t::::::::tt33.$4:Z3z..$2  ``$4 ,..g.", "$3  i::::::::zt33F$4 AEEEtttt::::ztF",
    "$3 ;:::::::::t33V$4 ;EEEttttt::::t3", "$3 E::::::::zt33L$4 @EEEtttt::::z3F",
    "$3{3=*^```\"*4E3)$4 ;EEEtttt:::::tZ`", "$3             `$4 :EEEEtttt::::z7",
    "                 \"VEzjt:;;z>*`",
  ],
}

///|
let alpine_logo : Logo = {
  palette: ["34"],
  lines: [
    "       .hddddddddddddddddddddddh.", "      :dddddddddddddddddddddddddd:", "     /dddddddddddddddddddddddddddd/",
    "    +dddddddddddddddddddddddddddddd+", "  `sdddddddddddddddddddddddddddddddds`",
    " `ydddddddddddd++hdddddddddddddddddddy`", ".hddddddddddd+`  `+ddddh:-sdddddddddddh.",
    "hdddddddddd+`      `+y:    .sddddddddddh", "ddddddddh+`   `//`   `.`     -sddddddddd",
    "ddddddh+`   `/hddh/`   `:s-    -sddddddd", "ddddh+`   `/+/dddddh/`   `+s-    -sddddd",
    "ddd+`   `/o` :dddddddh/`   `oy-    .yddd", "hdddyo+ohddyosdddddddddho+oydddy++ohdddh",
    ".hddddddddddddddddddddddddddddddddddddh.", " `yddddddddddddddddddddddddddddddddddy`",
    "  `sdddddddddddddddddddddddddddddddds`", "    +dddddddddddddddddddddddddddddd+",
    "     /dddddddddddddddddddddddddddd/", "      :dddddddddddddddddddddddddd:",
    "       .hddddddddddddddddddddddh.",
  ],
}

///|
let android_logo : Logo = {
  palette: ["32", "37"],
  lines: [
    "         -o          o-", "          +hydNNNNdyh+", "        +mMMMMMMMMMMMMm+",
    "      `dMM$2m:$1NMMMMMMN$2:m$1MMd`", "      hMMMMMMMMMMMMMMMMMMh", "  ..  yyyyyyyyyyyyyyyyyyyy  ..",
    ".mMMm`MMMMMMMMMMMMMMMMMMMM`mMMm.", ":MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:", ":MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:",
    ":MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:", ":MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:", "-MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM-",
    " +yy+ MMMMMMMMMMMMMMMMMMMM +yy+", "      mMMMMMMMMMMMMMMMMMMm", "      `/++MMMMh++hMMMM++/`",
    "          MMMMo  oMMMM", "          MMMMo  oMMMM", "          oNMm-  -mMNs",
  ],
}

///|
let artix_logo : Logo = {
  palette: ["36"],
  lines: [
    "                   '", "                  'o'", "                 'ooo'", "                'ooxoo'",
    "               'ooxxxoo'", "              'oookkxxoo'", "             'oiioxkkxxoo'",
    "            ':;:iiiioxxxoo'", "               `'.;::ioxxoo'", "          '-.      `':;jiooo'",
    "         'oooio-..     `'i:io'", "        'ooooxxxxoio:,.   `'-;'", "       'ooooxxxxxkkxoooIi:-.  `'",
    "      'ooooxxxxxkkkkxoiiiiiji'", "     'ooooxxxxxkxxoiiii:'`     .i'", "    'ooooxxxxxoi:::'`       .;ioxo'",
    "   'ooooxooi::'`         .:iiixkxxo'", "  'ooooi:'`                `'';ioxxo'",
    " 'i:'`                          '':io'", "'`                                   `'",
  ],
}

///|
let deepin_logo : Logo = {
  palette: ["34"],
  lines: [
    "             ............", "         .';;;;;.       .,;,.", "      .,;;;;;;;.       ';;;;;;;.",
    "    .;::::::::'     .,::;;,''''',.", "   ,'.::::::::    .;;'.          ';",
    "  ;'  'cccccc,   ,' :: '..        .:", " ,,    :ccccc.  ;: .c, '' :.       ,;",
    ".l.     cllll' ., .lc  :; .l'       l.", ".c       :lllc  ;cl:  .l' .ll.      :'",
    ".l        'looc. .   ,o:  'oo'      c,", ".o.         .:ool::coc'  .ooo'      o.",
    " ::            .....   .;dddo      ;c", "  l:...            .';lddddo.     ,o",
    "   lxxxxxdoolllodxxxxxxxxxc      :l", "    ,dxxxxxxxxxxxxxxxxxxl.     'o,",
    "      ,dkkkkkkkkkkkkko;.    .;o;", "        .;okkkkkdl;.    .,cl:.", "            .,:cccccccc:,.",
  ],
}

///|
let endeavouros_logo : Logo = {
  palette: ["35", "31", "34"],
  lines: [
    "                     $2./$1o$3.", "                   $2./$1sssso$3-", "                 $2`:$1osssssss+$3-",
    "               $2`:+$1sssssssssso$3/.", "             $2`-/o$1ssssssssssssso$3/.",
    "           $2`-/+$1sssssssssssssssso$3+:`", "         $2`-:/+$1sssssssssssssssssso$3+/.",
    "       $2`.://o$1sssssssssssssssssssso$3++-", "      $2.://+$1ssssssssssssssssssssssso$3++:",
    "    $2.:///o$1ssssssssssssssssssssssssso$3++:", "  $2`:////$1ssssssssssssssssssssssssssso$3+++.",
    "$2`-////+$1ssssssssssssssssssssssssssso$3++++-", " $2`..-+$1oosssssssssssssssssssssssso$3+++++/`",
    "   $3./++++++++++++++++++++++++++++++/:.", "  `:::::::::::::::::::::::::------``",
  ],
}

///|
let gentoo_logo : Logo = {
  palette: ["35", "37"],
  lines: [
    "         -/oyddmdhs+:.", "     -o$2dNMMMMMMMMNNmhy+$1-`", "   -y$2NMMMMMMMMMMMNNNmmdhy$1+-",
    " `o$2mMMMMMMMMMMMMNmdmmmmddhhy$1/`", " om$2MMMMMMMMMMMN$1hhyyyo$2hmdddhhhd$1o`",
    ".y$2dMMMMMMMMMMd$1hs++so/s$2mdddhhhhdm$1+`", " oy$2hdmNMMMMMMMN$1dyooy$2dmddddhhhhyhN$1d.",
    "  :o$2yhhdNNMMMMMMMNNNmmdddhhhhhyym$1Mh", "    .:$2+sydNMMMMMNNNmmmdddhhhhhhmM$1my",
    "       /m$2MMMMMMNNNmmmdddhhhhhmMNh$1s:", "    `o$2NMMMMMMMNNNmmmddddhhdmMNhs$1+`",
    "  `s$2NMMMMMMMMNNNmmmdddddmNMmhs$1/.", " /N$2MMMMMMMMNNNNmmmdddmNMNdso$1:`",
    "+M$2MMMMMMNNNNNmmmmdmNMNdso$1/-", "yM$2MNNNNNNNmmmmmNNMmhs+/$1-`", "/h$2MMNNNNNNNNMNdhs++/$1-`",
    "`/$2ohdmmddhys+++/:$1.`", "  `-//////:--.",
  ],
}

///|
let omarchy_logo : Logo = {
  palette: ["32"],
  lines: [
    "                 ▄▄▄", " ▄█████▄    ▄███████████▄    ▄███████   ▄███████   ▄███████   ▄█   █▄    ▄█   █▄",
    "███   ███  ███   ███   ███  ███   ███  ███   ███  ███   ███  ███   ███  ███   ███",
    "███   ███  ███   ███   ███  ███   ███  ███   ███  ███   █▀   ███   ███  ███   ███",
    "███   ███  ███   ███   ███ ▄███▄▄▄███ ▄███▄▄▄██▀  ███       ▄███▄▄▄███▄ ███▄▄▄███",
    "███   ███  ███   ███   ███ ▀███▀▀▀███ ▀███▀▀▀▀    ███      ▀▀███▀▀▀███  ▀▀▀▀▀▀███",
    "███   ███  ███   ███   ███  ███   ███ ██████████  ███   █▄   ███   ███  ▄██   ███",
    "███   ███  ███   ███   ███  ███   ███  ███   ███  ███   ███  ███   ███  ███   ███",
    " ▀█████▀    ▀█   ███   █▀   ███   █▀   ███   ███  ███████▀   ███   █▀    ▀█████▀",
    "                                       ███   █▀",
  ],
}

///|
let chrom_logo : Logo = {
  palette: ["31", "32", "33", "34", "35"],
  lines: [
    "$2            .,:loool:,.", "        .,coooooooooooooc,.", "     .,lllllllllllllllllllll,.",
    "    ;ccccccccccccccccccccccccc;", "$1  '$2ccccccccccccccccccccccccccccc.", "$1 ,oo$2c::::::::okO$5000$30OOkkkkkkkkkkk:",
    "$1.ooool$2;;;;:x$5K0$4kxxxxxk$50X$3K0000000000.", "$1:oooool$2;,;O$5K$4ddddddddddd$5KX$3000000000d",
    "$1lllllool$2;l$5N$4dllllllllllld$5N$3K000000000", "$1lllllllll$2o$5M$4dccccccccccco$5W$3K000000000",
    "$1;cllllllllX$5X$4c:::::::::c$50X$3000000000d", "$1.ccccllllllO$5Nk$4c;,,,;cx$5KK$30000000000.",
    "$1 .cccccclllllxOO$5OOO$1Okx$3O0000000000;", "$1  .:ccccccccllllllllo$3O0000000OOO,",
    "$1    ,:ccccccccclllcd$30000OOOOOOl.", "$1      '::ccccccccc$3dOOOOOOOkx:.",
    "$1        ..,::cccc$3xOOOkkko;.", "$1            ..,:$3dOkxl:.",
  ],
}

///|
let manjaro_logo : Logo = {
  palette: ["32"],
  lines: [
    "██████████████████  ████████",
    "██████████████████  ████████",
    "██████████████████  ████████",
    "██████████████████  ████████",
    "████████            ████████", "████████  ████████  ████████",
    "████████  ████████  ████████",
    "████████  ████████  ████████",
    "████████  ████████  ████████",
    "████████  ████████  ████████",
    "████████  ████████  ████████",
    "████████  ████████  ████████",
    "████████  ████████  ████████",
    "████████  ████████  ████████",
  ],
}

///|
let mx_logo : Logo = {
  palette: ["39"],
  lines: [
    "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMMMMMMMM", "MMMMMMMMMMNs..yMMMMMMMMMMMMMm: +NMMMMMMM",
    "MMMMMMMMMN+    :mMMMMMMMMMNo` -dMMMMMMMM", "MMMMMMMMMMMs.   `oNMMMMMMh- `sNMMMMMMMMM",
    "MMMMMMMMMMMMN/    -hMMMN+  :dMMMMMMMMMMM", "MMMMMMMMMMMMMMh-    +ms. .sMMMMMMMMMMMMM",
    "MMMMMMMMMMMMMMMN+`   `  +NMMMMMMMMMMMMMM", "MMMMMMMMMMMMMMNMMd:    .dMMMMMMMMMMMMMMM",
    "MMMMMMMMMMMMm/-hMd-     `sNMMMMMMMMMMMMM", "MMMMMMMMMMNo`   -` :h/    -dMMMMMMMMMMMM",
    "MMMMMMMMMd:       /NMMh-   `+NMMMMMMMMMM", "MMMMMMMNo`         :mMMN+`   `-hMMMMMMMM",
    "MMMMMMh.            `oNMMd:    `/mMMMMMM", "MMMMm/                -hMd-      `sNMMMM",
    "MMNs`                   -          :dMMM", "Mm:                                 `oMM",
    "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM",
  ],
}

///|
let opensuse_logo : Logo = {
  palette: ["32", "37"],
  lines: [
    "           $2.;ldkO0000Okdl;.", "       .;d00xl:^''''''^:ok00d;.", "     .d00l'                'o00d.",
    "   .d0Kd'$1  Okxol:;,.          $2:O0d", "  .OK$1KKK0kOKKKKKKKKKKOxo:,      $2lKO.",
    " ,0K$1KKKKKKKKKKKKKKK0P^$2,,,$1^dx:$2    ;00,", ".OK$1KKKKKKKKKKKKKKKk'$2.oOPPb.$1'0k.$2   cKO.",
    ":KK$1KKKKKKKKKKKKKKK: $2kKx..dd $1lKd$2   'OK:", "dKK$1KKKKKKKKKOx0KKKd $2^0KKKO' $1kKKc$2   dKd",
    "dKK$1KKKKKKKKKK;.;oOKx,..$2^$1..;kKKK0.$2  dKd", ":KK$1KKKKKKKKKK0o;...^cdxxOK0O/^^'  $2.0K:",
    " kKK$1KKKKKKKKKKKKK0x;,,......,;od  $2lKk", " '0K$1KKKKKKKKKKKKKKKKKKKK00KKOo^  $2c00'",
    "  'kK$1KKOxddxkOO00000Okxoc;''   $2.dKk'", "    l0Ko.                    .c00l'",
    "     'l0Kk:.              .;xK0l'", "        'lkK0xl:;,,,,;:ldO0kl'", "            '^:ldxkkkkxdl:^'",
  ],
}

///|
let pop_logo : Logo = {
  palette: ["36", "37"],
  lines: [
    "             /////////////", "         /////////////////////", "      ///////$2*767$1////////////////",
    "    //////$27676767676*$1//////////////", "   /////$276767$1//$27676767$1//////////////",
    "  /////$2767676$1///$2*76767$1///////////////", " ///////$2767676$1///$276767$1.///$27676*$1///////",
    "/////////$2767676$1//$276767$1///$2767676$1////////", "//////////$276767676767$1////$276767$1/////////",
    "///////////$276767676$1//////$27676$1//////////", "////////////,$27676$1,///////$2767$1///////////",
    "/////////////*$27676$1///////$276$1////////////", "///////////////$27676$1////////////////////",
    " ///////////////$27676$1///$2767$1////////////", "  //////////////////////$2'$1////////////",
    "   //////$2.7676767676767676767,$1//////", "    /////$2767676767676767676767$1/////",
    "      ///////////////////////////", "         /////////////////////", "             /////////////",
  ],
}

///|
let raspbian_logo : Logo = {
  palette: ["31", "32"],
  lines: [
    "   $2`.::///+:/-.        --///+//-:`", " `+oooooooooooo:   `+oooooooooooo:",
    "  /oooo++//ooooo:  ooooo+//+ooooo.", "  `+ooooooo:-:oo-  +o+::/ooooooo:", "   `:oooooooo+``    `.oooooooo+-",
    "     `:++ooo/.        :+ooo+/.`$1", "        ...`  `.----.` ``..", "     .::::-``:::::::::.`-:::-`",
    "    -:::-`   .:::::::-`  `-:::-", "   `::.  `.--.`  `` `.---.``.::`", "       .::::::::`  -::::::::` `",
    " .::` .:::::::::- `::::::::::``::.", "-:::` ::::::::::.  ::::::::::.`:::-",
    "::::  -::::::::.   `-::::::::  ::::", "-::-   .-:::-.``....``.-::-.   -::-",
    " .. ``       .::::::::.     `..`..", "   -:::-`   -::::::::::`  .:::::`", "   :::::::` -::::::::::` :::::::.",
    "   .:::::::  -::::::::. ::::::::", "    `-:::::`   ..--.`   ::::::.", "      `...`  `...--..`  `...`",
    "            .::::::::::", "             `.-::::-`",
  ],
}

///|
let rocky_logo : Logo = {
  palette: ["32"],
  lines: [
    "          __wgliliiligw_,", "       _williiiiiiliilililw,", "     _%iiiiiilililiiiiiiiiiii_",
    "   .Qliiiililiiiiiiililililiilm.", "  _iiiiiliiiiiililiiiiiiiiiiliil,", " .lililiiilililiiiilililililiiiii,",
    "_liiiiiiliiiiiiiliiiiiF{iiiiiilili,", "jliililiiilililiiili@`  ~ililiiiiiL",
    "iiiliiiiliiiiiiili>`      ~liililii", "liliiiliiilililii`         -9liiiil",
    "iiiiiliiliiiiii~             \"4lili", "4ililiiiiilil~|      -w,       )4lf",
    "-liiiiililiF'       _liig,       )'", " )iiiliii@`       _QIililig,", "  )iiii>`       .Qliliiiililw",
    "   )<>~       .mliiiiiliiiiiil,", "            _gllilililiililii~", "           giliiiiiiiiiiiiT`",
    "          -^~$ililili@~~'",
  ],
}

///|
let slackware_logo : Logo = {
  palette: ["34", "37"],
  lines: [
    "                  :::::::::", "            :::::::::::::::::::", "         :::::::::::::::::::::::::",
    "       ::::::::$2cllcccccllllllll$1::::::", "    :::::::::$2lc               dc$1:::::::",
    "   ::::::::$2cl   clllccllll    oc$1:::::::::", "  :::::::::$2o   lc$1::::::::$2co   oc$1::::::::::",
    " ::::::::::$2o    cccclc$1:::::$2clcc$1::::::::::::", " :::::::::::$2lc        cclccclc$1:::::::::::::",
    "::::::::::::::$2lcclcc          lc$1::::::::::::", "::::::::::$2cclcc$1:::::$2lccclc     oc$1:::::::::::",
    "::::::::::$2o    l$1::::::::::$2l    lc$1:::::::::::", " :::::$2cll$1:$2o     clcllcccll     o$1:::::::::::",
    " :::::$2occ$1:$2o                  clc$1:::::::::::", "  ::::$2ocl$1:$2ccslclccclclccclclc$1:::::::::::::",
    "   :::$2oclcccccccccccccllllllllllllll$1:::::", "    ::$2lcc1lcccccccccccccccccccccccco$1::::",
    "      ::::::::::::::::::::::::::::::::", "        ::::::::::::::::::::::::::::",
    "           ::::::::::::::::::::::", "                ::::::::::::",
  ],
}

///|
let suse_logo : Logo = {
  palette: ["32", "32"],
  lines: [
    " kKKKKKd'  Okxol:;,.", "kKKKKKKK0kOKKKKKKKKKKOxo:,", "KKKKKKKKKKKKKKKKKKK0P^,,,^dx:",
    "KKKKKKKKKKKKKKKKKKk'.oOPPb.'0k.", "KKKKKKKKKKKKKKKKKK: kKx..dd lKd", "KKKKKKKKKKKKOx0KKKd ^0KKKO' kKKc",
    "KKKKKKKKKKKKK;.;oOKx,..^..;kKKK0.", "KKKKKKKKKKKKK0o;...^cdxxOK0O/^^'", "KKKKKKKKKKKKKKKKK0x;,,......,;od",
    "kKKKKKKKKKKKKKKKKKKKKKKK00KKOo^", " kKKKKKOxddxkOO00000Okxoc;''",
  ],
}

///|
let termux_logo : Logo = {
  palette: ["37"],
  lines: [
    "_____", "|_   _|__ _ __ _ __ ___  _   ___  __", "  | |/ _ \\ '__| '_ ` _ \\| | | \\ \\/ /",
    "  | |  __/ |  | | | | | | |_| |>  <", "  |_|\\___|_|  |_| |_| |_|\\__,_/_/\\_\\",
  ],
}

///|
let all_logos : Array[(String, Logo)] = [
  ("macos", macos_logo),
  ("linux", linux_logo),
  ("arch", arch_logo),
  ("ubuntu", ubuntu_logo),
  ("debian", debian_logo),
  ("fedora", fedora_logo),
  ("nixos", nixos_logo),
  ("windows", windows_logo),
  ("alpine", alpine_logo),
  ("android", android_logo),
  ("artix", artix_logo),
  ("deepin", deepin_logo),
  ("endeavouros", endeavouros_logo),
  ("gentoo", gentoo_logo),
  ("omarchy", omarchy_logo),
  ("chrom", chrom_logo),
  ("manjaro", manjaro_logo),
  ("mx", mx_logo),
  ("opensuse", opensuse_logo),
  ("pop", pop_logo),
  ("raspbian", raspbian_logo),
  ("rocky", rocky_logo),
  ("slackware", slackware_logo),
  ("suse", suse_logo),
  ("termux", termux_logo),
]

///|
fn logo_by_name(name : String) -> Logo? {
  all_logos.iter().find_first(entry => entry.0 == name).map(entry => entry.1)
}

///|
fn logo_about() -> String {
  let names = all_logos.map(entry => entry.0).join(", ")
  "logo name: \{names}, none"
}