Files
taninux/distro/camel.toml
T
karim 857bd955c5 Add [tanin] repo build script; build 5 own packages + DB
- 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>
2026-06-18 22:16:43 +02:00

203 lines
11 KiB
TOML

# camel.toml — distribution manifest (single source of truth)
# =============================================================================
# Codename "camel" is the STABLE internal handle. The project/OS name is still
# provisional — it may stay "taninux", shrink to "tanin", or the shipped OS may
# get a different marketing name later. Everything that must not break when the
# name changes keys off `codename`, not `name`.
#
# This file is the canonical spec. The PKGBUILDs under ../packaging, the archiso
# profile, and docs/distribution.md should be derived from / reconciled against
# it. Last reconciled: 2026-06-17 (compositor switched Hyprland -> niri).
# =============================================================================
[distribution]
codename = "camel"
name = "taninux" # PROVISIONAL (taninux | tanin | TBD)
display_name = "TANINUX" # PROVISIONAL
tagline = "A curated Arch desktop — niri + eww, managed by TANINUX."
base = "arch" # not a fork; Arch + own [tanin] repo
arch = ["x86_64"]
channel = "rolling"
license = "GPL-3.0-or-later"
homepage = "https://taninux.kgva.ch"
maintainer = "Karim <karim@gabrielevarano.ch>"
# Visual identity — the "Fuji" palette. Mirrored into eww (accent.sh) and the
# greeter/GTK theme. Single source for accent so DM, bar and apps agree.
[identity]
theme = "dark, monochrome, libadwaita, soft short shadows, rounded"
accent = "#a39ec4" # Fuji violet
bg = "#0f0f0f"
fg = "#f0f0f0"
ui_font = "Inter" # Medium
icon_font = "Iosevka Nerd Font" # Material Design Icons (nf-md-*)
icon_theme = "Papirus" # dock app icons
# -----------------------------------------------------------------------------
# Package sources. Standard software comes from the official Arch repos; only
# our own packages (and AUR deps we are forced to rebuild) live in [tanin].
# -----------------------------------------------------------------------------
[sources.arch]
repos = ["core", "extra", "multilib"]
[sources.tanin]
repo_name = "tanin"
server = "https://taninux.kgva.ch/$arch"
code_host = "https://git.openbureau.ch/karim/taninux" # PKGBUILD source clones
siglevel = "Optional TrustAll" # TODO: tighten to "Required" + ship the key
db_build = "repo-add -s tanin.db.tar.zst *.pkg.tar.zst"
[sources.aur]
# Policy: AUR is OPT-IN. Nothing in the desktop may HARD-depend on the AUR
# (binary repos must not need it). paru is an optdepend only. Any AUR package
# the desktop genuinely needs is rebuilt into [tanin] (see packages.rebuilt_aur).
policy = "opt-in"
helper = "paru" # optdepend, never a hard depend
# -----------------------------------------------------------------------------
# The desktop stack — what the OS actually boots into.
# -----------------------------------------------------------------------------
[stack]
display_manager = "greetd" # greeter = tanin-greet (own GTK4 greeter)
greeter = "tanin-greet" # custom; mirrors the eww topbar
compositor = "niri" # Wayland, niri-only (Hyprland/Sway removed)
shell_bar = "tanin-eww" # eww bar + dock + panels + spotlight
launcher = "Spotlight (eww)"
notifications = "tiramisu (headless) + eww UI" # replaces mako
terminal = "foot"
wallpaper = "waypaper"
session_target = "tanin-session.target" # pulls graphical-session.target for portals
apps = ["tsettings", "thub", "taninux (TUI)"]
gtk_theme = "tanin-libadwaita" # Fuji recolour, light + dark
portals = ["xdg-desktop-portal-gtk", "xdg-desktop-portal-gnome"]
# gtk portal -> org.freedesktop.portal.Settings (dark mode for libadwaita apps);
# gnome portal -> screencast (niri's recommended screencast backend).
# =============================================================================
# OWN PACKAGES — built from our repo, served from [tanin].
# =============================================================================
[[packages.own]]
name = "taninux"
desc = "GTK System Settings (tsettings) + Software Hub (thub) + TUI"
provides = ["tsettings", "thub", "taninux"]
pkgbuild = "packaging/taninux/PKGBUILD" # exists
status = "ready"
[[packages.own]]
name = "tanin-eww"
desc = "eww bar/dock/panels/spotlight + niri config -> /usr/share/tanin/skel/.config"
upstream = "~/projects/eww (local build; EWW_SRC override). Publish: own eww git repo."
pkgbuild = "packaging/tanin-eww/PKGBUILD" # exists
status = "ready (built from local eww; niri config vendored + path-fixed)"
note = "ships ~/.config/{eww,niri}; rewrites $HOME/projects/eww -> $HOME/.config/eww; niri spawn-at-startup uses sh -c so $HOME expands"
[[packages.own]]
name = "tanin-greet"
desc = "custom GTK4 greeter for greetd — topbar + wallpaper + corner session"
pkgbuild = "packaging/tanin-greet/PKGBUILD" # exists
status = "ready (previewed)"
note = "replaces ReGreet — its fixed layout couldn't do topbar/corner-session"
[[packages.own]]
name = "tanin-libadwaita"
desc = "Fuji recolour for GTK4/libadwaita + GTK3 — light + dark, pill controls"
pkgbuild = "packaging/tanin-libadwaita/PKGBUILD" # exists
status = "ready (live-verified GTK4; GTK3 partial) + ships tanin-libadwaita.service (user, watch)"
note = "STATIC defaults + CLI (tanin-libadwaita {dark|light|auto|watch}) for greeter/first-boot. LIVE theming is driven by the taninux app: gui/style.py write_global_theme() regenerates ~/.config/gtk-{4.0,3.0}/gtk(.css)|libadwaita.css from the Appearance settings (dynamic accent + light/dark, surfaces #0f0f0f/#f0f0f0, pills). GTK4/libadwaita = full exact Fuji; GTK3/adw-gtk3 = light/dark + pills only (GTK3 @define-color is parse-time, so adw-gtk3's accent/surfaces can't be overridden — exact-Fuji GTK3 would need a standalone GTK3 theme)."
[[packages.own]]
name = "tanin-setup"
desc = "first-run: seed ~/.config (eww+niri) + session target + apply theme + enable follower"
pkgbuild = "packaging/tanin-setup/PKGBUILD" # exists
status = "ready (wires theme follower)"
note = "seed_configs + install tanin-session.target + tanin-libadwaita auto + systemctl --user enable --now tanin-libadwaita.service. niri config (tanin-eww) autostarts dbus-update-activation-environment + tanin-session.target."
[[packages.own]]
name = "tanin-desktop"
desc = "metapackage — depends-pulls the whole environment (own + Arch)"
pkgbuild = "packaging/tanin-desktop/PKGBUILD" # exists
type = "meta"
status = "ready (niri stack; all own deps now exist)"
# =============================================================================
# REBUILT AUR DEPS — hard requirements of the desktop that are NOT in the
# official repos. Rebuilt into [tanin] so tanin-desktop can hard-depend on them
# without pulling the AUR. Verify each repo membership before publishing
# (some of these may already be in `extra`; if so, drop them from here).
# =============================================================================
[[packages.rebuilt_aur]]
name = "eww"
reason = "desktop bar/dock/panels — not in official repos"
verify = "extra? AUR has `eww` and `eww-git`"
[[packages.rebuilt_aur]]
name = "tiramisu"
reason = "headless notification daemon feeding the eww UI"
verify = "AUR"
[[packages.rebuilt_aur]]
name = "waypaper"
reason = "wallpaper setter (niri autostart: waypaper --restore)"
verify = "AUR"
# cliphist + cage are in `extra` (verified) — NOT rebuilt, pulled from official repos.
# =============================================================================
# ARCH PACKAGE SET — hard depends of tanin-desktop, pulled from official repos.
# Grouped by role. This is the buildable seed for archiso packages.x86_64.
# =============================================================================
[packages.arch]
compositor = ["niri"]
greeter = ["greetd", "cage"] # cage hosts our own tanin-greet (GTK4); no regreet
portals = ["xdg-desktop-portal", "xdg-desktop-portal-gtk", "xdg-desktop-portal-gnome"]
toolkit = ["gtk4", "libadwaita", "gtk3", "python", "python-gobject"]
terminal = ["foot"]
cli = ["jq", "wl-clipboard", "xdg-utils", "libqalculate"] # libqalculate -> qalc
connectivity = ["networkmanager", "bluez", "bluez-utils"]
audio = ["pipewire", "pipewire-pulse", "wireplumber"] # wpctl, pactl
hardware = ["brightnessctl"]
media = ["playerctl"]
screenshot = ["grim", "slurp"]
packages = ["flatpak", "pacman-contrib"] # checkupdates, paccache
security = ["polkit"]
fonts = ["inter-font", "ttf-iosevka-nerd"] # verify nerd-font pkg name
icons = ["papirus-icon-theme", "adwaita-icon-theme"]
[packages.optional]
# optdepends — installed on demand, never required to boot.
"paru" = "AUR support in the Software Hub (opt-in)"
"wlsunset" = "night light"
"cups" = "printer management"
"timeshift" = "system snapshots/backups"
"waybar" = "fallback bar if eww is missing (launch.sh falls back to it)"
# =============================================================================
# DELIVERY / BUILD — how camel becomes an installable ISO.
# =============================================================================
[delivery]
model = "own binary repo [tanin] + official Arch repos (EndeavourOS/CachyOS style)"
iso_tool = "archiso"
installer = "calamares"
calamares_target = "tanin-desktop" # the netinstall/packages module installs just this
dotfiles = "tanin-setup seeds ~/.config from /usr/share/tanin/skel (never writes /home at pkg time)"
[delivery.hosts]
code = "git.openbureau.ch/karim/taninux" # source for makepkg
project = "taninux.kgva.ch" # homepage + [tanin] pacman Server
# pacman.conf snippet shipped to users:
# [tanin]
# SigLevel = Optional TrustAll
# Server = https://taninux.kgva.ch/$arch
# =============================================================================
# OPEN QUESTIONS — decide before tagging a release.
# =============================================================================
[open_questions]
name = "Final project/OS name: keep TANINUX, or split app=tanin / OS=<marketing name>?"
repo_hosting = "Gitea/Forgejo Arch registry vs static dir behind taninux.kgva.ch"
signing = "Move [tanin] SigLevel to Required + distribute the packager key"
aur_repo_check = "DONE — cliphist+cage in extra; only eww/tiramisu/waypaper need AUR rebuild into [tanin]"
repo_build = "packaging/build-tanin-repo.sh builds the 5 own pkgs + DB at ~/projects/tanin-repo. Still need: taninux (sudo pacman -S python-build python-installer python-hatchling), the 3 AUR rebuilds (paru/makepkg + sudo), optional GPG signing key, then host."
blur_shadow = "niri layer-rule blur/shadow for eww layers (template commented in niri config)"