The hooks are NOT at initcpio/hooks/archiso in the archiso git repo root
(that path doesn't exist). Remove the broken install lines from Dockerfile
and instead add a find diagnostic during build to reveal the actual paths.
entrypoint: use find to locate the hooks dynamically under /usr/share/archiso
(the releng airootfs copy) instead of hardcoding a path — bail with a clear
error listing if nothing is found.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The archiso mkinitcpio hooks live in initcpio/ at the repo root, not in
configs/releng/airootfs/ — so they were never in the ISO airootfs chroot.
ALARM has no archiso package either, so the chroot's mkinitcpio found no
archiso hook, built an initramfs without mount_handler logic, and the
default handler fired at boot with empty root= → "Failed to mount ''".
Dockerfile.arm64: preserve the official hooks from initcpio/ into
/usr/share/archiso/initcpio/ instead of deleting them with the repo.
entrypoint-arm64.sh: explicitly install the official hooks into the
airootfs overlay so the chroot mkinitcpio finds them when building the
initramfs. The official hooks use uname -m for arch detection and include
all required modules/binaries for squashfs live boot.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The custom simplified hooks we were writing to the airootfs overlay
overwrote the official hooks shipped in the releng profile. The official
hooks handle uname -m for the aarch64 squashfs path, include all required
modules (squashfs, overlay, iso9660, loop, dm-snapshot, nls_*) and
binaries (blkid, findfs, losetup, switch_root), and wire up mount_handler
correctly. Our stripped-down hooks caused the overlay to mount empty,
producing the "Root device mounted successfully, but /sbin/init does not
exist" panic at boot.
Fix: stop overwriting the official hooks; keep only the mkinitcpio.conf
(which lists the hook names, not their implementation). Also remove
plymouth from initramfs HOOKS to reduce boot complexity.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace the fragile Python regex patch (which failed to match the actual
awk variable name in mkarchiso) with a mkfs.fat wrapper script placed
earlier in PATH. The wrapper intercepts every -C (create) invocation and
adds +128 MiB (131072 KiB) to the size argument, ensuring the ~50 MB
ARM64 kernel Image + FAT filesystem overhead fits regardless of which
exact size formula the installed mkarchiso version uses.
Also adds a grep of mkarchiso's size lines to stdout so the formula is
visible in build logs for future debugging.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The ARM64 kernel Image is ~50 MB. mkarchiso calculates the EFI FAT
image size as int(total_bytes/MiB)+2, which leaves no room for FAT
filesystem overhead → "Disk full" when copying the kernel in.
Patch mkarchiso at container startup (before mkarchiso runs) to use
+128 MiB buffer instead, giving plenty of headroom.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Dockerfile.arm64: after pre-downloading linux-aarch64, build a local
pacman repo from the cached package using repo-add so mkarchiso can
install the kernel from file:// without touching the [alarm] mirror.
entrypoint-arm64.sh: put [alarm-local] first in the profile pacman.conf
so pacstrap always resolves linux-aarch64 from the baked-in repo.
Also add a symlink fallback in customize_airootfs.sh: ALARM aarch64
may install the kernel as /boot/Image instead of /boot/vmlinuz-linux-aarch64;
the symlink ensures archiso's vmlinuz-* glob and systemd-boot both find it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add ls/pacman -Q diagnostics in customize_airootfs.sh so we can see
exactly what is (or isn't) in /boot after pacstrap
- Pre-download linux-aarch64 in Dockerfile with pacman -Sw so mkarchiso
can install it from the local pacman cache even if the [alarm] mirror
is unreachable at ISO-build time
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Writing the preset to the airootfs overlay caused a file conflict when
pacstrap installed linux-aarch64 (which ships its own copy of the file).
Move the preset override into customize_airootfs.sh which runs after
pacstrap, so the package installs cleanly then we replace the preset.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
ALARM mirrors inconsistently serve .db.sig files — some mirrors return
404 for core.db.sig which aborts the pacstrap. SigLevel = Never is
standard practice for Docker-based archiso builds.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Three fixes for the 'vmlinuz-* not found' failure:
1. Override releng profile's pacman.conf to add [alarm] and [aur] repos.
linux-aarch64 lives in [alarm] — without this the kernel package was
silently missing from the airootfs and /boot was empty.
2. Remove linux.preset from releng airootfs (references vmlinuz-linux,
the x86_64 kernel name that doesn't exist on ALARM).
3. Add linux-aarch64.preset to the airootfs with an 'archiso' preset entry
(ALL_kver=/boot/vmlinuz-linux-aarch64, archiso_image=initramfs-linux-aarch64.img).
mkarchiso looks for this 'archiso' preset to build the live initramfs.
4. Switch customize_airootfs.sh from mkinitcpio -P to mkinitcpio -p linux-aarch64
so only the aarch64 preset runs (not the stale x86_64 linux preset).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
archiso is not in ALARM repos for aarch64 — pacstrap fails trying to
install it into the live ISO root. The Docker build environment already
has mkarchiso installed from source; the live ISO doesn't need it.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
'make install' fails because rst2man (python-docutils) is not installed
and we don't need man pages in a container. Manually install just the
three things mkarchiso needs: the mkarchiso script, run_archiso, and
the configs directory.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
archiso is not packaged for aarch64 in ALARM repos — install from the
upstream GitLab source with PREFIX=/usr so mkarchiso lands in /usr/bin.
Also:
- Set mirrorlist explicitly (ALARM tarball ships with a stale/empty one)
- Add archiso runtime deps: mtools, dosfstools, libisoburn, squashfs-tools,
arch-install-scripts, e2fsprogs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
os.archlinuxarm.org has a TLS cert mismatch (cert SAN doesn't cover the
hostname). ALARM officially distributes over HTTP, not HTTPS.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Use libarchive-tools (bsdtar) instead of BusyBox tar to extract the
ALARM tarball; bsdtar correctly preserves the /bin → usr/bin symlink
that is part of ALARM's merged-usr filesystem layout
- Verify /usr/bin/bash exists after extraction so download failures are
caught loudly instead of producing a silent empty rootfs
- Add SHELL ["/usr/bin/bash", "-c"] in stage 2: Docker's default RUN
invocation looks up /bin/sh, which requires the symlink to be resolved
in the container init — using the absolute path bypasses that entirely
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Stage 1 (alpine/arm64) downloads the official Arch Linux ARM rootfs via
curl — Docker caches this layer so it only runs once. Stage 2 (scratch)
COPYs the extracted filesystem in, then builds OrionOS natively in that
ALARM environment.
Also fixes DisableSandbox placement (insert into [options] section via
sed, not appended to file end where it lands in [aur] and is ignored).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
menci/archlinuxarm:aarch64 doesn't exist on Docker Hub.
lopsided/archlinux is a maintained multi-arch image with native arm64 support.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Lens links against libimlib2 at compile time. The package was already
in the ISO runtime list but missing from the builder image.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Phase 4 — native apps:
- quill/: text editor (monospace, double-buffered, find bar, undo, open/save)
- lens/: image viewer using imlib2 (zoom, pan, rotate, directory nav)
- wm/src/menu.c: launch quill instead of mousepad
- iso/docker/entrypoint.sh: add imlib2 package; install quill + lens binaries
- skykit/template/: developer app template demonstrating the SkyKit API
Phase 5 — file system and search:
- rigel/rigel.c: right-click context menu (open, open in quill, copy path,
rename, trash, properties); Ctrl+F search/filter bar with name highlighting;
F2 rename-in-place overlay; Delete key moves to trash
Phase 6 — distribution:
- .github/workflows/build-iso.yml: GitHub Actions CI that compiles all
components and builds a bootable ISO on every tag push; creates a GitHub
release with sha256 checksums
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SkyKit (skykit/):
- Shared palette constants, font setup, and Xlib/Xft drawing utilities
- sk_fill, sk_rect, sk_line, sk_text, sk_text_clip, sk_textw, sk_baseline
- Builds as libskykit.a, consumed by Rigel and future shell components
Rigel (rigel/):
- Native C/Xlib file manager with SkyKit
- Sidebar with 8 bookmarks (Home, Desktop, Documents, Downloads, etc.)
- Editable path bar (Ctrl+L or '/' to activate, Enter to navigate)
- Sortable columns: Name / Size / Modified (click header to sort/reverse)
- Colored type badges: DIR, IMG, SND, VID, ZIP, SRC, PDF, TXT, EXE
- Double-click to open dirs or files (xdg-open)
- Keyboard: ↑↓ select, Enter open, Backspace back, Ctrl+H toggle hidden
- Right-click menu updated: "File Manager" now launches rigel
Text centering fix (deskbar + wm):
- Root cause: draw_str added glyph-specific ext.height/ext.y offset, and
all callers used hardcoded (H-10)/2 magic numbers instead of font metrics
- Fix: draw_str now takes y as a direct baseline; str_baseline() computes
(strip_y + strip_h + ascent - descent) / 2 for consistent centering
- WM titlebar: same fix using font_title->ascent/descent
- Affects: "Orion ▾" button, clock, date, app list, flyout menu items,
letter icons, and all window titlebars
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Screenshots (PrintScreen / Shift+PrintScreen):
- PrintScreen → full screenshot saved to ~/Pictures via scrot
- Shift+PrintScreen → interactive region select via scrot -s
- Both send a dunst notification on save
- scrot added to packages
Clipboard manager:
- Replace janky PRIMARY/CLIPBOARD sync loop with parcellite
- parcellite provides clipboard history, survives app close,
shows a tray icon for browsing past entries
- parcellite added to packages
Icon theme:
- Switch from Adwaita to Papirus-Dark across GTK2, GTK3 settings,
and theme index.theme
- papirus-icon-theme added to packages
Also fix remaining stale sky* references in menu.c (skywallpaper,
pkill skywm) and events.c (skylauncher).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
mkinitcpio runs during pacstrap (kernel install) before
customize_airootfs.sh, so the initramfs gets the Arch default
spinner theme. Add mkinitcpio -P after plymouth-set-default-theme
so the orionos theme is baked into the final initramfs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
System tray in skydeskbar (Phase 1 #4):
- Claims _NET_SYSTEM_TRAY_S<screen> selection on startup and
broadcasts MANAGER so nm-applet and other tray clients connect
- Handles _NET_SYSTEM_TRAY_OPCODE dock requests: XReparentWindow
icon into the deskbar, sends XEMBED_EMBEDDED_NOTIFY
- Tray section is zero-height when empty; expands to DB_TRAY_H=26px
when first icon embeds, shrinking back when last icon exits
- DestroyNotify / ReparentNotify clean up the icon list and
reposition remaining icons; SelectionClear hands off gracefully
- Icon positions are updated (db_tray_reposition) whenever the app
list changes and shifts the tray section vertically
Plymouth boot splash (Phase 2 #10):
- 'skyos' script-module theme: dark navy (#111520) background,
"SkyOS" logo in accent blue (#90BBEE), thin progress bar
- 1×1 pixel bar_bg.png / bar_fg.png scaled at runtime by the
Plymouth script — no large PNGs committed to the repo
- logo.png generated at build time by ImageMagick (same tool used
for the wallpaper); build continues if ImageMagick is absent
- mkinitcpio HOOKS: added 'plymouth' after 'udev'
- Kernel cmdline: added 'splash' for UEFI systemd-boot entry
- customize_airootfs.sh: plymouth-set-default-theme skyos
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Alt+Tab now shows a centered visual switcher overlay with window cards;
cycling with Tab, committing on Alt release, cancelling with Escape
- GTK3 and GTK2 themes rewritten in dark navy palette matching skywm/
skydeskbar color constants (was an off-brand tan/BeOS palette)
- Add alacritty to ISO packages with pre-configured dark color scheme;
update all menu Terminal entries to launch alacritty instead of xterm
- Add KeyReleaseMask to WM root event selection to detect Alt release
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>