diff --git a/pkgs/tools/security/sops/bash_autocomplete b/pkgs/tools/security/sops/bash_autocomplete new file mode 100644 index 000000000000..ab3da32a326f --- /dev/null +++ b/pkgs/tools/security/sops/bash_autocomplete @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# based on https://github.com/urfave/cli/blob/v2.3.0/autocomplete/bash_autocomplete + +_cli_bash_autocomplete() { + if [[ "${COMP_WORDS[0]}" != "source" ]]; then + local cur opts + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + if [[ "$cur" == "-"* ]]; then + opts=$("${COMP_WORDS[@]:0:$COMP_CWORD}" "${cur}" --generate-bash-completion) + else + opts=$("${COMP_WORDS[@]:0:$COMP_CWORD}" --generate-bash-completion) + fi + IFS=$'\n' read -d '' -ra COMPREPLY < <(compgen -W "${opts}" -- "${cur}") + return 0 + fi +} + +complete -o bashdefault -o default -o nospace -F _cli_bash_autocomplete sops diff --git a/pkgs/tools/security/sops/default.nix b/pkgs/tools/security/sops/default.nix index 4e892c13af3f..05fa66c2d7a2 100644 --- a/pkgs/tools/security/sops/default.nix +++ b/pkgs/tools/security/sops/default.nix @@ -1,4 +1,10 @@ -{ lib, buildGoModule, fetchFromGitHub, nix-update-script }: +{ + lib, + buildGoModule, + fetchFromGitHub, + installShellFiles, + nix-update-script, +}: buildGoModule rec { pname = "sops"; @@ -19,6 +25,13 @@ buildGoModule rec { passthru.updateScript = nix-update-script { }; + nativeBuildInputs = [ installShellFiles ]; + + postInstall = '' + installShellCompletion --cmd sops --bash ${./bash_autocomplete} + installShellCompletion --cmd sops --zsh ${./zsh_autocomplete} + ''; + meta = with lib; { homepage = "https://getsops.io/"; description = "Simple and flexible tool for managing secrets"; diff --git a/pkgs/tools/security/sops/zsh_autocomplete b/pkgs/tools/security/sops/zsh_autocomplete new file mode 100644 index 000000000000..1569af633dc8 --- /dev/null +++ b/pkgs/tools/security/sops/zsh_autocomplete @@ -0,0 +1,25 @@ +#compdef sops + +## based on https://github.com/urfave/cli/blob/v2.3.0/autocomplete/zsh_autocomplete + +_cli_zsh_autocomplete() { + + local -a opts + local cur + cur=${words[-1]} + if [[ "$cur" == "-"* ]]; then + opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} ${cur} --generate-bash-completion)}") + else + opts=("${(@f)$(_CLI_ZSH_AUTOCOMPLETE_HACK=1 ${words[@]:0:#words[@]-1} --generate-bash-completion)}") + fi + + if [[ "${opts[1]}" != "" ]]; then + _describe 'values' opts + else + _files + fi + + return +} + +compdef _cli_zsh_autocomplete sops