Switching from Systemd-boot to Limine on CachyOS
Migrating from systemd-boot to Themed Limine with Btrfs Snapshots
I initallity installed CachyOS with systemd-boot as a ’tried and true’ option for my bootloader. After using it for a few weeks and playing around with BTRFS snapshots, I came to understand the benefits of using Limine and having snapshots available to boot from. This is a guide detailing what I did to change.
DISCLAIMER: I used Google Gemini to help with writing this guide. The assistance was done with my notes/rough draft, and all steps have been validated by me.
The Goal
Theming: The bootloader should look and feel like the CachyOS limine out of the box.
Resilience: Automatic syncing of BTRFS snapshots into the boot menu.
Step 1: Prepare the Assets
Limine is configured via a simple human-readable file. For this setup, we use a custom splash image and a Catppuccin color palette. /boot/limine.conf
This is the “brain” of the operation. We use default_entry: 2 because Limine uses 1-based indexing, and the global settings block often occupies the first internal slot.
timeout: 5
default_entry: 2
remember_last_entry: yes
# Catppuccin Mocha Palette
term_palette: 1e1e2e;f38ba8;a6e3a1;f9e2af;89b4fa;f5c2e7;94e2d5;cdd6f4
term_palette_bright: 585b70;f38ba8;a6e3a1;f9e2af;89b4fa;f5c2e7;94e2d5;cdd6f4
term_background: ffffffff
term_foreground: cdd6f4
term_background_bright: ffffffff
term_foreground_bright: cdd6f4
wallpaper: boot():/limine-splash.png
# The Machine-ID folder helps isolate kernel versions
comment: machine-id=YOUR_MACHINE_ID_HERE
//CachyOS
comment: Kernel version: $(uname -r)
protocol: linux
module_path: boot():/YOUR_MACHINE_ID_HERE/linux-cachyos/initramfs-linux-cachyos
path: boot():/YOUR_MACHINE_ID_HERE/linux-cachyos/vmlinuz-linux-cachyos
cmdline: root=UUID=YOUR_ROOT_UUID_HERE rw rootflags=subvol=/@ zswap.enabled=0 nowatchdog quiet splash
You can find your machine ID by running cat /etc/machine-id
Download This Image and save it to /boot/limine-splash.png
Step 2: Stage the Kernels
We follow the “Blue-Green” approach. We copy our kernels into the Machine-ID folder so that Limine can find them, but we don’t touch the original /boot kernels yet.
# Get your IDs
export MY_ID=$(cat /etc/machine-id)
export MY_UUID=$(lsblk -dno UUID $(findmnt -nvo SOURCE /))
# Create the specific directory structure
sudo mkdir -p /boot/$MY_ID/linux-cachyos
# Copy current kernels to the new staging area
sudo cp /boot/vmlinuz-linux-cachyos /boot/$MY_ID/linux-cachyos/
sudo cp /boot/initramfs-linux-cachyos.img /boot/$MY_ID/linux-cachyos/initramfs-linux-cachyos
Step 3: Install and Verify
Install the binaries and register Limine as the primary boot option in your NVRAM.
sudo pacman -S limine limine-entry-tool limine-snapper-sync
sudo limine-install
Verify that Limine is now Boot0000 and top of the BootOrder
sudo efibootmgr -v
Step 4: Automate the Workflow
This is the most critical step. Without these hooks, your next kernel update will break the system because the files in your Machine-ID folder won’t be updated.
Kernel Hook: Ensures mkinitcpio updates the kernels in /boot/$MACHINE_ID/.
sudo pacman -S limine-mkinitcpio-hook
If this warns about a package conflict, just accept with y
Snapshot Hook: Ensures your boot menu updates whenever a Btrfs snapshot is created.
sudo systemctl enable --now limine-snapper-sync.service
sudo limine-snapper-sync
If you have any custom boot options, add them to /etc/default/limine. Mine look like this for an nvidia GPU:
KERNEL_CMDLINE[default]="quiet splash rw rootflags=subvol=/@ root=UUID=<YOUR UUID> nvidia-drm.modeset=1 nvidia-drm.fbdev=1"
Finally, run sudo limine-mkinitcpio
Step 5: The “Point of No Return” (Cleanup)
Once you have rebooted and verified that Limine loads your OS and your snapshots correctly, you can reclaim space on your EFI partition (especially important if you have a 2GB limit).
# 1. Remove systemd-boot binaries and entries
sudo bootctl remove
sudo rm -rf /boot/loader /boot/EFI/systemd
# 2. Delete redundant kernels in the root of /boot
sudo rm /boot/vmlinuz-linux-cachyos /boot/initramfs-linux-cachyos.img
Final Results
After a successful reboot, you should be greeted by the Catppuccin-themed menu. Your main CachyOS install will be the default selection, with a “Snapshots” folder nested below it.
Storage & Retention
If you’re working with a smaller EFI partition, you’ll want to manage how many snapshots Limine keeps track of. While Snapper might keep 50+ snapshots on your SSD, you don’t want 50 kernels filling up your boot partition.
Edit /etc/limine-snapper-sync.conf to set a sensible retention policy:
### Limit the number of bootable snapshots to keep /boot lean
MAX_SNAPSHOTS="8"
If you have a 2GB EFI partition, keep an eye on usage with df -h. Every unique kernel/initramfs pair takes up roughly 250-300MB. If you use both the Main and LTS kernels, your space will disappear twice as fast.
665 Words
2026-02-22 23:33