Bash completion for the Nix command line tools
edit
command_
nixos-option
now offers completion, thanks to @Ma27nix-prefetch-url
now offers full completion (eg. taking -A
)--attr
would exclude completions of further --attr
flagsThe quest for an awesome completion system continues.
The main bulk of changes apply to both ZSH and Bash, with explicit notes otherwise.
Attribute path completion now takes -I
and --include
into account. This makes completion work correctly when doing things like this:
nix-shell -I nixpkgs=. --packages <tab>
When the completion system executes any nix code it will first resolve all URLS in the NIX_PATH
, and in -I
input, to a local store path if present. This protects against triggering an intrusive download while completing. channel:
syntax is correctly translated to its https://
form and resolved to a cache too.
Argument names are now offered as completions using builtins.functionArgs
. Names already supplied on the command line is excluded from completions.
Attribute path completion will also take --arg and --argstr into account, which means things like this work:
nix-instantiate --eval default.nix --argstr bar foo -A <tab>
If the content of default.nix
is {bar}: {foo = bar;}
then completing will result in foo
.
Attribute path completion now works for --expr
input, including argument name completion.
Note, URLs in the expression body is not yet resolved to a local cache so might trigger a download. This should ideally be fixed.
In ZSH --expr
now behaves properly, allowing completion of options after it has been entered (bash already did the correct thing here).
.nix
file will now only offer up those and directories, reducing clutter--file
will now complete more than once, the last one being used to generate attribute matches. In ZSH this allows aliasing nix-env
to nix-env -f '<nixpkgs>'
while still getting further --file
completion which can be used to override the default.--file
completion together with main operation completion by default. This is a compromise between discover-ability of main operations and the want to specify common options quickly.--add-root
will now off up /nix/var/nix/gcroots/
by default, if --indirect
is specified it will give normal directory completion.--help
and --version
completion to many commands--filter-system
will complete possible systems.--find-file
will no longer offer misleading file completionAnd a bunch of other small changes and fixes.
New features:
nix-build channel:nixos-17.09 -A ...
. This is somewhat untested on 1.12 as nix on my machine refuses to download any repos due to lack of signatures.--include|-I
completion for all compatible commands. (only nix
takes the includes into account when completing attribute paths though)ls
and similar commandsnix-env --option
: now offers up optionsBug fixes:
nix-store: --delete
can takes file argumentsnix-shell --packages
should now correctly offer up options after -p
have been specified--install
and others will now offer up files when entering a nix type path (ie. ./
, ~/
, /
)Plus some other small fixes.
Minor fixes:
nix-build -A nixUn
completion.nix-build some/path -A
, the script didn't take realpath of some/path
Some bug fixes and improvements:
'<nixpkgs>
as file input-A
only worked for -i
/--install
, now works for all main operationsAnd a few other minor improvements.