source/prog/lang-nix/nix-freeze-derivation
Dmitry Bogatov e6fa37167f treewide: Reformat Nix code with alejandra(1)
I might not necessary be fan of this particular style, but automatic
formatter is better than personal preferences.

 * config/flake/default.nix (func_name):
 * config/flake/nixos/configuration.nix (func_name):
 * config/flake/nixos/hardware-configuration.nix (func_name):
 * config/flake/universe/Documentation/default.nix (func_name):
 * config/flake/universe/Documentation/doc-m4.nix (func_name):
 * config/flake/universe/Documentation/doc-posix.nix (func_name):
 * config/flake/universe/Documentation/doc-terraform-aws.nix (func_name):
 * config/flake/universe/Documentation/doc-terraform.nix (func_name):
 * config/flake/universe/attach-shell/default.nix (func_name):
 * config/flake/universe/blurdate/default.nix (func_name):
 * config/flake/universe/default.nix (func_name):
 * config/flake/universe/dvtm/default.nix (func_name):
 * config/flake/universe/fasm-arch/default.nix (func_name):
 * config/flake/universe/firewall/default.nix (func_name):
 * config/flake/universe/git-merge-pr/default.nix (func_name):
 * config/flake/universe/git-recall/default.nix (func_name):
 * config/flake/universe/gmisub2atom/default.nix (func_name):
 * config/flake/universe/htop/default.nix (func_name):
 * config/flake/universe/mk-runscript/default.nix (func_name):
 * config/flake/universe/mutt/default.nix (func_name):
 * config/flake/universe/nix/default.nix (func_name):
 * config/flake/universe/nixfmt/default.nix (func_name):
 * config/flake/universe/psql/default.nix (func_name):
 * config/flake/universe/python3/default.nix (func_name):
 * config/flake/universe/rewrite-paths/default.nix (func_name):
 * config/flake/universe/scripts/default.nix (func_name):
 * config/flake/universe/selectors/default.nix (func_name):
 * config/flake/universe/srht-ui/default.nix (func_name):
 * config/flake/universe/surfraw/default.nix (func_name):
 * config/flake/universe/tempfile/default.nix (func_name):
 * config/flake/universe/w3m/default.nix (func_name):
 * default.nix (func_name):
 * prog/build.nix (func_name):
 * prog/lang-c/ask/shell.nix (func_name):
 * prog/lang-c/lodestar/shell.nix (func_name):
 * prog/lang-c/semantic-nl/default.nix (func_name):
 * prog/lang-dhall/dhall-json-schema/flake.nix (func_name):
 * prog/lang-dhall/dhall-openapi/flake.nix (func_name):
 * prog/lang-dhall/flake-dhall/build/default.nix (func_name):
 * prog/lang-dhall/flake-dhall/flake.nix (func_name):
 * prog/lang-dhall/flake-dhall/maint/release.nix (func_name):
 * prog/lang-dhall/flake-dhall/packages/Prelude/default.nix (func_name):
 * prog/lang-dhall/flake-dhall/packages/bhat/default.nix (func_name):
 * prog/lang-dhall/flake-dhall/packages/dada/default.nix (func_name):
 * prog/lang-dhall/flake-dhall/t/use-prelude/default.nix (func_name):
 * prog/lang-elisp/nix-environment/default.nix (func_name):
 * prog/lang-execline/srht-ui/default.nix (func_name):
 * prog/lang-execline/srht-ui/package.nix (func_name):
 * prog/lang-fasm/iloj/shell.nix (func_name):
 * prog/lang-haskell/bootstrap.v3/default.nix (func_name):
 * prog/lang-haskell/build-support/browse-documentation/default.nix (func_name):
 * prog/lang-haskell/build.nix (func_name):
 * prog/lang-haskell/faro/default.nix (func_name):
 * prog/lang-haskell/gdbm/default.nix (func_name):
 * prog/lang-haskell/hackage-git/checkout/hackage/default.nix (func_name):
 * prog/lang-haskell/linux-capabilities/default.nix (func_name):
 * prog/lang-haskell/mk-passwd/default.nix (func_name):
 * prog/lang-haskell/mk-passwd/flake.nix (func_name):
 * prog/lang-haskell/regions/regions.nix (func_name):
 * prog/lang-haskell/servant/default.nix (func_name):
 * prog/lang-haskell/servant/ghcjs.nix (func_name):
 * prog/lang-haskell/servant/nix/shell.nix (func_name):
 * prog/lang-nix/nix-freeze-derivation/default.nix (func_name):
 * prog/lang-nix/nix-freeze-derivation/test.nix (func_name):
 * prog/lang-shell/default.nix (func_name):
 * prog/lang-shell/savepage/default.nix (func_name):
 * prog/lang-shell/savepage/savepage.nix (func_name):
 * prog/lang-tex/a5/default.nix (func_name):
 * prog/lang-zig/libdyn/default.nix (func_name):
 * prog/lang-zig/shell.nix (func_name):
2024-03-15 21:15:31 -04:00
..
README.md Add 'prog/lang-nix/nix-freeze-derivation/' from commit 'c72b1964d4e379a43c73c2c03483ac4a0ceb5c84' 2023-07-23 16:33:18 -04:00
default.nix treewide: Reformat Nix code with alejandra(1) 2024-03-15 21:15:31 -04:00
test.nix treewide: Reformat Nix code with alejandra(1) 2024-03-15 21:15:31 -04:00

README.md

nix-freeze-derivation

This project provides Nix function that makes derivation, with every file in input derivation replaced with symlink to single file in Nix storage. For example, let's freeze derivation for nnn file manager:

let
  nixpkgs = import <nixpkgs> { };
  nix-freeze-derivation = nixpkgs.fetchgit {
    url = "https://git.sr.ht/~kaction/nix-freeze-derivation";
    rev = "...";
    sha256 = "...";
  };
  freeze = nixpkgs.callPackage nix-freeze-derivation {};
in {
  frozen-nnn = freeze nnn;
  inherit nnn;
}

Here is original derivation:

├── bin
│   └── nnn
└── share
    ├── bash-completion
    │   └── completions
    │       └── nnn.bash
    ├── fish
    │   └── vendor_completions.d
    │       └── nnn.fish
    ├── man
    │   └── man1
    │       └── nnn.1.gz
    └── zsh
        └── site-functions
            └── _nnn

And here is frozen derivation:

├── bin
│   └── nnn -> /nix/store/zshsj2hy2c8fiqh3vw08yq5lq8k4abx9-frozen-file
└── share
    ├── bash-completion
    │   └── completions
    │       └── nnn.bash -> /nix/store/8qf7q4j6aizbd6kgfp8dgwchf789v7dl-frozen-file
    ├── fish
    │   └── vendor_completions.d
    │       └── nnn.fish -> /nix/store/58rm78igazcsgcik4hwj4d2mkzn5h6sn-frozen-file
    ├── man
    │   └── man1
    │       └── nnn.1.gz -> /nix/store/7grf462gxkp1jifyw8gz41v30z8v3442-frozen-file
    └── zsh
        └── site-functions
            └── _nnn -> /nix/store/11k4jkycz9zj7s708m9jw41yyskr7aas-frozen-file

For almost all intentions and purposes frozen derivation is equivalent to original one, but copying it between machines only copies changed files. On other hand, freezing derivation takes some time, especially noticable with derivation that do not involve real compiling. For example, freezing Python package can take as much time as building package itself.

nix-freeze-derivation was inspired by nix-freeze-tree[^1], which is much faster and can freeze arbitrary path, not just derivation. Unfortunately, nix-freeze-tree does not work with derivations that has propagated build inputs[^2], that is why nix-freeze-derivation was created.

[^1] https://git.sr.ht/~jack/nix-freeze-tree [^2] https://todo.sr.ht/~jack/nix-freeze-tree/7