31 lines
		
	
	
		
			914 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			914 B
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ stdenv, squashfsTools, perl, pathsFromGraph
 | 
						|
 | 
						|
, # The root directory of the squashfs filesystem is filled with the
 | 
						|
  # closures of the Nix store paths listed here.
 | 
						|
  storeContents ? []
 | 
						|
}:
 | 
						|
 | 
						|
stdenv.mkDerivation {
 | 
						|
  name = "squashfs.img";
 | 
						|
 | 
						|
  buildInputs = [perl squashfsTools];
 | 
						|
 | 
						|
  # For obtaining the closure of `storeContents'.
 | 
						|
  exportReferencesGraph =
 | 
						|
    map (x: [("closure-" + baseNameOf x) x]) storeContents;
 | 
						|
 | 
						|
  buildCommand =
 | 
						|
    ''
 | 
						|
      # Add the closures of the top-level store objects.
 | 
						|
      storePaths=$(perl ${pathsFromGraph} closure-*)
 | 
						|
 | 
						|
      # Also include a manifest of the closures in a format suitable
 | 
						|
      # for nix-store --load-db.
 | 
						|
      printRegistration=1 perl ${pathsFromGraph} closure-* > nix-path-registration
 | 
						|
 | 
						|
      # Generate the squashfs image.
 | 
						|
      mksquashfs nix-path-registration $storePaths $out \
 | 
						|
        -keep-as-directory -all-root -b 1048576 -comp xz -Xdict-size 100%
 | 
						|
    '';
 | 
						|
}
 |