/**
 * Pantry-based package manager for provisioned servers.
 *
 * Every server dependency ts-cloud installs — PHP, nginx, Composer, the
 * databases/caches/search engines, and the language runtimes — comes from the
 * pantry registry (`registry.pantry.dev`, Hetzner-backed object storage) via
 * the `pantry` CLI instead of apt/ppa/curl installers. Long-running services
 * are managed by pantry's own systemd integration, which runs in **system
 * scope** when provisioning as root (units under `/etc/systemd/system`, started
 * at boot) — see `PANTRY_SERVICE_SCOPE` in pantry's service controller.
 *
 * This module is the single chokepoint for "install package X" / "run service
 * Y" so the Hetzner and AWS bootstrap paths share one implementation. It only
 * emits shell command lines (the convention used across `drivers/shared`); the
 * caller splices them into the Ubuntu cloud-init / SSM bootstrap.
 */
/**
 * Pantry package domains for the dependencies ts-cloud provisions. Domains
 * (not aliases) are used because aliases aren't guaranteed in every released
 * pantry binary. The recipes live in pantry's `src/packages/*` (e.g. `php.net`
 * is a source build carrying the full Laravel extension matrix).
 */
export declare const PANTRY_PACKAGES: {
    readonly php: 'php.net';
    readonly nginx: 'nginx.org';
    readonly composer: 'getcomposer.org';
    readonly mysql: 'mysql.com';
    readonly mariadb: 'mariadb.com/server';
    readonly postgres: 'postgresql.org';
    readonly redis: 'redis.io';
    readonly memcached: 'memcached.org';
    readonly meilisearch: 'meilisearch.com';
    readonly git: 'git-scm.com';
    readonly certbot: 'certbot.eff.org';
    readonly bun: 'bun.sh';
    readonly node: 'nodejs.org';
    readonly deno: 'deno.land';
};
/** Logical package key (`'php'`, `'nginx'`, …). */
export type PantryPackageKey = keyof typeof PANTRY_PACKAGES;
/** A fully-qualified pantry package domain (`'php.net'`, `'nginx.org'`, …). */
export type PantryPackageDomain = (typeof PANTRY_PACKAGES)[PantryPackageKey];
/** A package to install: a known domain, optionally pinned with `@<version>`. */
export type PantrySpec = PantryPackageDomain | `${PantryPackageDomain}@${string}`;
/** Where the `pantry` binary itself is installed (on PATH for all later steps). */
export declare const PANTRY_INSTALL_DIR = "/usr/local/bin";
/**
 * Server-side pantry project root. `pantry install` is project-scoped — it
 * writes packages under `<root>/pantry/` and exposes their binaries via
 * `<root>/pantry/.bin`. Provisioning installs everything into this one fixed
 * project so the env (and thus PATH) is stable across deploy/systemd steps.
 */
export declare const PANTRY_PROJECT_DIR = "/opt/pantry";
export interface PantryBootstrapOptions {
    /** Pin the pantry CLI version (e.g. `'0.9.39'`). @default latest release */
    version?: string;
}
/**
 * Bootstrap the `pantry` CLI on a fresh server (idempotent — skips when already
 * present). Installs to {@link PANTRY_INSTALL_DIR} and selects system-scope
 * service management so `pantry enable/start` provisions boot-time systemd
 * units rather than the per-user units that can't run headlessly.
 */
export declare function buildPantryBootstrapScript(options?: PantryBootstrapOptions): string[];
/**
 * Shell snippet that puts the project's pantry-installed binaries (php,
 * composer, …) on PATH for a deploy step. `pantry env` is project-scoped, so it
 * is evaluated from {@link PANTRY_PROJECT_DIR}. Returns a single line to
 * `eval`/source before invoking those binaries.
 */
export declare function pantryEnvActivation(): string;
/**
 * Install one or more pantry packages in a single resolve pass. Accepts known
 * domains (optionally `domain@version`). Returns `[]` for an empty list.
 */
export declare function buildPantryInstallScript(specs: readonly PantrySpec[]): string[];
/**
 * Enable (start on boot) and start pantry-managed services now. Service names
 * are pantry's own (`'php-fpm'`, `'nginx'`, `'mysql'`, `'redis'`, …), not the
 * package domains.
 */
export declare function buildPantryServiceScript(services: readonly string[]): string[];
/** Resolve a logical key (or an explicit domain) to its package domain. */
export declare function pantryDomain(pkg: PantryPackageKey | PantryPackageDomain): PantryPackageDomain;
