Commit Graph
27 Commits
Author SHA1 Message Date
nmemmertandClaude Sonnet 4.6 56031c8c6f Fix ARM64 ISO build: pacman.conf repos, kernel preset, mkinitcpio
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>
2026-07-24 11:45:31 -04:00
nmemmertandClaude Sonnet 4.6 58446c1f32 Remove archiso from ARM64 live package list
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>
2026-07-24 11:35:04 -04:00
nmemmertandClaude Sonnet 4.6 b2688ea446 Fix ARM64 archiso install: copy files directly, skip man page build
'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>
2026-07-24 11:27:52 -04:00
nmemmertandClaude Sonnet 4.6 5b540afd85 Fix ARM64 build: explicit mirrorlist + archiso from source
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>
2026-07-24 11:20:18 -04:00
nmemmertandClaude Sonnet 4.6 983932a40b Fix ARM64 Dockerfile: use HTTP for ALARM tarball download
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>
2026-07-24 11:15:50 -04:00
nmemmertandClaude Sonnet 4.6 218d4a58be Fix ARM64 Dockerfile: bsdtar extraction + explicit SHELL for merged-usr
- 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>
2026-07-24 10:58:54 -04:00
nmemmertandClaude Sonnet 4.6 396016e69a Fix ARM64 Dockerfile: two-stage build from official ALARM tarball
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>
2026-07-24 10:51:22 -04:00
nmemmertandClaude Sonnet 4.6 8f60d6f8b9 Fix ARM64 Dockerfile: switch to lopsided/archlinux base image
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>
2026-07-24 10:46:21 -04:00
nmemmertandClaude Sonnet 4.6 b9d7123d60 Add ARM64 ISO build for Apple Silicon / UTM
- iso/docker/Dockerfile.arm64: Arch Linux ARM base (menci/archlinuxarm:aarch64)
- iso/docker/entrypoint-arm64.sh: ARM64 archiso profile — linux-aarch64
  kernel, EFI-only boot (no syslinux), aarch64 squashfs path, spice-vdagent
  for UTM clipboard, VirtIO GPU modesetting config
- build-iso-arm64.sh: docker buildx --platform linux/arm64 wrapper;
  runs natively on Apple Silicon, no QEMU emulation needed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-24 10:43:33 -04:00
nmemmertandClaude Sonnet 4.6 ab4bca672d Fix lens.c compile error: add missing Xft/fontconfig headers
- lens.c: add #include <X11/Xft/Xft.h> and <fontconfig/fontconfig.h>
  (XftFont, XGlyphInfo, etc. were declared but the header was never included)
- quill.c: remove unused flen variable in ed_find_next()
- rigel.c: remove unused get_file() helper (get_fidx() is used throughout)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-24 10:21:39 -04:00
nmemmertandClaude Sonnet 4.6 e03462b61b Add imlib2 to Docker build deps for Lens image viewer
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>
2026-07-24 10:14:14 -04:00
nmemmertandClaude Sonnet 4.6 a9efede702 Phase 4-6: Quill editor, Lens viewer, Rigel context menu, CI, website
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>
2026-07-24 10:07:45 -04:00
nmemmertandClaude Sonnet 4.6 d19aca2333 Fix installer GUI ghosting: add double-buffer, fix text baseline
Ghosting root cause: all X11 drawing (XFillRectangle, XDrawLine, XDrawArc,
XDrawRectangle) and XRender Xft text rendering were going directly to the
window. XRender composites text on top of pixels without clearing underneath,
so previous log lines bled through on every update.

Fix:
- Added Pixmap buf to Ins struct (created at WIN_W × WIN_H after window init)
- Redirected all drawing calls (fill_rect, draw_line, XDrawRectangle,
  XDrawArc, XFillArc) from s->win to s->buf
- XftDrawCreate in redraw() now targets s->buf
- At end of redraw(): XCopyArea(buf → win) blits the complete frame at once
- Also fixed xft_text baseline: was y + ext.height - ext.y (glyph-specific,
  varied per string); now y + f->ascent (consistent font metric)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 16:12:51 -04:00
nmemmertandClaude Sonnet 4.6 33ae437b5b Fix installer copy step; fix stale skyinstall references
Installer copy (installer/orioninstall):
- Root cause: rsync -ax / /mnt/ copies the overlayfs live root, which
  is slow, unpredictable, and hangs in VMs with overlapping filesystems
- Fix: copy from /run/archiso/airootfs instead (the squashfs is already
  mounted there on every archiso live boot). This is the clean base system,
  avoids the cow layer entirely, and is significantly faster.
- Added -H -A -X -S flags for proper hard-link, ACL, xattr, sparse-file handling
- Fallback to live-root rsync if the squashfs mount isn't present
- Also renamed EFI partition label SKYEFI → ORIONEFI

Discoverability (deskbar + wm):
- deskbar "Install OrionOS" was calling 'sudo skyinstall' (old name) — fixed
  to 'sudo orioninstall-gui || sudo orioninstall' with GUI-first fallback
- Right-click desktop menu now also has "Install OrionOS" entry
  (was only in the deskbar hamburger menu before)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 15:51:44 -04:00
nmemmertandClaude Sonnet 4.6 1340bf012c Phase 4: SkyKit library + Rigel file manager; fix text centering
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>
2026-07-23 15:40:03 -04:00
nmemmertandClaude Sonnet 4.6 e3bc761f25 Update README for OrionOS (complete rewrite)
Replace stale SkyOS content with current OrionOS state:
- All component names updated (orionwm, oriondeskbar, etc.)
- New components documented: Nebula, OrionPkg
- Installer wizard now lists 6 steps including timezone/keyboard
- Full keyboard shortcut table including Super+S, PrintScreen
- Right-click menu contents
- Nebula and OrionPkg usage sections
- Updated included software (Alacritty, Papirus, parcellite, scrot)
- Updated project layout tree
- Component naming/star theme section

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 15:09:14 -04:00
nmemmertandClaude Sonnet 4.6 0ed61cea4c Add orionpkg (package manager GUI) + installer locale step
orionpkg/orionpkg.c (~500 lines, native Xlib/Xft):
- Launches with checkupdates (pacman-contrib) to list pending upgrades
- ST_CHECKING: animated spinner while querying
- ST_UPDATES: scrollable package list with name / old ver → new ver columns
- ST_UPDATING: pkexec pacman -Syu in background, live log output,
  progress bar estimated from pacman's (N/M) counters
- ST_DONE / ST_ERROR: success or failure screen
- Refresh (r key), scroll (mouse wheel / arrow keys), Close (Esc/q)
- pacman-contrib added to ISO packages

Installer: add STEP_LOCALE (timezone + keyboard layout):
- Inserted between STEP_DISK and STEP_USER
- Timezone pane: searchable filter input + scrollable list of 37 zones
- Keyboard pane: 20 common layouts with code + description
- Timezone and keyboard passed as args 6/7 to orioninstall
- orioninstall: sets /etc/vconsole.conf and X11 xorg.conf.d keyboard
  config from args; uses selected timezone for localtime symlink

Also:
- Right-click menu: "Software Updates" → orionpkg
- Root Makefile: orionpkg target + install rule
- ISO: orionpkg binary installed, permissions map, gitignore

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 14:39:00 -04:00
nmemmertandClaude Sonnet 4.6 53c6199102 Add Nebula — native C settings panel (Display, Appearance, Input, About)
nebula/nebula.c (~600 lines, single-file, native Xlib/Xft):
- Display tab: resolution cycling via xrandr, DPI toggle (96/144),
  brightness control via brightnessctl
- Appearance tab: wallpaper reset/open, shows active GTK/icon theme
- Input tab: key repeat delay + rate steppers (reads live from XKB),
  tap-to-click and natural scrolling toggles via xinput
- About tab: version, component, platform info
- Fixed-size 700×500 window, dark-navy palette, sidebar nav with
  accent mark on selected tab, dirty-state indicator, Apply/Close
- Escape/Q/Enter shortcuts; Enter applies pending changes

Wired up:
- Root Makefile: nebula target, install -Dm755 nebula/nebula
- Right-click desktop menu: "System Settings" → nebula
- ISO: binary installed to /usr/local/bin/nebula, Super+S xbindkeys
  shortcut, file permissions map entry
- .gitignore: nebula/nebula binary

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 14:21:38 -04:00
nmemmertandClaude Sonnet 4.6 98aeafc4f0 Phase 3: screenshot hotkeys, clipboard history, Papirus icon theme
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>
2026-07-23 14:15:27 -04:00
nmemmertandClaude Sonnet 4.6 dc209e74fe Fix Plymouth: rebuild initramfs after setting OrionOS theme
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>
2026-07-23 14:01:37 -04:00
nmemmertandClaude Sonnet 4.6 194e5c2d51 Rename themes/skywallpaper → themes/orionwallpaper
Update all internal references: config dir, wallpaper dir, default
image filename, and script header comment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 13:46:11 -04:00
nmemmertandClaude Sonnet 4.6 33c2f3b66d Fix remaining sky* references missed in Phase 7 rename
- Dockerfile: WORKDIR /skyos → /orionos, ENTRYPOINT path, image name
- Makefile: skyos-default.png → orionos-default.png in install target
- iso/build-base.sh: all sky*/SkyOS → orion*/OrionOS
- iso/mac-install-notes.md: update install instructions for OrionOS
- themes/OrionOS: finish renaming sky* strings in gtkrc, gtk.css, index.theme

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 13:45:00 -04:00
nmemmertandClaude Sonnet 4.6 61fa1194db Phase 7: rename SkyOS → OrionOS across entire codebase
- Rename all binaries: skywm→orionwm, skydeskbar→oriondeskbar,
  skylauncher→orionlauncher, skyinstall/skyinstall-gui→orioninstall*
- Rename theme directory: themes/SkyOS/ → themes/OrionOS/
- Update all string literals, window titles, menu labels, and comments
- Update ISO build: hostname→orionos, user→orion, all paths/labels
- Add Plymouth boot splash theme (orionos) with Navy+Blue palette
- Update GTK2/GTK3 theme names, wallpaper output name
- Update .gitignore, root Makefile, build-iso.sh for new binary names

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 13:42:18 -04:00
nmemmertandClaude Sonnet 4.6 803ffe991f Phase 1/2 complete: system tray (XEMBED) + Plymouth boot splash
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>
2026-07-23 13:32:27 -04:00
nmemmertandClaude Sonnet 4.6 2b8ea90a57 Phase 1/2: .desktop launcher, volume control in deskbar
- Launcher now loads apps dynamically from /usr/share/applications
  and ~/.local/share/applications instead of a hardcoded list;
  maps desktop Categories to tab system, falls back to built-in list
  on systems without .desktop files (dev/macOS builds)
- Launcher gains scroll support: mouse wheel and PgUp/PgDn scroll
  the app grid, scrollbar drawn on right edge when needed
- Deskbar status bar shows VOL % from pactl (cached, polls every 5s)
- Deskbar status bar: scroll wheel changes volume ±5%, left-click
  toggles mute

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 13:16:18 -04:00
nmemmertandClaude Sonnet 4.6 9089c14a19 Phase 1: Alt+Tab switcher, dark GTK theme, alacritty terminal
- 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>
2026-07-23 13:11:37 -04:00
nmemmertandClaude Sonnet 4.6 e641720a3c Initial commit: SkyOS source code
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-23 12:14:34 -04:00