feat(branding): restore the boot splash, SDDM theme, and greeter background

Neither the Plymouth theme nor the login/lock theming was ever installed by a
restore, so a rebuilt box came up with stock distro branding.

bin/boot-branding.sh installs all three, and the desktop stage of
restore-linux.sh calls it. Each block self-skips when its greeter is absent or
already current, so it is cheap to re-run and works whether the box boots
lightdm or SDDM:

- Plymouth: a real copy under /usr/share/plymouth/themes, not a symlink into
  the user home. The stock initramfs hook copies the theme path verbatim, so a
  symlink into an unmounted home dangles at early boot and Plymouth drops to
  text mode -- which is what assets/boot/initramfs-hook-my-custom-logo existed
  to work around. With a real copy that hook is unnecessary.
- SDDM: the NexusOS-QML theme, selected via /etc/sddm.conf.d.
- slick-greeter: cannot lay out a custom login screen, so the logo and wordmark
  are baked into assets/themes/greeter/greeter-background.svg and its own
  centered login box lands underneath.

Main.qml now loads background.png instead of background.svg. QtSvg implements
SVG Tiny 1.2, which has no <pattern>, so the brushed-metal and machine-line
textures silently dropped out at runtime. librsvg renders them, so the SVG is
rasterized at 1920x1200 and committed alongside it; the regeneration command is
in the comment above the source: line.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
janvanwan
2026-08-18 14:31:11 -05:00
co-authored by Claude Opus 5
parent 5294ab7c78
commit f46e53de15
5 changed files with 187 additions and 2 deletions
+11 -2
View File
@@ -31,7 +31,16 @@ Rectangle {
Image {
anchors.fill: parent
source: "assets/background.svg"
// background.png, not the .svg it was rendered from: QtSvg implements
// SVG Tiny 1.2, which has no <pattern>, so the brushed-metal and
// machine-line textures silently drop out ("Could not resolve property:
// #brushLines"). librsvg renders them fine, so the SVG is rasterized at
// 1920x1200 and committed. Regenerate after editing background.svg:
// python3 -c 'import gi; gi.require_version("GdkPixbuf","2.0"); \
// from gi.repository import GdkPixbuf as G; \
// G.Pixbuf.new_from_file_at_scale("assets/background.svg",1920,1200,False) \
// .savev("assets/background.png","png",["compression"],["9"])'
source: "assets/background.png"
fillMode: Image.PreserveAspectCrop
smooth: true
asynchronous: false
@@ -71,7 +80,7 @@ Rectangle {
Text {
id: brandLabel
text: "NexusOS"
text: "Welcome to NexusOS"
color: textPrimary
font.family: "Sans"
font.pixelSize: 28
Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 249 KiB