:PROPERTIES: :ID: 93b1f780-66ce-41c8-848d-ff8054d96a32 :END: #+title: nix-flake Nix flakes provide a standard way to write Nix expressions (and therefore packages) whose dependencies are version-pinned in a lock file, improving reproducibility of [[id:04b1edf2-9532-4060-8b2f-f37199cbfd92][nix]] installations. The experimental nix [[id:d71414fc-349c-4763-a703-9f7092fc90d6][command-line]] interface (CLI) lets you evaluate or build an expression contained within a flake, install a derivation from a flake into a User Environment, and operate on flake outputs much like the original nix-{build,eval,...} commands would. A flake refers to a file-system tree whose root directory contains the Nix file specification called flake.nix. An installation may contain any number of flakes, independent of each other or even call each other. The contents of flake.nix file follow the uniform naming schema for expressing [[id:6d025430-76e3-4b42-898d-8d88bad10afa][packages]] and dependencies on Nix. Flakes use the standard Nix [[id:bd5b34ba-aa98-4808-b97b-2376aa7b8866][protocols]], including the URL-like syntax for specifying repositories and package names. To simplify the long URL syntax with shorter names, flakes uses a registry of symbolic identifiers. Flakes also allow for locking references and versions that can then be easily queried and updated programmatically. Nix command-line interface accepts flake references for expressions that build, run, and deploy packages.