Skip to main content

Overview

The Redox OS build system is highly configurable through TOML configuration files and environment variables. This guide covers all configuration options and how to customize your build.

Configuration Methods

There are three ways to configure the build system:

.config File

Set build-time variables and options

TOML Configs

Define system packages and files

Environment

Override settings at runtime

The .config File

The .config file in the repository root controls build system behavior.

Basic Configuration

Create .config in the repository root:
.config

Build Optimization

.config
For first-time builds, use PREFIX_BINARY=1 and REPO_BINARY=1 to reduce build time from hours to minutes.

Debug Options

.config

Filesystem Configuration

.config

Podman-Specific Options

.config

Advanced Options

.config

TOML Configuration Files

Configuration File Location

Configuration files are stored in the config/ directory:

TOML File Structure

Configuration files use TOML format with these main sections:
Each package can have options:

Example: base.toml

Let’s examine the base configuration that all others include:
config/base.toml

Example: desktop.toml

A simple desktop configuration:
config/desktop.toml

Example: minimal.toml

config/minimal.toml

Creating Custom Configurations

Step-by-Step Guide

1

Create Configuration File

Create a new TOML file in the config/ directory:
2

Include Base Configuration

Start by including the base configuration:
config/mycustom.toml
3

Add Packages

Define packages to include:
4

Configure Files

Add custom files or configuration:
5

Build with Custom Config

Use your configuration:

Custom Package Configuration

Packages can have additional options:

Architecture-Specific Configuration

You can create architecture-specific configurations:
The build system automatically selects the most specific configuration:
  1. config/$(ARCH)/$(BOARD)/$(CONFIG_NAME).toml
  2. config/$(ARCH)/$(CONFIG_NAME).toml
  3. config/$(CONFIG_NAME).toml

Environment Variables

You can override configuration at build time:

Common Configuration Scenarios

Fast Build for Testing

.config

Development Build

.config

Full Desktop from Source

.config

CI/CD Build

.config

Encrypted Filesystem

.config

Configuration Reference

Build System Variables

string
default:"x86_64"
Target architecture: x86_64, aarch64, i586, or riscv64gc
string
default:""
Board/device type for ARM (e.g., raspi3bp)
string
default:"desktop"
Configuration profile name
string
default:"auto"
Path to TOML configuration file (auto-detected)
integer
default:"auto"
Filesystem size in MB (calculated from config if not set)
integer
default:"1"
Use Podman for building (1=yes, 0=no)
integer
default:"1"
Use pre-built toolchain binaries
integer
default:"0"
Use pre-built package binaries
integer
default:"0"
Enable debug builds (keep symbols, no stripping)
integer
default:"0"
Continue building even if packages fail
integer
default:"0"
Do not fetch sources (offline mode)
integer
default:"0"
Build appstream metadata
integer
default:"auto"
Enable sccache for Rust builds (auto-enabled in containers)

QEMU Variables

string
default:"auto"
Enable KVM acceleration (yes, no, or auto)
string
default:"vga"
GPU type: vga, virtio, ramfb, none
string
default:"auto"
Audio device: ac97, hda, no
string
default:"auto"
Disk interface: ata, nvme, sdcard
integer
default:"2048"
QEMU memory size in MB
integer
default:"4"
Number of CPU cores for QEMU

Best Practices

Always include base.toml or another complete configuration as your starting point.
Only specify packages and files that differ from your base configuration.
When creating custom configs, add packages gradually and test each addition.
Add comments to your configuration files explaining custom settings.
Keep your .config and custom TOML files in version control (but not in the main Redox repo).

Next Steps

Recipe System

Learn how packages are built

Podman Build

Set up Podman build environment