GNU Guix provides several Scheme programming interfaces (APIs) to define, build, and query packages. The first interface allows users to write high-level package definitions. These definitions refer to familiar packaging concepts, such as the name and version of a package, its build system, and its dependencies. These definitions can then be turned into concrete build actions.
Build actions are performed by the Guix daemon, on behalf of users. In a standard setup, the daemon has write access to the store—the /gnu/store directory—whereas users do not. The recommended setup also has the daemon perform builds in chroots, under a specific build users, to minimize interference with the rest of the system.
Lower-level APIs are available to interact with the daemon and the store. To instruct the daemon to perform a build action, users actually provide it with a derivation. A derivation is a low-level representation of the build actions to be taken, and the environment in which they should occur—derivations are to package definitions what assembly is to C programs. The term “derivation” comes from the fact that build results derive from them.
This chapter describes all these APIs in turn, starting from high-level package definitions.
|• Package Modules:||Packages from the programmer’s viewpoint.|
|• Defining Packages:||Defining new packages.|
|• Build Systems:||Specifying how packages are built.|
|• The Store:||Manipulating the package store.|
|• Derivations:||Low-level interface to package derivations.|
|• The Store Monad:||Purely functional interface to the store.|
|• G-Expressions:||Manipulating build expressions.|
|• Invoking guix repl:||Fiddling with Guix interactively.|