diff --git a/iso/airootfs/etc/calamares/modules/shellprocess.conf b/iso/airootfs/etc/calamares/modules/shellprocess.conf index 3aef052..3f5366c 100644 --- a/iso/airootfs/etc/calamares/modules/shellprocess.conf +++ b/iso/airootfs/etc/calamares/modules/shellprocess.conf @@ -1,3 +1,9 @@ --- +# Calamares defaults shellprocess to a 10-second timeout. post-install.sh runs +# mkinitcpio, grub-install, grub-mkconfig, snapper setup and a networked bakery +# install — minutes of work — so without a generous timeout it gets killed +# partway (leaving /boot and the ESP half-populated → unbootable system). The +# leading "-" keeps a non-zero exit non-fatal to the install. +timeout: 1800 script: - "-/usr/bin/bash /etc/calamares/post-install.sh" diff --git a/iso/airootfs/etc/calamares/post-install.sh b/iso/airootfs/etc/calamares/post-install.sh index e126a22..6e9a7d8 100644 --- a/iso/airootfs/etc/calamares/post-install.sh +++ b/iso/airootfs/etc/calamares/post-install.sh @@ -81,14 +81,9 @@ fi systemctl enable NetworkManager bluetooth snapper-cleanup.timer grub-btrfs.path \ || echo "WARN: enabling some services failed" -# --------------------------------------------------------------------------- -# Bread ecosystem via bakery (needs network — non-fatal so an offline install -# still completes; the user can run it after first boot). -# --------------------------------------------------------------------------- -if [[ -n "$MAIN_USER" ]] && command -v bakery &>/dev/null; then - sudo -u "$MAIN_USER" bakery install bread breadbar breadbox breadcrumbs breadpad bos-settings \ - || echo "WARN: bakery install failed (no network during install?); run it after first boot" -fi +# The bread ecosystem (bread, breadbar, breadbox, breadcrumbs, breadpad, +# bos-settings) is baked into the squashfs and already copied onto the target by +# unpackfs — no install step needed here, and the install works fully offline. # --------------------------------------------------------------------------- # Deploy dotfiles into the user's home (don't clobber existing files). diff --git a/iso/airootfs/usr/local/bin/bos-live-setup b/iso/airootfs/usr/local/bin/bos-live-setup index d642a17..d90f199 100644 --- a/iso/airootfs/usr/local/bin/bos-live-setup +++ b/iso/airootfs/usr/local/bin/bos-live-setup @@ -7,6 +7,9 @@ # bos-launch-calamares). Runs once at boot, before the tty1 autologin getty. set -e +# useradd -m copies /etc/skel, so the live user gets the real BOS desktop +# (breadd + breadbar + breadbox + keybinds) — proper live-media functionality, +# not an installer kiosk. if ! id liveuser &>/dev/null; then useradd -m -s /bin/bash liveuser for g in wheel video input audio storage power; do @@ -15,29 +18,19 @@ if ! id liveuser &>/dev/null; then passwd -d liveuser >/dev/null fi -install -d -m 0700 -o liveuser -g liveuser /home/liveuser/.config/hypr - -# Minimal live compositor config: auto-launch the installer. -cat >/home/liveuser/.config/hypr/hyprland.conf <<'EOF' -monitor=,preferred,auto,1 +# Layer the installer onto the live desktop: auto-launch it, and bind Super+I to +# relaunch it after it's been closed. Appended to (not replacing) the skel +# Hyprland config so the full desktop stays intact. +HYPR=/home/liveuser/.config/hypr/hyprland.conf +install -d -m 0755 -o liveuser -g liveuser /home/liveuser/.config/hypr +if ! grep -q bos-launch-calamares "$HYPR" 2>/dev/null; then + cat >>"$HYPR" <<'EOF' +# --- live-media installer (added by bos-live-setup; absent on installed system) --- exec-once = bos-launch-calamares - -general { - border_size = 2 - col.active_border = rgba(88c0d0ff) - col.inactive_border = rgba(4c566aff) -} -decoration { rounding = 4 } -input { - kb_layout = us - follow_mouse = 1 -} -misc { - disable_hyprland_logo = true - disable_splash_rendering = true -} +bind = SUPER, I, exec, bos-launch-calamares EOF +fi # Start Hyprland on tty1 login; capture output and fall back to a shell so a # failed compositor start is visible rather than a blank looping cursor. diff --git a/iso/packages.x86_64 b/iso/packages.x86_64 index f49eeb8..37c757c 100644 --- a/iso/packages.x86_64 +++ b/iso/packages.x86_64 @@ -82,8 +82,15 @@ nautilus # (calamares 3.4.x is already Qt6; there is no separate calamares-qt6 package) calamares -# Bread ecosystem — sourced from [breadway] repo +# Bread ecosystem — sourced from [breadway] repo. Baked into the squashfs so a +# fresh install (and the live session) has the full desktop with no network. bakery +bread +breadbar +breadbox +breadcrumbs +breadpad +bos-settings # Input / screen utilities brightnessctl