Theming Your Linux TTY Using Kernel Arguments | TT-Why?

I really don't like the default theme of the Linux TTY ()... I've seen some blog posts about using terminal escape codes in /etc/issues and ~/.bashrc, but this leaves the default theme around for the startup log messages.


If only the Linux kernel developers had made some kernel arguments just for this... (they did).


Table of Contents:

vt.default_(red | grn | blu )

The kernel arguments in question are: [vt.default_red, vt.default_grn, and vt.default_blu], each takes an array of 16 comma-separated 8-bit (0-255) decimal numbers representing the terminal colors.


The 16 colors correspond to the standard terminal color palette:

IdColorIdColorIdColorIdColor
0Black4Blue8Bright Black12Bright Blue
1Red5Magenta9Bright Red13Bright Magenta
2Green6Cyan10Bright Green14Bright Cyan
3Yellow7White11Bright Yellow15Bright White

The kernel indexes each array with the Id to set the RGB values for each color in the palette.


Catppuccin
vt.default_red=36,237,166,238,138,245,139,184,91,237,166,238,138,245,139,165
vt.default_grn=39,135,218,212,173,189,213,192,96,135,218,212,173,189,213,173
vt.default_blu=58,150,149,159,244,230,202,224,120,150,149,159,244,230,202,203

How to Pass Kernel Arguments

Select the instructions that work for your bootloader/system:

1. EFI boot stub

If you're using direct EFI boot, add the arguments to your efibootmgr command:

efibootmgr --create --disk /dev/sdX --part Y \
  --label "Linux" \
  --loader '\vmlinuz-linux' \
  --unicode 'root=UUID=your_uuid initrd=\initramfs-linux.img another_argument=another_value'

And with that you can make your TTY as fabulous as 16-color bitmap fonts can be, enjoy!