--- layout: post title: "Nice Looking Boot Screen Without Plymouth" --- I was poking around with my Arch Linux installation and I learned that the initcpio was done using shell scripts that I could write myself, and I ended up trying to make my system boot process look decent without using Plymouth. ## Custom initcpio hooks You can place custom shell scripts in `/etc/initcpio/hooks`, and have a script to install it to the initramfs in `/etc/initcpio/install`. This is detailed further in the [Arch Linux wiki page](https://wiki.archlinux.org/title/mkinitcpio). You'll want to create a file named "welcome" or any other name you want in `/etc/initcpio/hooks`. It will contain a single function `run_hook`, and within it you can put `echo` or any other commands, as long as it's in the busybox environment that the initramfs uses. Here's what your welcome hook could look like: ``` #!/bin/sh run_hook() { echo -e "Welcome to YOUR_COMPUTER, YOUR_NAME." echo -e "Getting everything set up for you..." } ``` You'll also want to create a file with the same name in `/etc/initcpio/install`, and it will have two functions: `build` and `help`. The help function just outputs a message when you do `mkinitcpio -H welcome`, so it can contain any text you want. The build function will just contain `add_runscript`, to add the file we put in the hooks folder. Here's what yours could look like: ``` #!/bin/sh build() { add_runscript } help() { echo "welcoem mesage" } ``` When that's done, you can add the `welcome` hook somewhere early on in the hooks part of `/etc/mkinitcpio.conf`, and run `mkinitcpio -P` as root to regenerate the initramfs to contain your new script. Now when your computer boots, it should run our script. If your cool new message is quickly pushed up and off the screen by boot messages, you can add `quiet` to your [kernel parameters](https://wiki.archlinux.org/title/Kernel_parameters) to silence the extra messages that the kernel usually spits out while booting up. ## Console font The default font for the console may not be your favorite. Thankfully, there are plenty of fonts you can try out, kept in `/usr/share/kbd/consolefonts/`, and can be [previewed using `setfont`](https://wiki.archlinux.org/title/Linux_console#Preview_and_temporary_changes). I use the `ter-c18n` font, and I have it [set persistently](https://wiki.archlinux.org/title/Linux_console#Persistent_configuration) in `/etc/vconsole.conf`. To have the console load your font early on in the boot process, you can just add `consolefont` somewhere in your mkinitcpio hooks array. ## Custom colors Your console supports custom colors, and can be easily set using [linux-vt-setcolors](https://github.com/EvanPurkhiser/linux-vt-setcolors), available from the AUR as `setcolors-git`. Also install the [mkinitcpio-colors](https://github.com/EvanPurkhiser/mkinitcpio-colors) program from the AUR as `mkinitcpio-colors-git`. You can add your color scheme to `/etc/vconsole.conf` using the format specified on the project's [README](https://github.com/EvanPurkhiser/mkinitcpio-colors#configuration): ``` COLOR_0=000000 # black COLOR_1=550000 # darkred ... COLOR_15=ffffff # white ``` You can use something like [terminal.sexy](https://terminal.sexy/) to get colors that you like, and then add the colors to the vconsole config matching the numbers 0-15 to the same colors. Once you're done with that, add the `colors` hook to that same hooks array we've been adding stuff to, run `mkinitcpio -P`, and reboot. You should be greeted with your welcome message, in your own font, with your own colors. ## Extra I have an encrypted hard drive, so I'm able to put a message that appears only after I unlock my drive. I created a second, very similar hook in `/etc/initcpio/hooks` and created its `/etc/initcpio/install` counterpart, and put a funny warning in it, and in the `/etc/mkinitcpio.conf` hooks array, I put my new hook BEFORE the `encrypt` hook, and I put my `welcome` hook AFTER the `encrypt` hook. Since the hooks run in order, the warning is displayed, and if I type the correct password, I'm greeted by my laptop, and it loads everything up. ![image](/assets/mybootscreen.png) I hope this has been helpful not only for making a cool boot screen without Plymouth, but I hope I also helped you learn more about how Arch Linux boots its system using an initramfs. If anything is unclear, email me via the address at the bottom of the page, and I'll update this post.