156 lines
5 KiB
Markdown
156 lines
5 KiB
Markdown
---
|
|
title: Nixpkgs Tools
|
|
description: An overview of the various functions unrelated to building source code available in Nixpkgs.
|
|
published: true
|
|
date: 2024-06-29T14:50:41.540Z
|
|
tags: nix, nixpkgs
|
|
editor: markdown
|
|
dateCreated: 2024-06-22T16:41:59.925Z
|
|
---
|
|
|
|
# Introduction to Nixpkgs' tools
|
|
|
|
This page is an overview of various functionality included in Nixpkgs, that is not directly related to building packages from source code.
|
|
|
|
## Fetchers (`pkgs.fetch*`)
|
|
|
|
Fetchers such as `pkgs.fetchurl` allow to download content such as package sources, by specifying an expected hash of the content.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#chap-pkgs-fetchers)
|
|
|
|
## Wrappers (`pkgs.runCommand*`, `pkgs.write*`)
|
|
|
|
Functions such as `pkgs.runCommand` or `pkgs.writeShellScript` are use-case specific wrappers around `pkgs.stdenv` with simple arguments.
|
|
Not to be confused with `pkgs.writers`.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#chap-trivial-builders)
|
|
|
|
## Data Formats (`pkgs.writers`)
|
|
|
|
Data format or application focussed writers that transform Nix expressions into the respective format.
|
|
Not to be confused with `pkgs.write*`.
|
|
|
|
Resource:
|
|
|
|
- [Nixpkgs source](https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/writers)
|
|
|
|
## Config File Formats (`pkgs.formats`)
|
|
|
|
Produce various config file formats from nix expressions.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs source](https://github.com/NixOS/nixpkgs/blob/master/pkgs/pkgs-lib/formats.nix)
|
|
|
|
## Custom Build Environments (`pkgs.mkShell`)
|
|
|
|
Convenience wrapper around `mkDerivation` for usage with `nix-shell` / `nix develop`.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-mkShell)
|
|
|
|
## Creating Hooks (`pkgs.makeSetupHook`)
|
|
|
|
Helper to produce hooks for the `stdenv` build phases.
|
|
(For more info on hooks in general, see [Language/Framework Specific Builders in Nixpkgs#Hooks](./pkgs-languages-frameworks#hooks)).
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs.makeSetupHook)
|
|
|
|
## Test Utilities (`pkgs.testers`)
|
|
|
|
Derivation builders for testing various properties of other derivations.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#chap-testers)
|
|
- [nix.dev Tutorial: Integration testing with NixOS virtual machines](https://nix.dev/tutorials/nixos/integration-testing-using-virtual-machines)
|
|
|
|
## `fakeNss`
|
|
|
|
Including this *derivation* in, e.g. docker images or other environments without them, provides a simplistic set of user/group entries, to allow binaries expecting them to exist to work.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-fakeNss)
|
|
|
|
## Standard Filesystem Layout Wrapper (`buildFHSEnv`)
|
|
|
|
Wraps binaries that expect a [FHS](https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard)-compatible filesystem layout to run unpatched on NixOs.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-fhs-environments)
|
|
|
|
## Run AppImages (`pkgs.appimageTools`)
|
|
|
|
A set of functions to run or extract [AppImages](https://appimage.org/).
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://appimage.org/)
|
|
|
|
## Docker Images (`pkgs.dockerTools`)
|
|
|
|
A set of functions to create, modify, import or export docker images.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-dockerTools)
|
|
- [Xe Iaso's Talk: Nix is a better Docker image builder than Docker's image builder (Transcript & Recording)](https://xeiaso.net/talks/2024/nix-docker-build/)
|
|
- [nix.dev Tutorial: Building and running Docker images)](https://nix.dev/tutorials/nixos/building-and-running-docker-images.html)
|
|
- [Xe Iaso's Blog Post: Nix Flakes: Packages and How to Use Them](https://xeiaso.net/blog/nix-flakes-2-2022-02-27/)
|
|
|
|
|
|
## Build OCI Containers (`pkgs.ociTools`)
|
|
|
|
A set of function to create [OCI containers](https://github.com/opencontainers/runtime-spec/blob/v1.0.0/spec.md).
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-ociTools)
|
|
|
|
## Build Portable Services (`pkgs.portableService`)
|
|
|
|
A function to create [systemd's Portable Services](https://systemd.io/PORTABLE_SERVICES/).
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-portableService)
|
|
- [Xe Iaso's Blog Post: Nix Flakes: Packages and How to Use Them](https://xeiaso.net/blog/nix-flakes-2-2022-02-27/)
|
|
|
|
## Build Disk Images (`make-disk-image.nix`)
|
|
|
|
This function creates disk images in various formats (e.g. raw, QCOW2 (QEMU), VDI (VirtualBox), etc.).
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-make-disk-image)
|
|
|
|
## Run Derivations inside a VM (`pkgs.vmTools`)
|
|
|
|
Various tools to run derivations inside a Qemu/KVM backed virtual machine.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-vm-tools)
|
|
|
|
## Incremental Builds (`pkgs.checkpointBuildTools`)
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-checkpoint-build)
|
|
|
|
## Flat-file Binary Cache (`pkgs.mkBinaryCache`)
|
|
|
|
Create Nix flat-file binary caches.
|
|
|
|
Resources:
|
|
|
|
- [Nixpkgs manual](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-binary-cache) |