Skip to main content

Shell Completion

secretctl provides shell completion for bash, zsh, fish, and PowerShell.

Quick Install

Bash

# Add to ~/.bashrc
echo 'source <(secretctl completion bash)' >> ~/.bashrc
source ~/.bashrc

Zsh

# Add to ~/.zshrc
echo 'source <(secretctl completion zsh)' >> ~/.zshrc
source ~/.zshrc

Fish

secretctl completion fish > ~/.config/fish/completions/secretctl.fish

PowerShell

# Add to your PowerShell profile
Add-Content $PROFILE 'secretctl completion powershell | Out-String | Invoke-Expression'

What Gets Completed

Shell completion helps with:

  • Commands: secretctl <TAB> shows available commands
  • Subcommands: secretctl completion <TAB> shows shell options
  • Flags: secretctl get --<TAB> shows available flags
  • Secret keys: With dynamic completion enabled (see below)

Dynamic Completion

By default, secretctl doesn't complete secret keys for security reasons. To enable dynamic secret key completion:

export SECRETCTL_COMPLETION_ENABLED=1

With dynamic completion enabled:

secretctl get <TAB>
# Shows available secret keys

secretctl delete <TAB>
# Shows available secret keys
Security Note

Dynamic completion requires the vault to be unlocked. If the vault is locked, key completion won't be available until you unlock it.

Enable Permanently

Add to your shell config:

# Bash (~/.bashrc) or Zsh (~/.zshrc)
export SECRETCTL_COMPLETION_ENABLED=1
source <(secretctl completion bash) # or zsh
# Fish (~/.config/fish/config.fish)
set -gx SECRETCTL_COMPLETION_ENABLED 1

Install Scripts

secretctl includes helper scripts for installing completion:

Bash

# The install script adds completion to ~/.bash_completion.d/
./scripts/install-completion-bash.sh

Zsh

# The install script adds completion to ~/.zsh/completions/
./scripts/install-completion-zsh.zsh

Fish

# The install script adds completion to ~/.config/fish/completions/
./scripts/install-completion-fish.fish

Verifying Installation

After installing, open a new terminal and test:

# Type secretctl and press Tab
secretctl <TAB>
# Should show: audit backup completion delete export generate get init list lock run set unlock

# Type a subcommand and press Tab for flags
secretctl get --<TAB>
# Should show available flags like --json, --silent

Troubleshooting

Completion Not Working

  1. Open a new terminal - Completion scripts are loaded at shell startup
  2. Check the source command - Ensure source <(secretctl completion ...) is in your shell config
  3. Verify secretctl is in PATH - Run which secretctl to confirm

Dynamic Completion Not Working

  1. Check the environment variable - echo $SECRETCTL_COMPLETION_ENABLED should show 1
  2. Unlock the vault - Dynamic completion requires an unlocked vault
  3. Check vault status - Run secretctl list to verify access

Zsh Compinit Issues

If you get "command not found: compdef", add before the completion source:

autoload -Uz compinit && compinit
source <(secretctl completion zsh)

Advanced: Custom Completion

The completion system uses Cobra's built-in completion. You can extend it by:

  1. Forking secretctl
  2. Adding ValidArgsFunction to commands in cmd/secretctl/
  3. Rebuilding with go build

Next Steps