Skip to main content
Terra Packages uses a monorepo structure to organize all package manifests in a single repository. This approach simplifies package discovery, dependency management, and cross-package updates.

Monorepo overview

The Terra Packages monorepo contains package manifests organized by category in the anda/ directory. Each package lives in its own subdirectory with an anda.hcl manifest file that defines how to build the package.
The monorepo structure allows Terra to maintain over 1,000 packages in a single repository while keeping them organized and discoverable.

Directory categories

Packages are organized into the following top-level categories:

apps

Desktop applications like Discord, Anki, and Bitwarden

desktops

Desktop environments including Budgie, Hyprland, and GNOME components

devs

Development tools like Zed, Neovide, and Android Studio

fonts

Font packages for system and application use

games

Gaming applications and utilities

langs

Programming language runtimes including Rust, Go, Python, and Zig

lib

Shared libraries like DirectX-Headers, AppArmor, and Astal

misc

Miscellaneous packages that don’t fit other categories

multimedia

Multimedia packages including FFmpeg, Carla, and GPU Screen Recorder

stardust

Stardust XR packages (server, atmosphere, protostar, etc.)

system

System-level utilities and configuration packages

terra

Core Terra infrastructure (release, GPG keys, macros)

themes

Visual themes including Fluent, Orchis, and icon themes

tools

Command-line tools like yt-dlp, topgrade, and Arduino CLI

Package directory structure

Each package follows a consistent directory structure:
anda/
├─ apps/
│  ├─ discord/
│  │  ├─ anda.hcl         # Package manifest
│  │  └─ discord.spec     # RPM spec file
│  └─ anki/
│     ├─ anda.hcl
│     └─ anki.spec
├─ tools/
│  ├─ zola/
│  │  ├─ anda.hcl
│  │  └─ zola.spec
│  └─ topgrade/
│     ├─ anda.hcl
│     └─ rust-topgrade.spec
└─ lib/
   └─ DirectX-Headers/
      ├─ anda.hcl
      └─ DirectX-Headers.spec
Some packages may have additional files like patches, sources, or configuration files alongside the manifest and spec file.

Root configuration

The root anda.hcl file at the repository root defines global settings:
anda.hcl
config {
	strip_prefix = "anda/"
	strip_suffix = "/pkg"
}

project {}
This configuration:
  • Strips the anda/ prefix from package paths
  • Strips the /pkg suffix from project names
  • Defines the root project context

Package groups

The comps.xml file defines package groups for convenient installation:
comps.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
<comps>
  <group>
    <id>helium</id>
    <name>Helium Theme and libhelium</name>
    <description>The Application Framework and Theme for tauOS.</description>
    <default>false</default>
    <uservisible>true</uservisible>
    <packagelist>
      <packagereq type="default">libhelium</packagereq>
      <packagereq type="default">helium-gtk-theme</packagereq>
      <packagereq type="default">hydrogen-icon-theme</packagereq>
    </packagelist>
  </group>
  <group>
    <id>stardust-xr</id>
    <name>Stardust XR</name>
    <description>All Stardust XR packages needed to run the Stardust server</description>
    <default>false</default>
    <packagelist>
      <packagereq type="default">stardust-xr-server</packagereq>
      <packagereq type="default">stardust-xr-atmosphere</packagereq>
      <packagereq type="default">stardust-xr-protostar</packagereq>
      <!-- Additional packages omitted for brevity -->
    </packagelist>
  </group>
</comps>
Package groups allow users to install related packages together:
sudo dnf group install stardust-xr

Finding packages

You can explore the repository structure in several ways:
Navigate the Terra Packages repository on GitHub to explore packages by category.
Use pkgs.org to search for Terra packages with detailed metadata.
View package versions and updates on Repology.

Best practices

1

Follow the category structure

Place packages in the appropriate category directory based on their primary function.
2

Use consistent naming

Package directory names should match the primary package name defined in the spec file.
3

Keep manifests simple

Only include necessary configuration in anda.hcl files. Most packages need minimal configuration.
4

Document special cases

If a package requires unusual configuration or build steps, document them in the spec file or a README.

Next: Package manifests

Learn about the anda.hcl manifest format and configuration options

Build docs developers (and LLMs) love