- tanin-greet.install: post_remove restores the previous greetd config —
removing the package no longer leaves greetd pointing at a dead binary
- aur-autoupdate: skip packages when the AUR RPC is unreachable instead of
building blind (fail closed)
- build-tanin-repo: per-package makepkg logs instead of >/dev/null
- live ISO: drop sshd.service enablement (root has an empty password on the
live medium); encoded in bootstrap-profile.sh so it survives re-bootstrap
- gtklock config: de-personalize hardcoded /home/karim path, mark as
not-yet-packaged reference
- tanin-desktop PKGBUILD: correct stale AUR-vs-extra comments (gtklock,
awww, cliphist are in extra), document the eww-git provides=eww contract
- docs/distribution.md: mark SigLevel TrustAll as temporary/insecure, add
repo-signing TODO (repo-add -s, SigLevel Required), tick done roadmap items
- tanin-calendar + niri-config.kdl: pending session work
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Trash via Gio.File.trash(), confirmed permanent delete, zip-slip-guarded
extraction, two-phase batch rename, freedesktop thumbnail cache, async
volume/clipboard handling.
Known issues (from review, to fix next): directory listing runs on the
main thread; undo of a move can overwrite a file re-created at the origin.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Corruption-safe rebinding: parses only the binds{} block, validates via
`niri validate` on a temp copy before writing, backs up to .kdl.bak.
Review fixes applied: StatusPage icon_name kwarg, capture dialog copies
tn-dark from the parent window.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bundles the pending native-UI session (dark shell, style overhaul, audio
page) with review fixes:
- native Row: set_subtitle_lines + set_activatable_widget (store and
online-accounts pages crashed with AttributeError under TANINUX_UI=native)
- wine page routed through the ui seam (last direct Adw import removed)
- console: delete no-op log_expander/collapsible_log and .clear() call sites
- ui/__init__ docstring now states the actual default backend (native)
- tests/test_pages_native.py builds every registered page under the native
backend (29 pass; skips headless)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- run_c_locale() helper (LC_ALL=C) for all pacman output parsing; fixes the
kernel-modules scanner offering to delete the RUNNING kernel's modules on
non-English locales, wrong -Qi sizes and the -Ss [installed] flag
- SystemKernelsScanner fails closed when pacman -Qo yields no owners
- taninux-helper: systemctl operands must be unit names (no paths — closes
the `systemctl enable /path` escalation primitive); user/group operands
reject / and ..; exec via fixed system dirs instead of PATH lookup
- wine.safe_to_delete resolves symlinks/..; new_prefix_path rejects bad names
- kernel screen: exact variant matching (linux-rt-lts no longer marks
linux-rt and linux-lts as running)
- update sources log failures to stderr instead of reporting "up to date"
- drop dead bootloader.prune_argv (helper allowlist rejected its argv)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Untrack iso/out/ (3.4 GB ISO), packaging/*/pkg/ trees, *.pkg.tar.zst and
tanin-icons/src/ (529 files) and ignore them going forward. Files stay on
disk. NOTE: history still carries ~13 GiB of old ISO blobs — needs a
git filter-repo pass (see README/report).
Also: first README.md, license + license-files in pyproject, minimal ruff
config, demo scripts moved to scripts/demo/.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A systemd user timer (daily) drives aur-autoupdate.sh, which rebuilds the
AUR-only deps (eww-git, tiramisu-git, waypaper, calamares, …) in a clean
devtools chroot and refreshes tanin.db. Non -git packages are skipped when
their AUR version is unchanged (RPC check) so heavy ones like calamares
aren't rebuilt for nothing; -git packages rebuild every run.
Unattended: a sudoers drop-in grants passwordless access to the chroot
helpers. Publishing is a TANIN_PUBLISH_CMD hook (no-op until hosting is
wired) — the job refreshes the local repo dir for now.
One-time: aur-autoupdate.sh setup (installs devtools, makes the chroot).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The focus-ring active-color was a static Fuji violet (#a39ec4); it now
follows gui.json's accent_hex, lightened 8% to match eww's $accent. The
scripts/accent.sh apply step patches the marked active-color line in
~/.config/niri/config.kdl (niri live-reloads on save); the line carries a
managed-by marker, anchored at line start so it never matches inactive-color.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New package packaging/tanin-icons/ generating 5 thin themes Tanin-<accent>
that inherit Adwaita and recolour only the folder/place ramp to the muted
Fuji accent (HSL shift keeping per-stop lightness; 16px rasterised so the
size-exact inherited blue PNG can't win).
- style.py: _set_gsettings now also sets icon-theme=Tanin-<accent_key> so
folders recolour live with the accent.
- desktop.py: hide Tanin-* from the manual icon picker (accent-driven, a
manual pick would be overridden on the next accent change).
- panel.py: pin-add icon hint Papirus -> Adwaita.
- build/finish-tanin-repo.sh: tanin-icons in OWN_SIMPLE; AUR rebuilds add
librewolf-bin, arch-update, timeshift-autosnap, xdg-terminal-exec, paru.
- camel.toml: icon_theme=Tanin-<accent>, icons=[adwaita], tanin-icons own
package + the new rebuilt_aur entries.
Deliberately excludes unrelated in-flight work (calendar/gtklock/
online-accounts/overview-backdrop) still uncommitted in the tree.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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>
greetd owns /etc/greetd/config.toml, so ship our config to
/usr/share/tanin/greetd/ and activate it from a post_install/post_upgrade
scriptlet (with a one-time backup). Fixes the pacman file conflict.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The Gitea Arch registry signs the repo DB with its own key
(63F0415879323F6BFE0FBFB2B6FDF356206AF4F6); import it via
.../arch/repository.key + pacman-key --lsign-key before -Sy.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- publish-tanin-repo.sh: upload built packages to the Gitea Arch registry
- distro/tanin.pacman.conf: the [tanin] pacman.conf snippet
- manifest: [tanin] is LIVE at git.openbureau.ch/api/packages/karim/arch/tanin
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- packaging/build-tanin-repo.sh: builds own pkgs + repo-add DB (-> ~/projects/tanin-repo)
- built: tanin-greet, tanin-libadwaita, tanin-setup, tanin-eww, tanin-desktop
- manifest: cliphist + cage are in extra (not AUR rebuilds); only eww/tiramisu/
waypaper need rebuilding into [tanin]; record repo-build status
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- tanin-eww: package eww shell config + niri config -> /usr/share/tanin/skel/.config
(dev paths rewritten to ~/.config/eww; niri spawn-at-startup uses sh -c)
- tanin-desktop: switch metapackage from Hyprland to the niri stack
(niri, greetd+tanin-greet, cage, eww stack, xdg-desktop-portal-gnome, fonts)
- tanin-setup: apply Fuji theme + enable tanin-libadwaita.service on first run
- tanin-libadwaita: ship systemd user service (color-scheme watcher)
- distro manifest synced; drop stale regreet references
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>