LevitateOS

Documentation

Install Helpers

Functions for installing files to PREFIX. Use shell commands with explicit paths for most installations.

Section

Overview

The recommended pattern for installing files is to use shell() with the install command, which provides fine-grained control over permissions and destinations:

Command
rhai
fn install(ctx) {
    let src = ctx.extract_dir;

    // Install binary with executable permissions
    shell("install -Dm755 " + join_path(src, "myapp") + " " + join_path(PREFIX, "bin/myapp"));

    // Install man page with read permissions
    shell("install -Dm644 " + join_path(src, "myapp.1") + " " + join_path(PREFIX, "share/man/man1/myapp.1"));

    // Install config file
    shell("install -Dm644 " + join_path(src, "config.toml") + " " + join_path(PREFIX, "etc/myapp/config.toml"));

    ctx
}

Section

install Command Reference

The install command (from coreutils) is the standard way to install files:

Flag Description
-D Create parent directories as needed
-m MODE Set permissions (e.g., 755, 644)
-d Create directories only
Command
rhai
// Common permission patterns
shell("install -Dm755 src dest");  // Executable (rwxr-xr-x)
shell("install -Dm644 src dest");  // Read-only (rw-r--r--)
shell("install -Dm600 src dest");  // Private (rw-------)

// Create directory
shell("install -dm755 " + join_path(PREFIX, "share/myapp"));

Section

make install Pattern

For packages with Makefiles, use make install with DESTDIR:

Command
rhai
fn install(ctx) {
    shell_in(ctx.source_dir, "make install DESTDIR=" + PREFIX);
    ctx
}

Section

CMake install Pattern

For CMake projects:

Command
rhai
fn install(ctx) {
    shell_in(ctx.source_dir, "cmake --install build --prefix " + PREFIX);
    ctx
}

Section

Copying Multiple Files

For copying multiple files or directories:

Command
rhai
fn install(ctx) {
    let src = ctx.extract_dir;

    // Copy directory tree
    shell("cp -r " + join_path(src, "share/icons") + " " + join_path(PREFIX, "share/"));

    // Copy with glob (via shell)
    shell("cp " + join_path(src, "lib/*.so*") + " " + join_path(PREFIX, "lib/"));

    ctx
}