8fb8efcbbd
- 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>
97 lines
4.4 KiB
Markdown
97 lines
4.4 KiB
Markdown
# TANINUX — Verteilung als „Distro"
|
|
|
|
Ziel: ein Calamares-Installer, der eine fertige TANINUX-Umgebung aufsetzt.
|
|
Modell: **eigenes Binär-Repo `[tanin]` nur für eigene Pakete**, alles Standard
|
|
aus den **offiziellen Arch-Repos** (wie CachyOS/EndeavourOS).
|
|
|
|
## Pakete
|
|
|
|
| Paket | Repo | Inhalt |
|
|
|------------------|-------------|-----------------------------------------------------|
|
|
| `taninux` | `[tanin]` | App: tsettings + thub + TUI, Helper, polkit, .desktop |
|
|
| `tanin-eww` | `[tanin]` | eww Panel/Dock-Config + Scripts (→ /usr/share) |
|
|
| `tanin-setup` | `[tanin]` | seedet `~/.config` aus /usr/share + Portal/Session-Fix |
|
|
| `tanin-desktop` | `[tanin]` | **Metapackage**: depends = eigene + Arch-Pakete |
|
|
|
|
`tanin-desktop` zieht per `depends` die Arch-Pakete aus den normalen Repos und
|
|
die eigenen aus `[tanin]`. AUR bleibt Opt-in → `paru` ist `optdepends`, kein
|
|
hartes `depends` (Metapackage baut also nichts aus dem AUR).
|
|
|
|
## Dotfile-Auslieferung (wichtig)
|
|
|
|
AUR/Binär-Pakete dürfen **nicht** nach `/home` schreiben. Daher:
|
|
1. Default-Configs ins Paket nach `/usr/share/tanin/` (oder `/etc/skel/`).
|
|
2. `tanin-setup` kopiert sie beim ersten Start nach `~/.config` (idempotent,
|
|
überschreibt nichts ohne `--force`) und richtet das Session-Portal ein
|
|
(siehe „Dark Mode / Portal" unten).
|
|
|
|
## Phasen
|
|
|
|
1. **Fundament** — `packaging/taninux/PKGBUILD` (fertig), LICENSE (✅ da,
|
|
GPL-3.0-or-later), `cd packaging/taninux && makepkg -si` lokal testen.
|
|
2. **Meta + Config** — `tanin-desktop` (Skelett da), `tanin-eww`, `tanin-setup`.
|
|
3. **Eigenes Repo `[tanin]`**. Hosts:
|
|
- **Code** → `git.openbureau.ch/karim/taninux` (PKGBUILD-`source`, woher `makepkg` klont)
|
|
- **Projekt + Repo** → `taninux.kgva.ch` (PKGBUILD-`url`/Homepage **und** pacman-`Server`)
|
|
|
|
DB bauen + signieren:
|
|
```sh
|
|
repo-add -s tanin.db.tar.zst *.pkg.tar.zst # -s signiert mit Packager-Key
|
|
```
|
|
Hosten — zwei Optionen:
|
|
- **Gitea/Forgejo Arch-Registry** (falls git.openbureau.ch das kann): Pakete
|
|
pushen, `Server = https://git.openbureau.ch/api/packages/karim/arch/<repo>`.
|
|
`taninux.kgva.ch` als Reverse-Proxy/Vanity davor.
|
|
- **Statisches Verzeichnis** hinter `taninux.kgva.ch`: `*.pkg.tar.zst` + `tanin.db`.
|
|
|
|
`pacman.conf`-Snippet für User:
|
|
```ini
|
|
[tanin]
|
|
# TEMPORÄR + UNSICHER: TrustAll akzeptiert JEDES Paket ohne Signaturprüfung.
|
|
# Nur zum Bootstrappen, solange die DB noch nicht signiert ist. Sobald der
|
|
# Packager-Key steht -> auf "Required DatabaseOptional" umstellen (siehe unten).
|
|
SigLevel = Optional TrustAll
|
|
Server = https://taninux.kgva.ch/$arch
|
|
```
|
|
|
|
#### Repo-Signing (TODO)
|
|
|
|
Zielzustand (bevor das Repo öffentlich empfohlen wird):
|
|
1. Packager-GPG-Key erzeugen (`gpg --full-gen-key`) und öffentlich ablegen
|
|
(z. B. `taninux.kgva.ch/tanin.gpg`), damit User ihn importieren können.
|
|
2. DB **signiert** bauen: `repo-add -s tanin.db.tar.zst *.pkg.tar.zst`
|
|
(`-s` signiert DB + jedes hinzugefügte Paket mit dem Packager-Key).
|
|
3. Key beim User installieren (`pacman-key --add`, `pacman-key --lsign-key`)
|
|
und dann in `pacman.conf` scharfschalten:
|
|
```ini
|
|
SigLevel = Required DatabaseOptional
|
|
```
|
|
→ jedes Paket muss signiert sein; die DB-Signatur ist optional.
|
|
4. **Calamares / ISO** ✅ — `archiso`-Profil mit `[tanin]` vorkonfiguriert +
|
|
Calamares `packages`-Modul, das `tanin-desktop` installiert
|
|
(`iso/build-profile/`, gebaute ISO in `iso/out/`).
|
|
|
|
## Dark Mode / Portal (Session-Fix)
|
|
|
|
libadwaita-Apps (Nautilus etc.) lesen Hell/Dunkel über
|
|
`org.freedesktop.portal.Settings`. Damit das Portal startet, muss die Session
|
|
`graphical-session.target` aktivieren. `tanin-setup` legt dafür
|
|
`~/.config/systemd/user/<wm>-session.target` an und ergänzt die Compositor-
|
|
Autostarts:
|
|
```sh
|
|
exec-once = dbus-update-activation-environment --systemd --all
|
|
exec-once = systemctl --user start <wm>-session.target
|
|
```
|
|
|
|
## Hosts
|
|
|
|
- **Code:** `git.openbureau.ch/karim/taninux` (+ Repo für die eww-Config,
|
|
Absprache mit der eww-Instanz).
|
|
- **Projekt/Repo:** `taninux.kgva.ch` (Homepage + `[tanin]`-pacman-Server).
|
|
|
|
## Offene Voraussetzungen
|
|
|
|
- **LICENSE**-Datei ablegen (Vorschlag GPL-3.0-or-later):
|
|
`curl -L https://www.gnu.org/licenses/gpl-3.0.txt -o LICENSE`.
|
|
- `taninux.kgva.ch` ans Repo-Hosting hängen (Gitea-Arch-Registry oder statisch).
|