Make BOS a complete, bootable, themed desktop OS
Some checks failed
Mirror to GitHub / mirror (push) Failing after 7s
Some checks failed
Mirror to GitHub / mirror (push) Failing after 7s
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). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
2a866144f4
commit
9ea57d87c0
35 changed files with 787 additions and 180 deletions
|
|
@ -3,8 +3,9 @@
|
|||
#
|
||||
# archiso keeps vmlinuz/initramfs in the ISO boot dir (arch/boot/x86_64/), NOT
|
||||
# in the squashfs, so the rootfs that unpackfs lays down has an empty /boot.
|
||||
# Without a kernel, the chroot's `mkinitcpio -P` and `grub-mkconfig` produce
|
||||
# nothing and the installed system is unbootable.
|
||||
# The kernel must be present before Calamares' `initcpio` module runs mkinitcpio
|
||||
# (the stock linux.preset points ALL_kver at /boot/vmlinuz-linux) and before the
|
||||
# `bootloader` module runs grub — otherwise the installed system is unbootable.
|
||||
#
|
||||
# Runs in the LIVE environment (Calamares shellprocess, dontChroot) so it can
|
||||
# read /run/archiso/bootmnt; the target root mount point is passed as $1.
|
||||
|
|
@ -21,4 +22,25 @@ for u in amd-ucode.img intel-ucode.img; do
|
|||
[ -f "$SRC/$u" ] && cp -f "$SRC/$u" "$ROOT/boot/$u"
|
||||
done
|
||||
|
||||
echo "Copied live kernel into $ROOT/boot"
|
||||
# Replace the archiso initramfs setup that unpackfs copied from the live medium.
|
||||
# On archiso the linux preset is PRESETS=('archiso') using archiso.conf (the live
|
||||
# HOOKS). Calamares' `initcpio` runs `mkinitcpio -P`, which would build that
|
||||
# archiso preset and either bake the live-boot hooks into the install or fail
|
||||
# once archiso.conf is gone. Drop the drop-in and write a stock default+fallback
|
||||
# preset so `initcpio` produces a normal, bootable initramfs from the config that
|
||||
# the `initcpiocfg` module generates at /etc/mkinitcpio.conf.
|
||||
rm -f "$ROOT/etc/mkinitcpio.conf.d/archiso.conf"
|
||||
install -d -m 0755 "$ROOT/etc/mkinitcpio.d"
|
||||
cat >"$ROOT/etc/mkinitcpio.d/linux.preset" <<'PRESET'
|
||||
# mkinitcpio preset file for the 'linux' package
|
||||
ALL_config="/etc/mkinitcpio.conf"
|
||||
ALL_kver="/boot/vmlinuz-linux"
|
||||
|
||||
PRESETS=('default' 'fallback')
|
||||
|
||||
default_image="/boot/initramfs-linux.img"
|
||||
fallback_image="/boot/initramfs-linux-fallback.img"
|
||||
fallback_options="-S autodetect"
|
||||
PRESET
|
||||
|
||||
echo "Copied live kernel into $ROOT/boot; reset mkinitcpio to a stock preset"
|
||||
|
|
|
|||
|
|
@ -19,16 +19,16 @@ if ! id liveuser &>/dev/null; then
|
|||
fi
|
||||
|
||||
# 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
|
||||
# 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) ---
|
||||
exec-once = bos-launch-calamares
|
||||
bind = SUPER, I, exec, bos-launch-calamares
|
||||
-- --- 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
|
||||
|
||||
|
|
|
|||
15
iso/airootfs/usr/local/bin/bos-session
Normal file
15
iso/airootfs/usr/local/bin/bos-session
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
# BOS graphical session launcher, run by greetd on the INSTALLED system after
|
||||
# the user authenticates (see /etc/greetd/config.toml).
|
||||
#
|
||||
# greetd does not start a login shell, so /etc/profile.d is never sourced — which
|
||||
# means ~/.local/bin (where bakery installs the bread ecosystem: breadd, breadbar,
|
||||
# breadbox-sync, …) would be missing from PATH and the Hyprland `exec-once`
|
||||
# launches would fail. Source the login profile here so PATH is correct, set the
|
||||
# Wayland session hints, then hand off to Hyprland.
|
||||
source /etc/profile 2>/dev/null
|
||||
|
||||
export XDG_SESSION_TYPE=wayland
|
||||
export XDG_CURRENT_DESKTOP=Hyprland
|
||||
|
||||
exec Hyprland
|
||||
Loading…
Add table
Add a link
Reference in a new issue