Files
kevinveenbirkenbachandClaude Opus 5 93b47a5bee refactor(packages): install every package through the registry
Replaces the raw package modules at 76 call sites with package_install, moves
each role's distribution mapping into its own meta/packages.yml, and turns the
inventory PACKAGES variable from source-keyed literal names into a list of
declared package ids. The lint that forbids the raw modules is enabled here,
because the migration burns it down from 76 offenders to zero.

Removes sys-aur, sys-aur-install and sys-package. The AUR build user, the
passwordless pacman rule and the inventory-driven install are part of the plan
the action plugin executes, so the roles no longer carry them.

Declaring the mappings surfaced breakage the raw modules had hidden: on Debian
the `which` binary comes from debianutils, jrnl is in no Debian or Ubuntu
suite, chromium-browser is absent from Debian stable, JDK 11 is unobtainable on
RedHat, wireguard had no RedHat branch at all, qbittorrent was built from the
AUR although Arch ships it in extra, and desk-docker installed a Docker variant
that conflicts with the one sys-svc-container installs.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-27 23:25:50 +02:00
..

Infinito.Nexus Inventories

This directory contains all deployable bundles for Infinito.Nexus.

An inventory in Infinito.Nexus is not just a host definition. It represents a complete, declarative infrastructure bundle.

Each inventory defines:

  • Which roles are activated
  • Which host(s) are targeted
  • Metadata required by the Infinito Deployer (title, description, logo, etc.)

Deploy target is derived from the folder structure.


Directory Structure

Inventories are grouped by deploy target:

inventories/ server/ workstation/

Each bundle must live inside one of those directories:

inventories/server// inventories/workstation//

The folder name represents the bundle identifier.


Required Files

Each bundle directory must contain:

  • inventory.yml

Optional but recommended:

  • README.md (bundle-specific documentation)

No additional bundle manifest files are required.


Inventory Structure (Bundle-Conform)

Each inventory must follow this structure:

  • all.vars.infinito.bundle metadata
  • one default host
  • role groups under children

Example:

all:
  vars:
    infinito:
      bundle:
        title: "School Basic"
        description: >
          Basic bundle for a small school setup.
        logo:
          class: "fa-solid fa-graduation-cap"
        tags:
          - education
          - collaboration
        categories:
          - Community
          - Collaboration

  hosts:
    server:

  children:
    web-app-nextcloud:
      hosts:
        server:

    svc-prx-openresty:
      hosts:
        server:

Rules

1. Deploy Target

Deploy target is derived from the parent folder:

  • inventories/server → server bundle
  • inventories/workstation → workstation bundle

Do not define deploy_target inside the inventory file.


2. Host Definition

Each bundle must define exactly one default host:

server

No additional configuration is required.

Connection settings may be added later if needed.


3. Role Activation

Role names must be defined as group names under children.

Group name must match the role directory name exactly.

Each role group must contain the default host.


4. Bundle Metadata

Metadata must be defined under:

all.vars.infinito.bundle

Required fields:

  • title
  • description
  • logo.class
  • tags
  • categories

The logo must use a valid Font Awesome class string, e.g.:

fa-solid fa-graduation-cap


5. No Role-Specific Configuration

Bundles act as skeleton definitions.

They must not contain application-specific configuration values.

Role configuration belongs inside roles or runtime overlays.


Philosophy

An inventory in Infinito.Nexus is:

  • a bundle definition
  • a role activation map
  • a deployable unit

No additional bundle file format is required.

The inventory itself is the bundle.


Deploying a Bundle

The single make compose-deploy target resolves one or more bundles into the role groups declared under all.children and feeds them into the standard local deploy flow when bundles=<csv> is set. The resolver is utils.inventory.bundle_apps; it deduplicates across bundles and preserves declaration order.

Command Path Behavior
make compose-deploy bundles="<a>[,<b>]" reinstall Brings the stack down/up, purges entities, then deploys every role group from the listed bundles. Set full_cycle=true to also run the async update pass.
make compose-deploy mode=update bundles="<a>[,<b>]" update No down/up, no entity purge. Requires a prior initialize/reinstall run that materialized the inventory.

Example:

make compose-deploy bundles="education-suite,startup-essentials" full_cycle=true

See docs/contributing/tools/make.md and docs/contributing/actions/testing.md for the full deploy-target reference.