The 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.
ZSH will tell you when it can't find a local cache of any URL.
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).
- Most arguments which expects a
.nixfile will now only offer up those and directories, reducing clutter --filewill now complete more than once, the last one being used to generate attribute matches. In ZSH this allows aliasingnix-envtonix-env -f '<nixpkgs>'while still getting further--filecompletion which can be used to override the default.- nix-env now offer
--filecompletion 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-rootwill now off up/nix/var/nix/gcroots/by default, if--indirectis specified it will give normal directory completion.- Add missing
--helpand--versioncompletion to many commands - nix-env:
--filter-systemwill complete possible systems. - nix-instantiate:
--find-filewill no longer offer misleading file completion
And a bunch of other small changes and fixes.
Minor fixes:
- Fix
nix-build -A nixUncompletion. - Fix
nix-build some/path -A, the script didn't take realpath ofsome/path
Some bug fixes and improvements:
- All commands should now complete attribute paths when supplying
'<nixpkgs>as file input - nix-env:
-Aonly worked for-i/--install, now works for all main operations - nix-env will now only complete main operations until one has been supplied
- nix-env --switch-generation will now complete generations
- nix-channel: completes channel names properly now
And a few other minor improvements.