docs: document lookupFileArg syntax command refs

Change-Id: Ib6d68594a16132805ba5d97526e16f7b3633117e
This commit is contained in:
Qyriad 2024-05-21 15:37:08 -06:00
parent 5c6d4f903c
commit b07878bfe9
3 changed files with 57 additions and 10 deletions

View file

@ -0,0 +1,8 @@
<!-- File-ish argument syntax summary. This file gets included into pages like nix-build.md and nix-instantiate.md. -->
- A normal filesystem path, like `/home/meow/nixfiles/default.nix`
- Including a directory, like `/home/meow/nixfiles`, equivalent to above
- A single lookup path, like `<nixpkgs>` or `<nixos>`
- A URL to a tarball, like `https://github.com/NixOS/nixpkgs/archive/refs/heads/release-23.11.tar.gz`
- A flakeref, introduced by the prefix `flake:`, like `flake:git+https://git.lix.systems/lix-project/lix`
- A channel name, introduced by the prefix `channel:`, like `channel:nixpkgs-unstable`.
- This uses a hard-coded URL pattern and is *not* related to the subscribed channels managed by the [nix-channel](./nix-channel.md) command.

View file

@ -4,7 +4,7 @@
# Synopsis # Synopsis
`nix-build` [*paths…*] `nix-build` [*fileish…*]
[`--arg` *name* *value*] [`--arg` *name* *value*]
[`--argstr` *name* *value*] [`--argstr` *name* *value*]
[{`--attr` | `-A`} *attrPath*] [{`--attr` | `-A`} *attrPath*]
@ -20,19 +20,55 @@ For documentation on the latter, run `nix build --help` or see `man nix3-build`.
# Description # Description
The `nix-build` command builds the derivations described by the Nix The `nix-build` command builds the derivations described by the Nix
expressions in *paths*. If the build succeeds, it places a symlink to expressions in each *fileish*. If the build succeeds, it places a symlink to
the result in the current directory. The symlink is called `result`. If the result in the current directory. The symlink is called `result`. If
there are multiple Nix expressions, or the Nix expressions evaluate to there are multiple Nix expressions, or the Nix expressions evaluate to
multiple derivations, multiple sequentially numbered symlinks are multiple derivations, multiple sequentially numbered symlinks are
created (`result`, `result-2`, and so on). created (`result`, `result-2`, and so on).
If no *paths* are specified, then `nix-build` will use `default.nix` in If no *fileish* is specified, then `nix-build` will use `default.nix` in
the current directory, if it exists. the current directory, if it exists.
If an element of *paths* starts with `http://` or `https://`, it is ## Fileish Syntax
interpreted as the URL of a tarball that will be downloaded and unpacked
to a temporary location. The tarball must include a single top-level A given *fileish* may take one of a few different forms, the first being a simple filesystem path, e.g. `nix-build /tmp/some-file.nix`.
directory containing at least a file named `default.nix`. This has the same semantics as the [import builtin](../language/builtins.md#builtins-import), so specifying a directory is equivalent to specifying `default.nix` within that directory.
It may also be a [search path](./env-common.html#env-NIX_PATH) (also known as a lookup path) like `<nixpkgs>`, which is convenient to use with `--attr`/`-A`:
```console
$ nix-build '<nixpkgs>' -A firefox
```
(Note the quotation marks around `<nixpkgs>`, which will be necessary in most Unix shells.)
If a *fileish* starts with `http://` or `https://`, it is interpreted as the URL of a tarball which will be fetched and unpacked.
Lix will then `import` the unpacked directory, so these tarballs must include at least single top-level directory with a file called `default.nix`
For example, you could build from a specific version of Nixpkgs with something like:
```console
$ nix-build "https://github.com/NixOS/nixpkgs/archive/refs/heads/release-23.11.tar.gz" -A firefox
```
If a path starts with `flake:`, the rest of the argument is interpreted as a [flakeref](./new-cli/nix3-flake.html#flake-references) (see `nix flake --help` or `man nix3-flake`), which requires the "flakes" experimental feature to be enabled.
Lix will fetch the flake, and then `import` its unpacked directory, so the flake must include a file called `default.nix`.
For example, the flake analogue to the above `nix-build` commands are:
```console
$ nix-build flake:nixpkgs -A firefox
$ nix-build flake:github:NixOS/nixpkgs/release-23.11 -A firefox
```
Finally, for legacy reasons, if a path starts with `channel:`, the rest of the argument is interpreted as the name of a channel to fetch from `https://nixos.org/channels/$CHANNEL_NAME/nixexprs.tar.xz`.
This is a **hard coded URL** pattern and is *not* related the subscribed channels managed by the [nix-channel](./nix-channel.md) command.
> **Note**: any of the special syntaxes may always be disambiguated by prefixing the path.
> For example: a file in the current directory literally called `<nixpkgs>` can be addressed as `./<nixpkgs>`, to escape the special interpretation.
In summary, a path argument may be one of:
{{#include ./fileish-summary.md}}
## Notes
`nix-build` is essentially a wrapper around `nix-build` is essentially a wrapper around
[`nix-instantiate`](nix-instantiate.md) (to translate a high-level Nix [`nix-instantiate`](nix-instantiate.md) (to translate a high-level Nix

View file

@ -11,7 +11,7 @@
[{`--attr`| `-A`} *attrPath*] [{`--attr`| `-A`} *attrPath*]
[`--add-root` *path*] [`--add-root` *path*]
[`--expr` | `-E`] [`--expr` | `-E`]
*files…* *fileish…*
`nix-instantiate` `--find-file` *files…* `nix-instantiate` `--find-file` *files…*
@ -25,8 +25,11 @@ of the resulting store derivations are printed on standard output.
[store derivation]: ../glossary.md#gloss-store-derivation [store derivation]: ../glossary.md#gloss-store-derivation
If *files* is the character `-`, then a Nix expression will be read from If *fileish* is the character `-`, then a Nix expression will be read from standard input.
standard input. Otherwise, each *fileish* is interpreted the same as with [nix-build](./nix-build.md#Path_Syntax).
See that section for complete details (`nix-build --help`), but in summary, a path argument may be one of:
{{#include ./fileish-summary.md}}
# Options # Options