nixos-rebuild: Locally own the nixos-rebuild completion
This commit is contained in:
parent
61d5040ef1
commit
a5e30e71b6
2 changed files with 168 additions and 0 deletions
165
pkgs/os-specific/linux/nixos-rebuild/_nixos-rebuild
Normal file
165
pkgs/os-specific/linux/nixos-rebuild/_nixos-rebuild
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# We're faking a `nix build` command-line to re-use Nix's own completion
|
||||||
|
# for the few options passed through to Nix.
|
||||||
|
_nixos-rebuild_pretend-nix() {
|
||||||
|
COMP_LINE="nix build ${COMP_LINE}"
|
||||||
|
# number of prepended chars
|
||||||
|
(( COMP_POINT = COMP_POINT + 10))
|
||||||
|
|
||||||
|
COMP_WORDS=(
|
||||||
|
nix build
|
||||||
|
"${COMP_WORDS[@]}"
|
||||||
|
)
|
||||||
|
# Add the amount of prepended words
|
||||||
|
(( COMP_CWORD = COMP_CWORD + 2))
|
||||||
|
_complete_nix "nix"
|
||||||
|
}
|
||||||
|
|
||||||
|
_nixos-rebuild() {
|
||||||
|
local curr="$2"
|
||||||
|
local prev="$3"
|
||||||
|
local subcommandGiven=0
|
||||||
|
local word
|
||||||
|
local subcommand
|
||||||
|
|
||||||
|
__load_completion nix
|
||||||
|
|
||||||
|
# Arrays are re-ordered by the completion, so it's fine to sort them in logical chunks
|
||||||
|
local all_args=(
|
||||||
|
--verbose -v
|
||||||
|
|
||||||
|
# nixos-rebuild options
|
||||||
|
--fast
|
||||||
|
--no-build-nix
|
||||||
|
--profile-name -p # name
|
||||||
|
--rollback
|
||||||
|
--specialisation -c # name
|
||||||
|
--use-remote-sudo
|
||||||
|
--build-host # host
|
||||||
|
--target-host # host
|
||||||
|
# Used with list-generations
|
||||||
|
--json
|
||||||
|
|
||||||
|
# generation switching options
|
||||||
|
--install-bootloader
|
||||||
|
|
||||||
|
# nix-channel options
|
||||||
|
--upgrade
|
||||||
|
--upgrade-all
|
||||||
|
|
||||||
|
# flakes options
|
||||||
|
--commit-lock-file
|
||||||
|
--flake # flake-uri
|
||||||
|
--override-input # input-name flake-uri
|
||||||
|
--recreate-lock-file
|
||||||
|
--update-input
|
||||||
|
--no-flake
|
||||||
|
--no-registries
|
||||||
|
--no-update-lock-file
|
||||||
|
--no-write-lock-file
|
||||||
|
|
||||||
|
# Nix-copy options
|
||||||
|
--use-substitutes --substitute-on-destination -s
|
||||||
|
|
||||||
|
# Nix options
|
||||||
|
--option
|
||||||
|
--impure
|
||||||
|
--builders # builder-spec
|
||||||
|
--show-trace
|
||||||
|
--keep-failed -K
|
||||||
|
--keep-going -k
|
||||||
|
--max-jobs -j # number
|
||||||
|
--log-format # format
|
||||||
|
-I # NIX_PATH
|
||||||
|
)
|
||||||
|
|
||||||
|
local all_subcommands=(
|
||||||
|
boot
|
||||||
|
build
|
||||||
|
build-vm
|
||||||
|
build-vm-with-bootloader
|
||||||
|
dry-activate
|
||||||
|
dry-build
|
||||||
|
edit
|
||||||
|
list-generations
|
||||||
|
switch
|
||||||
|
test
|
||||||
|
)
|
||||||
|
|
||||||
|
# Suggest arguments that can be consumed under some conditions only
|
||||||
|
for word in "${COMP_WORDS[@]}"; do
|
||||||
|
for subcommand in "${all_subcommands[@]}"; do
|
||||||
|
if [[ "$word" == "$subcommand" ]]; then
|
||||||
|
subcommandGiven=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
# Fake out a way to complete the second arg to some options
|
||||||
|
case "${COMP_WORDS[COMP_CWORD-2]}" in
|
||||||
|
"--override-input")
|
||||||
|
prev="--override-input_2"
|
||||||
|
;;
|
||||||
|
"--option")
|
||||||
|
prev="--option_2"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$prev" in
|
||||||
|
--max-jobs|-j)
|
||||||
|
COMPREPLY=( )
|
||||||
|
;;
|
||||||
|
|
||||||
|
--profile-name|-p)
|
||||||
|
if [[ "$curr" == "" ]]; then
|
||||||
|
COMPREPLY=( /nix/var/nix/profiles/* )
|
||||||
|
else
|
||||||
|
COMPREPLY=( "$curr"* )
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
--build-host|--target-host|-t|-h)
|
||||||
|
_known_hosts_real "$curr"
|
||||||
|
;;
|
||||||
|
|
||||||
|
--specialisation|-c)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
|
||||||
|
-I)
|
||||||
|
_nixos-rebuild_pretend-nix
|
||||||
|
;;
|
||||||
|
--builders)
|
||||||
|
_nixos-rebuild_pretend-nix
|
||||||
|
;;
|
||||||
|
--flake)
|
||||||
|
_nixos-rebuild_pretend-nix
|
||||||
|
;;
|
||||||
|
--override-input)
|
||||||
|
_nixos-rebuild_pretend-nix
|
||||||
|
;;
|
||||||
|
--override-input_2)
|
||||||
|
_nixos-rebuild_pretend-nix
|
||||||
|
;;
|
||||||
|
--log-format)
|
||||||
|
_nixos-rebuild_pretend-nix
|
||||||
|
;;
|
||||||
|
--option)
|
||||||
|
_nixos-rebuild_pretend-nix
|
||||||
|
;;
|
||||||
|
--option_2)
|
||||||
|
_nixos-rebuild_pretend-nix
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
if [[ "$curr" == -* ]] || (( subcommandGiven )); then
|
||||||
|
COMPREPLY=( $(compgen -W "${all_args[*]}" -- "$2") )
|
||||||
|
else
|
||||||
|
COMPREPLY=( $(compgen -W "${all_subcommands[*]}" -- "$2") )
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -F _nixos-rebuild nixos-rebuild
|
|
@ -28,6 +28,9 @@ substituteAll {
|
||||||
];
|
];
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
installManPage ${./nixos-rebuild.8}
|
installManPage ${./nixos-rebuild.8}
|
||||||
|
|
||||||
|
installShellCompletion \
|
||||||
|
--bash ${./_nixos-rebuild}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# run some a simple installer tests to make sure nixos-rebuild still works for them
|
# run some a simple installer tests to make sure nixos-rebuild still works for them
|
||||||
|
|
Loading…
Reference in a new issue