Install/boot reliability: - Use native Calamares initcpiocfg/initcpio + explicit grub-install (nvram + --removable) in post-install; drop the flaky native bootloader/grubcfg modules. - mount.conf: bind /proc /sys /dev (devtmpfs) /run + efivars into the chroot. - bos-copy-kernel: stage kernel + write a stock mkinitcpio preset (replace the archiso preset). Per-service systemctl enable (fixes NetworkManager et al. silently not enabling due to the all-or-nothing grub-btrfs.path name). System completeness: - greetd + tuigreet graphical login; installed pacman.conf + working mirrorlist; base CLI tools (nano, micro, vim, htop, …); amd/intel-ucode; tlp + hypridle power management; systemd-timesyncd, fstrim.timer; wpa_supplicant wifi; Zen browser (republished to the [Breadway] repo). Desktop + theming: - Native Lua Hyprland config (hyprland.lua) with curated standard binds; kitty (blur) replaces foot; awww wallpaper + pywal palette (tamed to a black base with warm accents); GTK dark mode. - Plymouth boot splash (bos theme: logo + spinner + status) via plymouthcfg. - Varela Round font; Calamares bread-palette sidebar (logo/black-region polish still pending).
49 lines
2.1 KiB
Bash
49 lines
2.1 KiB
Bash
#!/bin/bash
|
|
# Create the unprivileged BOS live user and its Hyprland session.
|
|
#
|
|
# Hyprland refuses to run as root (superuser-privileges check), so the live
|
|
# session must run as a normal user. Calamares — which does need root — is
|
|
# launched onto the user's Wayland socket via passwordless sudo (see
|
|
# 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
|
|
getent group "$g" >/dev/null 2>&1 && gpasswd -a liveuser "$g" >/dev/null || true
|
|
done
|
|
passwd -d liveuser >/dev/null
|
|
fi
|
|
|
|
# Layer the installer onto the live desktop: auto-launch it, and bind Super+I to
|
|
# relaunch it after it's been closed. Appended (in Lua) to the skel hyprland.lua
|
|
# native config so the full desktop stays intact.
|
|
HYPR=/home/liveuser/.config/hypr/hyprland.lua
|
|
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) ---
|
|
hl.bind("SUPER + I", hl.dsp.exec_cmd("bos-launch-calamares"))
|
|
hl.on("hyprland.start", function() hl.dispatch(hl.dsp.exec_cmd("bos-launch-calamares")) end)
|
|
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.
|
|
cat >/home/liveuser/.bash_profile <<'EOF'
|
|
if [[ "$(tty)" == /dev/tty1 ]] && [[ -z "$WAYLAND_DISPLAY" ]]; then
|
|
export WLR_RENDERER_ALLOW_SOFTWARE=1
|
|
export WLR_NO_HARDWARE_CURSORS=1
|
|
# Log to a user-writable path (/var/log is root-only; redirecting there
|
|
# would fail and silently keep the compositor from ever launching).
|
|
Hyprland &>/tmp/hyprland-live.log
|
|
echo "Hyprland exited (rc=$?). Log: /tmp/hyprland-live.log"
|
|
exec bash -i
|
|
fi
|
|
EOF
|
|
|
|
chown -R liveuser:liveuser /home/liveuser
|