Complete archiso/Calamares profile scaffold (iso/)

- Calamares modules: unpackfs (clone), partition/mount/fstab (btrfs subvols),
  bootloader (systemd-boot + quiet splash), packages (strip live), services
  (greetd), shellprocess (snapper, flathub, strip-live), branding (Fuji)
- bootstrap-profile.sh: releng base + linux-zen swap + overlay our deltas
- BUILD.md: build steps, decisions, and honest open items (needs build-test)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-19 19:55:46 +02:00
parent d32383ee6c
commit ac9b94b0b2
17 changed files with 263 additions and 1 deletions
@@ -0,0 +1,24 @@
---
componentName: tanin
welcomeStyleCalamares: true
windowExpanding: normal
strings:
productName: TANINUX
shortProductName: TANINUX
version: camel
shortVersion: camel
versionedName: TANINUX (camel)
shortVersionedName: TANINUX
bootloaderEntryName: TANINUX
productUrl: https://taninux.kgva.ch
supportUrl: https://git.openbureau.ch/karim/taninux
# Fuji palette for the installer sidebar (matches the desktop).
style:
sidebarBackground: "#0f0f0f"
sidebarText: "#f0f0f0"
sidebarTextSelect: "#a39ec4"
sidebarTextHighlight: "#a39ec4"
# TODO: add productLogo (logo.png) + a slideshow (show.qml) for polish.
@@ -0,0 +1,9 @@
---
efiBootLoader: "systemd-boot"
kernel: "/vmlinuz-linux-zen"
img: "/initramfs-linux-zen.img"
fallback: "/initramfs-linux-zen-fallback.img"
timeout: "3"
# Plymouth splash + quiet boot on the installed system.
kernelParams: [ "quiet", "splash", "rw" ]
installEFIFallback: true
@@ -0,0 +1,8 @@
---
mountOptions:
default: defaults,noatime
btrfs: defaults,noatime,compress=zstd,space_cache=v2
efi: defaults,noatime,umask=0077
ssdExtraMountOptions:
btrfs: ssd,discard=async
crypttabOptions: luks
@@ -0,0 +1,37 @@
---
# Snapper-friendly Btrfs subvolume layout (@ root + @snapshots at /.snapshots).
extraMounts:
- device: proc
fs: proc
mountPoint: /proc
- device: sys
fs: sysfs
mountPoint: /sys
- device: /dev
mountPoint: /dev
options: bind
- device: tmpfs
fs: tmpfs
mountPoint: /run
- device: /run/udev
mountPoint: /run/udev
options: bind
mountOptions:
- mountPoint: /
options: defaults,noatime
- mountPoint: "*"
filesystem: btrfs
options: defaults,noatime,compress=zstd
btrfsSubvolumes:
- mountPoint: /
subvolume: /@
- mountPoint: /home
subvolume: /@home
- mountPoint: /var/cache
subvolume: /@cache
- mountPoint: /var/log
subvolume: /@log
- mountPoint: /.snapshots
subvolume: /@snapshots
@@ -0,0 +1,12 @@
---
backend: pacman
pacman:
num_retries: 3
disable_download_timeout: true
needed_only: false
operations:
# Strip the live-only installer from the installed target. Everything else was
# cloned by unpackfs.
- try_remove:
- calamares
- cage
@@ -0,0 +1,11 @@
---
efiSystemPartition: "/boot" # systemd-boot wants the ESP at /boot
efiSystemPartitionSize: 1024M
userSwapChoices: [ none, small, suspend ]
drawNestedPartitions: true
alwaysShowPartitionLabels: true
allowManualPartitioning: true
initialPartitioningChoice: erase
initialSwapChoice: none
defaultFileSystemType: "btrfs"
availableFileSystemTypes: [ "btrfs", "ext4" ]
@@ -0,0 +1,13 @@
---
services:
- name: greetd # the TANINUX login (tanin-greet) — its config is already
mandatory: false # in place from the tanin-greet package scriptlet
- name: NetworkManager
mandatory: false
- name: snapper-cleanup.timer
mandatory: false
- name: snapper-timeline.timer
mandatory: false
targets:
- name: graphical
mandatory: true
@@ -0,0 +1,5 @@
---
dontChroot: false
timeout: 30
script:
- "flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo"
@@ -0,0 +1,11 @@
---
dontChroot: false
timeout: 120
# Best-effort snapper setup on the Btrfs target. The @snapshots subvolume is
# already mounted at /.snapshots (see mount.conf); snapper's own create-config
# can conflict with a pre-existing /.snapshots, so this is tolerant.
# snap-pac then auto-snapshots before/after each pacman transaction.
script:
- command: "snapper --no-dbus -c root create-config / || true"
timeout: 60
- "snapper --no-dbus -c root set-config NUMBER_LIMIT=10 NUMBER_LIMIT_IMPORTANT=5 TIMELINE_CREATE=no || true"
@@ -0,0 +1,11 @@
---
dontChroot: false
timeout: 30
# Remove the live-only installer bits from the installed target so it boots the
# desktop (greetd) instead of auto-launching Calamares.
script:
- "rm -f /etc/systemd/system/getty@tty1.service.d/autologin.conf"
- "rmdir --ignore-fail-on-non-empty /etc/systemd/system/getty@tty1.service.d 2>/dev/null || true"
- "rm -f /root/.bash_profile"
- "rm -f /usr/local/bin/tanin-installer"
- "systemctl set-default graphical.target"
@@ -0,0 +1,7 @@
---
# Clone the live squashfs onto the target. Path matches install_dir=tanin,
# arch=x86_64, airootfs_image_type=squashfs (see profiledef.sh).
unpack:
- source: "/run/archiso/bootmnt/tanin/x86_64/airootfs.sfs"
sourcefs: "squashfs"
destination: ""