forked from lix-project/lix
* A garbage collector for installed packages. nix-collect-garbage
doesn't actually delete any packages, it just prints their descriptor hashes. So we can do nix info $(nix-collect-garbage) to print out the ids of the packages that would be deleted, and nix delpkg $(nix-collect-garbage) to actually delete them.
This commit is contained in:
parent
30a6122f80
commit
f7526febe4
|
@ -1,4 +1,4 @@
|
||||||
bin_SCRIPTS = nix-generate-regscript nix-switch
|
bin_SCRIPTS = nix-generate-regscript nix-switch nix-collect-garbage
|
||||||
|
|
||||||
install-exec-local:
|
install-exec-local:
|
||||||
$(INSTALL) -d $(sysconfdir)/profile.d
|
$(INSTALL) -d $(sysconfdir)/profile.d
|
||||||
|
|
22
scripts/nix-collect-garbage
Executable file
22
scripts/nix-collect-garbage
Executable file
|
@ -0,0 +1,22 @@
|
||||||
|
#! /usr/bin/perl -w
|
||||||
|
|
||||||
|
my $prefix = $ENV{"NIX"} || "/nix"; # !!! use prefix
|
||||||
|
my $linkdir = "$prefix/var/nix/links";
|
||||||
|
|
||||||
|
my %alive;
|
||||||
|
|
||||||
|
open HASHES, "nix closure \$(cat $linkdir/*.hash) |";
|
||||||
|
while (<HASHES>) {
|
||||||
|
chomp;
|
||||||
|
$alive{$_} = 1;
|
||||||
|
}
|
||||||
|
close HASHES;
|
||||||
|
|
||||||
|
open HASHES, "nix listinst |";
|
||||||
|
while (<HASHES>) {
|
||||||
|
chomp;
|
||||||
|
if (!$alive{$_}) {
|
||||||
|
print "$_\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close HASHES;
|
Loading…
Reference in a new issue