channel.nix: Use filterSource to exclude unnecessary files from nixpkgs
Currently, if you try to build a NixOS config including channel.nix, e.g.: nix-build -I nixpkgs=. -I nixos-config=nixos/modules/installer/cd-dvd/installation-cd-minimal.nix nixos -A config.system.build.isoImage twice in a row, you end up with two different build results. This is caused by the 'result' symlink of the first build affecting the channel contents of the second build. If we use filterSource with a predicate that ignores the 'result' symlinks, the problem is gone. Do the same thing for VIM/Emacs swap/backup files to avoid even more 'spurious' rebuilds. Additionally, filter out the '.git' directory at the same time, as we 'rm -rf' it from the result anyway. This avoids a considerable amount of unnecessary file I/O copying and deleting the .git directory.
This commit is contained in:
parent
872a15a0ba
commit
60788745c9
1 changed files with 11 additions and 2 deletions
|
@ -6,6 +6,16 @@
|
|||
with lib;
|
||||
|
||||
let
|
||||
# Do not include these things:
|
||||
# - The '.git' directory
|
||||
# - Result symlinks from nix-build ('result', 'result-2', 'result-bin', ...)
|
||||
# - VIM/Emacs swap/backup files ('.swp', '.swo', '.foo.swp', 'foo~', ...)
|
||||
filterFn = path: type: let basename = baseNameOf (toString path); in
|
||||
if type == "directory" then basename != ".git"
|
||||
else if type == "symlink" then builtins.match "^result(|-.*)$" basename == null
|
||||
else builtins.match "^((|\..*)\.sw[a-z]|.*~)$" basename == null;
|
||||
|
||||
nixpkgs = builtins.filterSource filterFn pkgs.path;
|
||||
|
||||
# We need a copy of the Nix expressions for Nixpkgs and NixOS on the
|
||||
# CD. These are installed into the "nixos" channel of the root
|
||||
|
@ -15,12 +25,11 @@ let
|
|||
{ }
|
||||
''
|
||||
mkdir -p $out
|
||||
cp -prd ${pkgs.path} $out/nixos
|
||||
cp -prd ${nixpkgs} $out/nixos
|
||||
chmod -R u+w $out/nixos
|
||||
if [ ! -e $out/nixos/nixpkgs ]; then
|
||||
ln -s . $out/nixos/nixpkgs
|
||||
fi
|
||||
rm -rf $out/nixos/.git
|
||||
echo -n ${config.system.nixosVersionSuffix} > $out/nixos/.version-suffix
|
||||
'';
|
||||
|
||||
|
|
Loading…
Reference in a new issue