Initial commit — TANINUX (camel): management app + distro packaging

- app: GTK System Settings (tsettings) + Software Hub (thub) + TUI
- distro/: camel.toml manifest + MANIFEST.md (Arch + [tanin] repo model)
- packaging/: taninux, tanin-desktop (niri metapackage), tanin-greet,
  tanin-libadwaita, tanin-setup
- docs/, data/, LICENSE (GPL-3.0-or-later)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-18 20:18:30 +02:00
commit 10b88a67bc
167 changed files with 19624 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
# Maintainer: Karim <karim@gabrielevarano.ch>
#
# First-run-Setup: seedet ~/.config aus /usr/share/tanin/skel und richtet das
# Session-Portal ein. Wird vom Metapackage als depends gezogen; nach der
# Installation ruft der User (oder ein Autostart) einmal `tanin-setup`.
pkgname=tanin-setup
pkgver=0.1.0
pkgrel=1
pkgdesc="TANINUX first-run setup — seed user configs and enable the session portal"
arch=('any')
url="https://taninux.kgva.ch"
license=('GPL-3.0-or-later')
depends=('systemd' 'xdg-desktop-portal' 'xdg-desktop-portal-gtk')
package() {
install -Dm755 "$startdir/tanin-setup" "$pkgdir/usr/bin/tanin-setup"
install -Dm644 "$startdir/tanin-session.target" \
"$pkgdir/usr/share/tanin/tanin-session.target"
# Default-Configs landen hier (Phase 2: tanin-eww liefert die eww/Compositor-
# Configs nach /usr/share/tanin/skel/.config/…):
install -d "$pkgdir/usr/share/tanin/skel"
}
@@ -0,0 +1,7 @@
[Unit]
Description=TANINUX graphical session
# Startet (per Dependency-Request) graphical-session.target, an dem
# xdg-desktop-portal hängt — sonst kann das Portal nicht aktivieren und
# libadwaita-Apps (Nautilus …) bleiben im Hell-Fallback.
Requires=graphical-session.target
After=graphical-session.target
+46
View File
@@ -0,0 +1,46 @@
#!/usr/bin/env bash
# TANINUX first-run setup: seedet Default-Configs nach ~/.config und richtet
# das Session-Portal ein (damit libadwaita-Apps Hell/Dunkel übernehmen).
# Idempotent. --force überschreibt bestehende Configs (mit .bak-Backup).
set -euo pipefail
SKEL="/usr/share/tanin/skel"
UNIT="/usr/share/tanin/tanin-session.target"
CFG="${XDG_CONFIG_HOME:-$HOME/.config}"
FORCE=0
[ "${1:-}" = "--force" ] && FORCE=1
seed_configs() {
[ -d "$SKEL" ] || return 0
while IFS= read -r -d '' src; do
rel="${src#"$SKEL"/}"
dst="$HOME/$rel"
mkdir -p "$(dirname "$dst")"
if [ -e "$dst" ] && [ "$FORCE" -eq 0 ]; then
continue
fi
[ -e "$dst" ] && cp -a "$dst" "$dst.bak" 2>/dev/null || true
cp -a "$src" "$dst"
done < <(find "$SKEL" -type f -print0)
}
install_session_target() {
[ -f "$UNIT" ] || return 0
install -Dm644 "$UNIT" "$CFG/systemd/user/tanin-session.target"
systemctl --user daemon-reload 2>/dev/null || true
}
seed_configs
install_session_target
cat <<'EOF'
TANINUX setup complete.
• configs seeded into ~/.config
• session target installed (~/.config/systemd/user/tanin-session.target)
Make sure your compositor autostart contains:
exec-once = dbus-update-activation-environment --systemd --all
exec-once = systemctl --user start tanin-session.target
(The shipped TANINUX compositor config already includes these.)
EOF