# camel — Distribution Manifest

> Codename **camel**. The project/OS name is still provisional (**taninux** ·
> **tanin** · or a later marketing name). Everything stable keys off the
> codename, not the name. Machine-readable source of truth: [`camel.toml`](camel.toml).
> Last reconciled 2026-06-17.

camel is **not a fork**. It's stock Arch Linux plus one extra binary repo
(`[tanin]`) holding our own packages — the EndeavourOS/CachyOS model. A
Calamares installer lays down a ready-to-use **niri + eww** desktop managed by
the **TANINUX** apps.

## Identity (Fuji palette)
Dark, monochrome, libadwaita, rounded, soft short shadows.

| Token      | Value                | Used by                        |
|------------|----------------------|--------------------------------|
| accent     | `#a39ec4` (violet)   | greeter, eww (`accent.sh`), GTK |
| bg / fg    | `#0f0f0f` / `#f0f0f0`| theme                          |
| UI font    | Inter (Medium)       | apps, bar                      |
| icon font  | Iosevka Nerd Font    | `nf-md-*` glyphs               |
| icon theme | Papirus              | dock app icons                 |

## The stack (what it boots into)

| Layer            | Choice                              | Package(s)                       |
|------------------|-------------------------------------|----------------------------------|
| Display manager  | **greetd** + custom GTK4 greeter (via `cage`) | `greetd`, `cage`, `tanin-greet` |
| Compositor       | **niri** (Wayland, niri-only)       | `niri`                           |
| Bar/dock/panels  | **eww** + Spotlight                 | `eww`, `tanin-eww`               |
| Notifications    | **tiramisu** (headless) + eww UI    | `tiramisu`                       |
| Terminal         | foot                                | `foot`                           |
| Wallpaper        | waypaper                            | `waypaper`                       |
| Apps             | tsettings · thub · taninux (TUI)    | `taninux`                        |
| GTK4 theme       | **Fuji** recolour, light + dark     | `tanin-libadwaita`               |
| Portals          | gtk (dark mode) + gnome (screencast)| `xdg-desktop-portal-{gtk,gnome}` |

> **Compositor note:** earlier docs (`docs/distribution.md`, the `tanin-desktop`
> PKGBUILD) still say *Hyprland*. That is stale — the desktop is **niri-only**.
> Reconcile both against this manifest.

## Package model

```
official Arch repos (core/extra/multilib)  →  everything standard
[tanin] (own binary repo)                  →  our packages + rebuilt AUR deps
AUR                                        →  OPT-IN only (paru = optdepend)
```

**Our packages** (`[tanin]`):

| Package         | Role                                              | Status            |
|-----------------|---------------------------------------------------|-------------------|
| `taninux`       | tsettings + thub + TUI, helper, polkit, .desktop  | ready             |
| `tanin-greet`   | custom GTK4 greeter for greetd → `/etc/greetd/`   | ready (preview)   |
| `tanin-libadwaita` | Fuji libadwaita recolour, light + dark (pills) | ready (preview)   |
| `tanin-eww`     | eww bar/dock/panels + niri config → `/usr/share/tanin/skel/.config` | ready |
| `tanin-setup`   | seed `~/.config` + enable session target          | ready             |
| `tanin-desktop` | metapackage pulling the whole environment (niri)  | ready |

**Rebuilt AUR deps** — the desktop's hard requirements that aren't in the
official repos. We rebuild them into `[tanin]` so `tanin-desktop` can hard-depend
on them **without the AUR** (binary repos must never need it): `eww`, `tiramisu`,
`waypaper`. (`cliphist` + `cage` are in `extra` — pulled from official repos.)

The full Arch package set (compositor, portals, audio, connectivity, fonts, …)
is enumerated under `[packages.arch]` in `camel.toml` and is the seed for the
archiso `packages.x86_64`.

## Why these are first-class (not "just config")

Discovered from the live stack ([eww `launch.sh`](../../eww/launch.sh) + scripts):
the bar genuinely shells out to `eww · niri · jq · wpctl · cliphist · playerctl ·
bluetoothctl · nmcli · wl-clipboard · checkupdates · qalc · grim · flatpak ·
tiramisu`. These map to the package set above; the AUR ones (eww/tiramisu/
waypaper/cliphist) are exactly why `[tanin]` must carry rebuilt AUR packages.

## Delivery

1. **Foundation** — `taninux` builds (`makepkg -si`). ✅
2. **Meta + config** — ✅ `tanin-eww`, `tanin-desktop` (niri), `tanin-greet`, `tanin-libadwaita`,
   `tanin-setup`. Dotfiles ship to `/usr/share/tanin/skel`, never to `/home` at
   package time; `tanin-setup` seeds them on first run.
3. **`[tanin]` repo** — `repo-add -s` to build+sign the DB. Host as a
   Gitea/Forgejo Arch registry **or** a static dir behind `taninux.kgva.ch`.
4. **ISO** — ✅ scaffolded in `iso/` (archiso releng-base + overrides). Calamares `packages`
   module installs `tanin-desktop`; greetd + tanin-greet enabled; session target wired.

### Session / dark-mode fix
libadwaita apps read light/dark via `org.freedesktop.portal.Settings`, which
needs `graphical-session.target` active. `tanin-setup` installs
`tanin-session.target`; the shipped niri autostart must run:
```
dbus-update-activation-environment --systemd --all
systemctl --user start tanin-session.target
```

## Open questions (decide before a release tag)
- **Name:** keep TANINUX, or split `app = tanin` / `OS = <marketing name>`?
- **Repo hosting:** Gitea Arch registry vs static dir behind `taninux.kgva.ch`.
- **Signing:** move `[tanin]` to `SigLevel = Required` + distribute the key.
- **AUR check:** confirm which rebuilt-AUR entries are already in `extra`.
- **Blur/shadow:** niri `layer-rule` blur+shadow for eww layers (template is
  commented in the niri config).

## Related
- App repo & packaging: `~/projects/taninux` (this repo)
- Desktop shell: `~/projects/eww` — read its `HANDOVER.md` first
- Older prose draft (Hyprland-era): [`../docs/distribution.md`](../docs/distribution.md)
