nixos-container: Add bash completion for "nixos-container" command

Changed files
+39
nixos
+6
nixos/modules/virtualisation/containers.nix
···
perl = "${pkgs.perl}/bin/perl -I${pkgs.perlPackages.FileSlurp}/lib/perl5/site_perl";
su = "${pkgs.shadow.su}/bin/su";
inherit (pkgs) utillinux;
};
# The container's init script, a small wrapper around the regular
···
perl = "${pkgs.perl}/bin/perl -I${pkgs.perlPackages.FileSlurp}/lib/perl5/site_perl";
su = "${pkgs.shadow.su}/bin/su";
inherit (pkgs) utillinux;
+
+
postInstall = ''
+
t=$out/etc/bash_completion.d
+
mkdir -p $t
+
cp ${./nixos-container-completion.sh} $t/nixos-container
+
'';
};
# The container's init script, a small wrapper around the regular
+33
nixos/modules/virtualisation/nixos-container-completion.sh
···
···
+
#!/usr/bin/env bash
+
+
_nixos-container() {
+
local cur prev opts
+
COMPREPLY=()
+
cur="${COMP_WORDS[COMP_CWORD]}"
+
prev="${COMP_WORDS[COMP_CWORD-1]}"
+
opts="list create destroy start stop status update login root-login run show-ip show-host-key"
+
startstop_opts=$(nixos-container list)
+
update_opts="--config"
+
+
if [[ "$prev" == "nixos-container" ]]
+
then
+
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+
return 0
+
fi
+
+
if [[ $(echo "$opts" | grep "$prev") ]]
+
then
+
if [[ "$prev" == "start" || "$prev" == "stop" ]]
+
then
+
COMPREPLY=( $(compgen -W "${startstop_opts}" -- ${cur}) )
+
return 0
+
elif [[ "$prev" == "update" ]]
+
then
+
COMPREPLY=( $(compgen -W "${update_opts}" -- ${cur}) )
+
return 0
+
fi
+
fi
+
}
+
+
complete -F _nixos-container nixos-container
+