blob: 9ed4a87fb8c54777a641d3646d851b36d0a2cc9a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
R""(
**Note:** this command's interface is based heavily around [*installables*](./nix.md#installables), which you may want to read about first (`nix --help`).
# Examples
* Run the default app from the `blender-bin` flake:
```console
# nix run blender-bin
```
* Run a non-default app from the `blender-bin` flake:
```console
# nix run blender-bin#blender_2_83
```
Tip: you can find apps provided by this flake by running `nix flake
show blender-bin`.
* Run `vim` from the `nixpkgs` flake:
```console
# nix run nixpkgs#vim
```
Note that `vim` (as of the time of writing of this page) is not an
app but a package. Thus, Lix runs the eponymous file from the `vim`
package.
* Run `vim` with arguments:
```console
# nix run nixpkgs#vim -- --help
```
# Description
`nix run` builds and runs [*installable*](./nix.md#installables), which must evaluate to an
*app* or a regular Nix derivation.
If *installable* evaluates to an *app* (see below), it executes the
program specified by the app definition.
If *installable* evaluates to a derivation, it will try to execute the
program `<out>/bin/<name>`, where *out* is the primary output store
path of the derivation, and *name* is the first of the following that
exists:
* The `meta.mainProgram` attribute of the derivation.
* The `pname` attribute of the derivation.
* The name part of the value of the `name` attribute of the derivation.
For instance, if `name` is set to `hello-1.10`, `nix run` will run
`$out/bin/hello`.
# Flake output attributes
If no flake output attribute is given, `nix run` tries the following
flake output attributes:
* `apps.<system>.default`
* `packages.<system>.default`
If an attribute *name* is given, `nix run` tries the following flake
output attributes:
* `apps.<system>.<name>`
* `packages.<system>.<name>`
* `legacyPackages.<system>.<name>`
# Apps
An app is specified by a flake output attribute named
`apps.<system>.<name>`. It looks like this:
```nix
apps.x86_64-linux.blender_2_79 = {
type = "app";
program = "${self.packages.x86_64-linux.blender_2_79}/bin/blender";
};
```
The only supported attributes are:
* `type` (required): Must be set to `app`.
* `program` (required): The full path of the executable to run. It
must reside in the Nix store.
)""
|