- core/display.py: write_positions() persists Arrangement's drag-and-drop
layout into niri's config.kdl (one output { position x= y= } per output),
validated via `niri validate` on a temp copy with a .kdl.bak backup before
writing — same pattern as core/keybindings.py's rebind(). Previously the
page only ever called `niri msg output … position set`, which niri treats
as live-only and drops on the next login/reload.
- gui/pages/display.py: Arrangement's Apply now runs each output's `niri msg
output … position set` synchronously instead of queuing them all on the
single-shot ProcessRunner (which rejects a second run() while the first is
still async) — a 2-monitor apply previously moved only the first output
and silently dropped the rest. _dock_to_nearest keeps the free axis at the
dragged position (so a shorter display can sit vertically centered next to
a taller rotated one) rather than forcing corner alignment.
- core/panel.py, files/__init__.py: incidental fixes alongside the above.
- packaging/: signing-key generation script + build-user systemd setup for
the [tanin] AUR auto-rebuild pipeline; PKGBUILD bumped to pkgrel=5.
- src/taninux/browser/: new module for browser theme sync (Fuji accent).
seatd alone didn't fix it (getty-autologin gives cage no logind seat; 5x respawn
then systemd start-limit -> black). Switch to greetd's initial_session, which
creates a real logind session WITH A SEAT and auto-runs cage+calamares (no login
prompt). Calamares' striplive restores the tanin-greet greetd config on the target.
Drop the getty-autologin + /root/.zprofile hack.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
VM test showed: boot menu (TANINUX branding ✓), root autologin ✓, motd ✓,
then cage failed: libseat 'Could not connect to /run/seatd.sock'. The getty
autologin has no logind seat, so run seatd in the live (disabled on the target,
where greetd uses logind). qt6-wayland so calamares (Qt) runs under cage.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
mkarchiso reuses completed stages in the work dir -> a 'too short' build that
ships a stale airootfs. bootstrap now 'rm -rf' the work dir first. Also switch
profiledef bootmodes to the non-deprecated names (bios.syslinux, uefi.systemd-boot).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- packages.x86_64: add pipewire-jack + iptables (non-interactive provider choice)
- [tanin] now also hosts calamares, python-screeninfo, python-imageio-ffmpeg
(waypaper's AUR deps) — all built without sudo
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- packages.x86_64: calamares enabled (served from [tanin])
- finish/build-tanin-repo.sh: add calamares to the AUR rebuild list
- BUILD.md + manifest: calamares rebuild step + status
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Inline comments after a package name broke kitty/flatpak (became invalid
names with trailing whitespace). gstreamer-vaapi was removed from Arch.
calamares is AUR-only -> commented pending a [tanin] rebuild decision.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>