diff --git a/doc/manual/nix-channel.xml b/doc/manual/nix-channel.xml
index 22d8900d8..68dcfd45d 100644
--- a/doc/manual/nix-channel.xml
+++ b/doc/manual/nix-channel.xml
@@ -22,7 +22,7 @@
urlnameurl
-
+ names
@@ -67,14 +67,15 @@ condition="manual">See also
-
+ [names…]Downloads the Nix expressions of all subscribed
- channels, makes them the default for nix-env
- operations (by symlinking them from the directory
- ~/.nix-defexpr), and performs a
- nix-pull on the manifests of all channels to
- make pre-built binaries available.
+ channels (or only those included in
+ names if specified), makes them the
+ default for nix-env operations (by symlinking
+ them from the directory ~/.nix-defexpr), and
+ performs a nix-pull on the manifests of all
+ channels to make pre-built binaries available.
diff --git a/scripts/nix-channel.in b/scripts/nix-channel.in
index 8f0fbbaa5..6883ffd18 100755
--- a/scripts/nix-channel.in
+++ b/scripts/nix-channel.in
@@ -76,6 +76,8 @@ sub removeChannel {
# Fetch Nix expressions and pull manifests from the subscribed
# channels.
sub update {
+ my @channelNames = @_;
+
readChannels;
# Create the manifests directory if it doesn't exist.
@@ -87,6 +89,8 @@ sub update {
# Download each channel.
my $exprs = "";
foreach my $name (keys %channels) {
+ next if scalar @channelNames > 0 && ! grep { $_ eq $name } @{channelNames};
+
my $url = $channels{$name};
my $origUrl = "$url/MANIFEST";
@@ -141,7 +145,7 @@ Usage:
nix-channel --add URL [CHANNEL-NAME]
nix-channel --remove CHANNEL-NAME
nix-channel --list
- nix-channel --update
+ nix-channel --update [CHANNEL-NAME...]
EOF
exit 1;
}
@@ -182,8 +186,7 @@ while (scalar @ARGV) {
}
elsif ($arg eq "--update") {
- usageError if scalar @ARGV != 0;
- update;
+ update(@ARGV);
last;
}