diff --git a/doc/manual/nix-channel.xml b/doc/manual/nix-channel.xml index 22d8900d8f..68dcfd45d4 100644 --- a/doc/manual/nix-channel.xml +++ b/doc/manual/nix-channel.xml @@ -22,7 +22,7 @@ url name url - + 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 8f0fbbaa50..6883ffd18d 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; }