|
|
| Line 281: |
Line 281: |
| When output <code>apps.<system>.myapp</code> is not defined, <code>nix run myapp</code> runs <code><packages or legacyPackages.<system>.myapp>/bin/<myapp.meta.mainProgram or myapp.pname or myapp.name (the non-version part)></code> | | When output <code>apps.<system>.myapp</code> is not defined, <code>nix run myapp</code> runs <code><packages or legacyPackages.<system>.myapp>/bin/<myapp.meta.mainProgram or myapp.pname or myapp.name (the non-version part)></code> |
|
| |
|
| == Using flakes with stable Nix == <!--T:50--> | | == Flake support in projects without flakes == <!--T:50--> |
|
| |
|
| <!--T:51--> | | <!--T:51--> |
| There exists the [https://github.com/edolstra/flake-compat flake-compat] library that you can use to shim <code>default.nix</code> and <code>shell.nix</code> files. It will download the inputs of the flake, pass them to the flake’s <code>outputs</code> function and return an attribute set containing <code>defaultNix</code> and <code>shellNix</code> attributes. The attributes will contain the output attribute set with an extra <code>default</code> attribute pointing to current platform’s <code>defaultPackage</code> (resp. <code>devShell</code> for <code>shellNix</code>).
| | The [https://github.com/edolstra/flake-compat flake-compat] library provides a compatibility layer that allows projects using traditional <code>default.nix</code> and <code>shell.nix</code> files to operate with flakes. For more details and usage examples, see the [[Flake Compat]] page. |
| | |
| <!--T:52-->
| |
| Place the following into <code>default.nix</code> (for <code>shell.nix</code>, replace <code>defaultNix</code> with <code>shellNix</code>) to use the shim:
| |
| | |
| </translate>
| |
| <syntaxHighlight lang=nix>
| |
| (import (
| |
| fetchTarball {
| |
| url = "https://github.com/edolstra/flake-compat/archive/12c64ca55c1014cdc1b16ed5a804aa8576601ff2.tar.gz";
| |
| sha256 = "0jm6nzb83wa6ai17ly9fzpqc40wg1viib8klq8lby54agpl213w5"; }
| |
| ) {
| |
| src = ./.;
| |
| }).defaultNix
| |
| </syntaxHighlight>
| |
| <translate>
| |
| | |
| <!--T:54-->
| |
| You can also use the lockfile to make updating the hashes easier using <code>nix flake lock --update-input flake-compat</code>. Add the following to your <code>flake.nix</code>:
| |
| | |
| </translate>
| |
| <syntaxHighlight lang=nix>
| |
| inputs.flake-compat = {
| |
| url = "github:edolstra/flake-compat";
| |
| flake = false;
| |
| };
| |
| </syntaxHighlight>
| |
| <translate>
| |
| | |
| <!--T:56-->
| |
| and add <code>flake-compat</code> to the arguments of <code>outputs</code> attribute. Then you will be able to use <code>default.nix</code> like the following:
| |
| | |
| </translate>
| |
| <syntaxhighlight lang="nix">
| |
| (import (
| |
| let
| |
| lock = builtins.fromJSON (builtins.readFile ./flake.lock);
| |
| nodeName = lock.nodes.root.inputs.flake-compat;
| |
| in
| |
| fetchTarball {
| |
| url =
| |
| lock.nodes.${nodeName}.locked.url
| |
| or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.${nodeName}.locked.rev}.tar.gz";
| |
| sha256 = lock.nodes.${nodeName}.locked.narHash;
| |
| }
| |
| ) { src = ./.; }).defaultNix
| |
| </syntaxhighlight>
| |
| <translate>
| |
|
| |
|
| == Accessing flakes from Nix expressions == <!--T:58--> | | == Accessing flakes from Nix expressions == <!--T:58--> |