SFG545 73a994ac53 feat(source): support cherry-picking commits for git sources
- add source.cherry_pick (and cherry-pick alias) to package spec parsing/serialization
- apply listed cherry-picks in order after git checkout
- reject cherry_pick on non-git sources with explicit error
- include cherry_pick in interactive spec TOML output
- add parsing/behavior tests and update Source test fixtures
2026-02-28 02:13:46 -06:00

depot

Depot is a source-based package manager designed for Linux. It focuses on reproducibility, atomic installations, and ease of cross-compilation.

Features

  • Source-based: Downloads, extracts, and builds packages from source.
  • Dependency Management: Automatically handles build-time and runtime dependencies.
  • Atomic Installation: Uses a transactional approach to ensure system consistency.
  • Multi-system Build Support: Built-in support for Autotools, CMake, Meson, Rust (Cargo), and custom build scripts.
  • Cross-Compilation: Easily build packages for different architectures using cross-toolchains.
  • Repository Management: Create and manage local package repositories.

Quick Start

Building Depot

cargo build --release

When installing via Meson (meson install), Depot now generates and installs:

  • Shell completions for Bash, Zsh, and Fish
  • A depot(1) man page

Installing a Package

To install a package from a spec file:

depot install packages/zlib.toml

To install from a pre-built package archive:

depot install zlib-1.2.11-1-x86_64.depot.pkg.tar.zst

Command Reference

  • install <SPEC_OR_ARCHIVE>: Build and install a package.
    • Resolves a full dependency plan first (binary repos and/or source specs), then executes in dependency order.
    • Use --yes for non-interactive confirmation/provider selection.
    • Use --dry-run to print the plan without performing work.
    • Binary package installs verify both checksums and detached minisign signatures (.sig).
  • remove <PACKAGE>: Remove an installed package.
  • build <SPEC>: Build a package and create an archive without installing.
    • Resolves and offers to install missing build dependencies before fetching/building.
    • Missing test dependencies automatically disable test execution for that build.
  • info <PACKAGE_OR_SPEC>: Show information about a package.
  • search <QUERY>: Search enabled source/binary repos by package name and provided features.
    • Use --files to search binary repo metadata file lists.
  • owns <PATH>: Show which installed package owns a path.
  • list: List all installed packages.
  • repo owns <PATH>: Query binary repo metadata for path ownership.
  • repo create [DIR]: Create a repository database from a directory of packages.
  • config: Show current configuration and overrides.

Package Specification

Packages are defined using TOML files. Here is a basic example:

[package]
name = "example"
version = "1.0.0"
description = "An example package"
homepage = "https://example.com"
license = "MIT"

[[source]]
url = "https://example.com/example-$version.tar.gz"
sha256 = "..."
extract_dir = "example-$version"

[build]
type = "autotools"
flags = { configure = ["--enable-feature"] }

[dependencies]
build = ["gcc", "make"]
runtime = ["libc"]
optional = ["bash-completion"]

Configuration

Depot can be configured via /etc/depot.d/ (or relative to the rootfs).

  • /etc/depot.d/build.toml: System-wide build overrides and flag appends.
  • /etc/depot.d/package.toml: Package-specific overrides.
  • /etc/depot.d/hooks/*.toml: Transaction hooks for install/update/remove pre/post phases.

Transaction Hooks

Hook files are TOML and use Starpack-like sections:

[hook]
name = "refresh-cache"

[when]
phase = "post"
operation = ["install", "update"]
packages = ["glibc", "linux*"]
paths = ["usr/lib/*"]
negation = ["usr/lib/debug/*"]

[exec]
command = "ldconfig"
needs_paths = true

needs_paths = true passes affected paths to the command via stdin (newline-separated).

S
Description
A Source-based package manager written in rust and FINALLY under something other than the GPL
Readme MIT 2.7 MiB
Languages
Rust 99.4%
Meson 0.4%
Shell 0.2%