How the Installer Works (End-to-End Flow)

Login Setup

Index

  1. Overview
  2. Plymouth Theme and Defaults
  3. Seamless Login Helper
  4. Plymouth Quit Behavior
  5. Bootloader Integration with Limine & Snapper
  6. Alternative Bootloaders Fallback
  7. Execution Flowchart

Overview

The login setup stage configures a polished boot splash and auto-login into the Hyprland desktop. It:

  • Applies a custom Plymouth theme and locks down its behavior.
  • Compiles and enables a seamless auto-login helper.
  • Integrates with Limine + Snapper for UEFI boot snapshots.
  • Provides fallbacks for other bootloaders (systemd-boot, GRUB, UKI).

Plymouth Theme and Defaults

Omarchy ships an “omarchy” Plymouth theme and ensures it’s set as the default.

  • Copies the theme into /usr/share/plymouth/themes/omarchy/.
  • Runs plymouth-set-default-theme -R omarchy to regenerate the initramfs.
if [ "$(plymouth-set-default-theme)" != "omarchy" ]; then
  sudo cp -r "$HOME/.local/share/omarchy/default/plymouth" \
    /usr/share/plymouth/themes/omarchy/
  sudo plymouth-set-default-theme -R omarchy
fi

Seamless Login Helper

To avoid flicker between the splash and the desktop, Omarchy builds a minimal VT-switching helper.

Compilation

  • Generates /tmp/seamless-login.c replicating SDDM’s VT management.
  • Compiles it to /usr/local/bin/seamless-login and makes it executable.
cat <<'CCODE' >/tmp/seamless-login.c
/** Seamless Login - Minimal SDDM-style Plymouth transition */
#include <linux/vt.h>
… 
execvp(argv[1], &argv[1]);
CCODE

gcc -o /tmp/seamless-login /tmp/seamless-login.c
sudo mv /tmp/seamless-login /usr/local/bin/seamless-login
sudo chmod +x /usr/local/bin/seamless-login
rm /tmp/seamless-login.c

Service Unit

Defines omarchy-seamless-login.service to auto-start the helper on TTY1:

Section Key Value
Unit Description Omarchy Seamless Auto-Login
Conflicts [email protected]
After systemd-user-sessions.service, plymouth-quit
Service ExecStart /usr/local/bin/seamless-login uwsm start -- hyprland.desktop
Restart / Limits always, burst limit, interval limit
User / TTYPath $USER, /dev/tty1
Install WantedBy graphical.target
[Unit]
Description=Omarchy Seamless Auto-Login
After=systemd-user-sessions.service [email protected] plymouth-quit.service

[Service]
Type=simple
ExecStart=/usr/local/bin/seamless-login uwsm start -- hyprland.desktop
Restart=always
User=$USER
TTYPath=/dev/tty1

[Install]
WantedBy=graphical.target

Plymouth Quit Behavior

To keep Plymouth visible until the graphical target is ready, Omarchy adds an override:

# /etc/systemd/system/plymouth-quit.service.d/wait-for-graphical.conf
[Unit]
After=multi-user.target

It then masks the default plymouth-quit-wait.service, reloads systemd, and disables the TTY1 getty.


Bootloader Integration with Limine & Snapper

When Limine is installed, Omarchy:

  • Injects the Plymouth hook into mkinitcpio.
  • Creates /etc/default/limine with splash & quiet kernel options.
  • Generates /boot/limine.conf embedding Omarchy branding.
  • Installs limine-snapper-sync to manage Btrfs snapshots.
  • Bootstraps Snapper configs for root and home, then tunes retention.
sudo tee /etc/mkinitcpio.conf.d/omarchy_hooks.conf <<EOF >/dev/null
HOOKS=(base udev plymouth keyboard autodetect … btrfs-overlayfs)
EOF

sudo tee /etc/default/limine <<EOF >/dev/null
TARGET_OS_NAME="Omarchy"
KERNEL_CMDLINE[default]+="quiet splash"
ENABLE_UKI=yes
… 
EOF

sudo pacman -S --noconfirm limine-snapper-sync limine-mkinitcpio-hook
sudo limine-update
# Create or configure snapper for root/home

Alternative Bootloaders Fallback

If Limine is unavailable, Omarchy’s alt-bootloaders script:

  • Appends the plymouth hook to /etc/mkinitcpio.conf.
  • Detects and patches:
    • systemd-boot entries under /boot/loader/entries/
    • GRUB via /etc/default/grub and grub-mkconfig
    • Unified Kernel Image (UKI) configs in /etc/cmdline.d/ or /etc/kernel/cmdline
if ! command -v limine &>/dev/null; then
  # Ensure plymouth hook in mkinitcpio.conf, then regenerate initramfs
  # For each bootloader, add "splash quiet" to kernel parameters
fi

Execution Flowchart

flowchart LR
    A[install.sh – source login/plymouth.sh]
    B[login/plymouth.sh – Plymouth & seamless-login]
    C[install.sh – source login/limine-snapper.sh]
    D[login/limine-snapper.sh – Limine + Snapper]
    E[install.sh – source login/alt-bootloaders.sh]
    F[login/alt-bootloaders.sh – fallback for GRUB/UKI]
    A --> B --> C --> D --> E --> F

This setup ensures a consistent, branded boot splash and a flicker-free, auto-logged-in Hyprland session with robust snapshot-based rollback support.