Set the boot splash to blob_boot.png during install

This commit is contained in:
SirBlob committed 2026-09-24 03:28:32 +00:00
1 parent d8df9fa320
commit 3fea28e225
7 files changed
+59 -15

No files matched your search

+1 -1
View File
@@ -81,7 +81,7 @@ It runs these steps, in this order, and every one of them is idempotent:
| 5. First theme | links `~/wallpapers` to the checkout, applies `flats` headless, picks a background, and links the btop and Neovim theme files, so the first login is not a blank desktop | | 5. First theme | links `~/wallpapers` to the checkout, applies `flats` headless, picks a background, and links the btop and Neovim theme files, so the first login is not a blank desktop |
| 6. User units | installs the session services into `~/.config/systemd/user` and enables them | | 6. User units | installs the session services into `~/.config/systemd/user` and enables them |
| 7. systemd drop-ins | writes the shutdown timeouts, oomd thresholds, plocate prune paths, and sleep hooks under `/etc` | | 7. systemd drop-ins | writes the shutdown timeouts, oomd thresholds, plocate prune paths, and sleep hooks under `/etc` |
| 8. System services | enables NetworkManager, resolved, bluetooth, cups, avahi, docker, power-profiles-daemon, and oomd, and masks `NetworkManager-wait-online` | | 8. System services | enables NetworkManager, resolved, bluetooth, cups, avahi, docker, power-profiles-daemon, and oomd, masks `NetworkManager-wait-online`, and sets the boot splash to `branding/blob_boot.png` |
| 9. Login screen | installs the session entry and the SDDM config, enables `sddm.service`, and sets the default target to `graphical.target` | | 9. Login screen | installs the session entry and the SDDM config, enables `sddm.service`, and sets the default target to `graphical.target` |
| 10. Reload | reloads systemd, restarts the running user services, and in a running session re-renders the theme, reloads Hyprland, and restarts the Blob shell | | 10. Reload | reloads systemd, restarts the running user services, and in a running session re-renders the theme, reloads Hyprland, and restarts the Blob shell |
| 11. Launch | starts the login screen, so the desktop comes up without a reboot | | 11. Launch | starts the login screen, so the desktop comes up without a reboot |
+1 -1
View File
@@ -19,7 +19,7 @@
set -euo pipefail set -euo pipefail
BLOB_PATH="${BLOB_PATH:-$HOME/.local/share/blob}" BLOB_PATH="${BLOB_PATH:-$HOME/.local/share/blob}"
DEFAULT_IMAGE="$BLOB_PATH/branding/boot_flash.png" DEFAULT_IMAGE="$BLOB_PATH/branding/blob_boot.png"
THEME_SOURCE="$BLOB_PATH/default/plymouth" THEME_SOURCE="$BLOB_PATH/default/plymouth"
THEME_DIR="/usr/share/plymouth/themes/blob" THEME_DIR="/usr/share/plymouth/themes/blob"
PLYMOUTH_LOGO="$THEME_DIR/logo.png" PLYMOUTH_LOGO="$THEME_DIR/logo.png"
+6 -1
View File
@@ -15,6 +15,7 @@ with `--check`.
| `install/steps/packages.sh` | repo and AUR packages, and the yay bootstrap | | `install/steps/packages.sh` | repo and AUR packages, and the yay bootstrap |
| `install/steps/config.sh` | the `BLOB_PATH` symlink, everything under `~/.config`, and the login shell profile | | `install/steps/config.sh` | the `BLOB_PATH` symlink, everything under `~/.config`, and the login shell profile |
| `install/steps/services.sh` | system services, systemd drop-ins, user units | | `install/steps/services.sh` | system services, systemd drop-ins, user units |
| `install/steps/boot.sh` | the Plymouth boot splash |
| `install/steps/theme.sh` | the wallpaper link, the first theme, the first background | | `install/steps/theme.sh` | the wallpaper link, the first theme, the first background |
| `install/steps/login.sh` | SDDM, the session entry, and the first launch | | `install/steps/login.sh` | SDDM, the session entry, and the first launch |
| `install/steps/reload.sh` | reloading systemd, the user services, and a running session | | `install/steps/reload.sh` | reloading systemd, the user services, and a running session |
@@ -78,7 +79,11 @@ with `--check`.
hold up the login screen, and `plymouth-start.service` and hold up the login screen, and `plymouth-start.service` and
`plymouth-quit-wait.service` are masked because an unconfigured plymouth `plymouth-quit-wait.service` are masked because an unconfigured plymouth
holds the console and leaves the machine with neither a greeter nor a TTY. holds the console and leaves the machine with neither a greeter nor a TTY.
`blob boot` unmasks them when it sets the splash up. See The installer then applies `branding/blob_boot.png` as the boot splash
through `blob boot`, which installs the theme, adds the mkinitcpio hook,
unmasks the plymouth units and rebuilds the initramfs. It is skipped when
the blob theme is already the default with the same image, and once it is
in place the plymouth units are no longer masked on later runs. See
[packages.md](packages.md#the-boot-splash). [packages.md](packages.md#the-boot-splash).
9. **The login screen** is SDDM. It has to be installed first: if 9. **The login screen** is SDDM. It has to be installed first: if
`sddm.service` is not there, the installer says whether the package is `sddm.service` is not there, the installer says whether the package is
+7 -8
View File
@@ -138,19 +138,18 @@ Omarchy's own package list, because they were installed by hand on this machine:
## The boot splash ## The boot splash
`plymouth` is installed but left inert, and the splash is opt-in through one `install.sh` sets the splash to `branding/blob_boot.png`. To change it later:
command:
``` ```
blob boot # branding/boot_flash.png blob boot # branding/blob_boot.png
blob boot ~/some/image.png # or any other image blob boot ~/some/image.png # or any other image
``` ```
The reason it is opt-in is that an installed but *unconfigured* plymouth is not An installed but *unconfigured* plymouth is not harmless: it takes the console
harmless: it takes the console at boot and never hands it back, and at boot and never hands it back, and `getty@tty1` waits on
`getty@tty1` waits on `plymouth-quit-wait.service`, so the machine reaches `plymouth-quit-wait.service`, so the machine reaches neither the greeter nor a
neither the greeter nor a TTY. `install.sh` therefore masks TTY. `install.sh` therefore masks `plymouth-start.service` and
`plymouth-start.service` and `plymouth-quit-wait.service`, and `blob boot` `plymouth-quit-wait.service` until the splash is configured, and `blob boot`
unmasks them as part of configuring everything else - the theme in unmasks them as part of configuring everything else - the theme in
`default/plymouth/`, the `plymouth` mkinitcpio hook, and the initramfs rebuild. `default/plymouth/`, the `plymouth` mkinitcpio hook, and the initramfs rebuild.
It finishes by printing the kernel parameters your bootloader still needs It finishes by printing the kernel parameters your bootloader still needs
+2
View File
@@ -49,6 +49,7 @@ source "$repo_dir/install/steps/directories.sh"
source "$repo_dir/install/steps/packages.sh" source "$repo_dir/install/steps/packages.sh"
source "$repo_dir/install/steps/config.sh" source "$repo_dir/install/steps/config.sh"
source "$repo_dir/install/steps/services.sh" source "$repo_dir/install/steps/services.sh"
source "$repo_dir/install/steps/boot.sh"
source "$repo_dir/install/steps/theme.sh" source "$repo_dir/install/steps/theme.sh"
source "$repo_dir/install/steps/login.sh" source "$repo_dir/install/steps/login.sh"
source "$repo_dir/install/steps/reload.sh" source "$repo_dir/install/steps/reload.sh"
@@ -80,6 +81,7 @@ link_app_themes
enable_system_services enable_system_services
mask_system_services mask_system_services
install_boot_splash
enable_user_units enable_user_units
install_login_config install_login_config
+37
View File
@@ -0,0 +1,37 @@
boot_splash_image="$repo_dir/branding/blob_boot.png"
boot_splash_theme_dir="/usr/share/plymouth/themes/blob"
boot_splash_installed() {
command -v plymouth-set-default-theme &>/dev/null || return 1
[[ -f $boot_splash_theme_dir/blob.plymouth ]] || return 1
[[ "$(plymouth-set-default-theme 2>/dev/null)" == blob ]]
}
install_boot_splash() {
if ! command -v plymouth-set-default-theme &>/dev/null; then
say "SKIP boot splash (plymouth not installed)"
return 0
fi
if [[ ! -f $boot_splash_image ]]; then
say "SKIP boot splash (branding/blob_boot.png missing)"
return 0
fi
if boot_splash_installed && cmp -s "$boot_splash_image" "$boot_splash_theme_dir/logo.png"; then
say "ok boot splash"
return 0
fi
note_change
if [[ $check == true ]]; then
say "would set the boot splash to branding/blob_boot.png and rebuild the initramfs"
return 0
fi
if BLOB_PATH="$blob_path" "$repo_dir/bin/blob-boot" "$boot_splash_image"; then
say "set boot splash to branding/blob_boot.png"
else
say "WARN could not set the boot splash; run 'blob boot' to retry"
fi
}
+5 -4
View File
@@ -12,10 +12,10 @@ system_services=(
# network-online.target must not hold up graphical.target waiting for DHCP or # network-online.target must not hold up graphical.target waiting for DHCP or
# Wi-Fi association. Nothing in the session blocks on the network. # Wi-Fi association. Nothing in the session blocks on the network.
# #
# Blob configures no boot splash: no mkinitcpio hook, no kernel command line, # An unconfigured plymouth takes the console at boot and never hands it back,
# and no theme. An unconfigured plymouth still takes the console at boot and # and getty@tty1 waits on plymouth-quit-wait.service, so the machine comes up
# never hands it back, and getty@tty1 waits on plymouth-quit-wait.service, so # with no greeter and no TTY to fix it from. The plymouth units are masked
# the machine comes up with no greeter and no TTY to fix it from. # until install_boot_splash configures the blob theme, and left alone after.
masked_services=( masked_services=(
NetworkManager-wait-online.service NetworkManager-wait-online.service
plymouth-start.service plymouth-start.service
@@ -64,6 +64,7 @@ mask_system_services() {
for unit in "${masked_services[@]}"; do for unit in "${masked_services[@]}"; do
system_unit_exists "$unit" || continue system_unit_exists "$unit" || continue
[[ $unit == plymouth-* ]] && boot_splash_installed && continue
[[ "$(system_unit_state "$unit")" == masked ]] && continue [[ "$(system_unit_state "$unit")" == masked ]] && continue
pending+=("$unit") pending+=("$unit")
done done