# Changelog ## [2.3.0] - 2026-07-24 **✨ New** - Guided setup wizard, now the default command: *lim* with no *--type* (or *lim --type guided*) asks everything up front — distribution, target device, hostname, login user + SSH key, password — then builds an encrypted, Tor-remote-unlockable image unattended. - Debian / Raspberry Pi OS remote LUKS unlock. The initramfs unlock stack is now distro-agnostic behind an *InitramfsBackend* abstraction: *mkinitcpio* for Arch/Manjaro, *initramfs-tools* (cryptsetup-initramfs + dropbear-initramfs + a Tor onion) for Raspberry Pi OS / moode / RetroPie. - Flash full disk images into LUKS. Distributions that ship a *.img* rather than a rootfs tarball (Raspberry Pi OS, moode, RetroPie, Manjaro ARM) are loop-mounted and their boot + root partitions copied into a fresh LUKS container. New Raspberry Pi OS catalog (*lite64* / *desktop64* / *lite32*). - New *remote-unlock* command: reach a waiting initramfs over Tor (onion, via *torsocks*) or plain SSH (host/IP), running *cryptroot-unlock* or presenting the passphrase prompt. The wizard saves a target record under *~/.config/lim/unlocks* so *lim --type remote-unlock* offers it directly. - Cross-architecture builds. Building a foreign-arch image (e.g. arm64 Raspberry Pi OS on an x86 host) auto-installs *qemu-user-static* and registers binfmt, or aborts before the target is erased with per-distro instructions. - RTC-less clock hardening. A clock floor (build epoch baked into the initramfs) plus a numeric *tor_ntp=* cmdline let the clock sync without DNS, so the Tor onion still publishes on boards without a real-time clock (which boot at 1970). - Numbered selection menus for distribution and version prompts; typing the name still works. - CI: a full Debian *build → boot → LUKS-unlock* QEMU end-to-end job runs on push (*make test-qemu-debian*). **🐛 Fixes** - Raspberry Pi OS Bookworm boots the encrypted image: the initramfs is placed on the *​/boot/firmware* FAT partition instead of the ext4 root, so cryptsetup is present at boot (no more *(initramfs)* emergency shell). - Chroot package installs are robust cross-host: a Debian-safe *PATH* (so *update-initramfs* / *useradd* resolve) and *apt-get update* before install (stock images ship stale lists whose superseded *.deb* URLs 404). - Stock-image *fstab* is normalized (the existing *​/* line is replaced, not duplicated) when copying a distro image into LUKS. - Large copies show progress (*rsync --info=progress2*, *cp* fallback). **💥 Breaking / behavior** - *lim* with no *--type* now runs the guided wizard (previously *--type* was required). - The long-deprecated *--extra* argument is removed. ## [2.2.0] - 2026-07-21 - Optional remote LUKS unlock via a Tor onion service in the initramfs. Encrypted image setups can bake *tor* into the initramfs (mkinitcpio hooks ordered *netconf tor dropbear encryptssh*), generate the v3 onion keys offline in the image chroot, and print the stable *.onion* address. Unlock with *torsocks ssh root@*. Useful behind NAT/CGNAT or a dynamic IP, where the direct *ssh root@* unlock cannot reach the host. - End-to-end tests: a rootless one (*LIM_E2E_TOR=1*) that round-trips a passphrase through a real Tor onion service, and a full virtualized one (*LIM_E2E_QEMU=1*) that builds a LUKS image, boots it in QEMU, and unlocks the root over Tor. The offline onion keygen runs in CI; *make test-tor* / *make test-qemu* / *make test-all* run the opt-in stages. ## [2.1.0] - 2026-07-14 Initial PyPI release 🥳 ## [2.0.0] - 2026-07-14 All bash scripts were ported to the *lim/* Python package with a unified CLI, a mocked test suite, and CI. **💥 Breaking changes** - *scripts/*.sh* removed. Use *lim --type * instead. - *--extra* is deprecated and ignored. - Root commands re-execute themselves with sudo automatically. **✨ New** - New command types besides *image*, *single*, *raid1*, *backup* and *chroot*: *mount*, *umount*, *single-boot*, *raid1-boot*, *lock*, *unlock*, *import*, *export*. - *distributions.yml* as single point of truth for the image catalog. - 102 pytest tests with mocked system commands plus a max-250-lines architecture guard. Run with *make test*. - Strict ruff linting, GitHub Actions CI, Dependabot, *Makefile* with *install* and *test* targets. **🐛 Fixes over the bash version** - Correct partition paths for *mmcblk* and *nvme* devices. - *chown* targets the invoking user instead of root. - sha512 checksums are verified; every pipeline stage is checked. - fstab UUID seeding skips PARTUUID and LABEL based images. - Pre-mounted images no longer get empty UUIDs in fstab and crypttab. - Missing system tools abort with a clear message, not a traceback. **📦 Dependencies** - Python 3.10 or newer, PyYAML 6 or newer. - System tools per command: *cryptsetup*, *fdisk*, *rsync*, *wget*, *gpg*, *encfs*, *pv*, *bsdtar*. ## [1.0.0] - 2026-07-14 Official Release 🥳