Compare commits

...

5 Commits

Author SHA1 Message Date
James Neill aabf95d2eb
Merge 5b5286106e into 5c17bcd21f 2025-01-09 21:51:58 +01:00
Bhanu 5c17bcd21f
feat(web-search): add perplexity.ai (#12815) 2025-01-08 09:34:00 +01:00
James Neill 5b5286106e
style(1password): ensure function definitions meet style guide
- have both leading `function` declarations and parenthesis at the end
2024-12-26 03:26:32 +00:00
James Neill f47ea3f003
docs(1password): outline new injection automation and add example 2024-12-26 03:18:04 +00:00
James Neill 3be91a697b
feat(1password): automatically inject secrets for specific commands using op run
- Add functionality to wrap specified commands (e.g., terraform, env) with
- Automatically inject secrets from environment variables into subprocesses
- Implement toggle activation with Ctrl+O keybinding
2024-12-26 03:09:48 +00:00
4 changed files with 79 additions and 0 deletions

View File

@ -13,3 +13,55 @@ op completion zsh >| "$ZSH_CACHE_DIR/completions/_op" &|
# Load opswd function
autoload -Uz opswd
# List of commands to inject secrets into before running
OP_RUN_WRAPPER_CMDS=()
OP_RUN_WRAPPER_ORIGINAL_PROMPT=$PROMPT
OP_RUN_WRAPPER_SYMBOL="🔑"
# Currently we take a simple approach and set aliases to override each command, this could be done with functions instead
# Also ignoring the option to specify specific environment files with the `--env-file` flag
function set_op_aliases() {
for cmd in "${OP_RUN_WRAPPER_CMDS[@]}"; do
alias "$cmd"="op run -- $cmd"
done
}
function unset_op_aliases() {
for cmd in "${OP_RUN_WRAPPER_CMDS[@]}"; do
unalias "$cmd" 2>/dev/null
done
}
function set_prompt() {
OP_RUN_WRAPPER_ORIGINAL_PROMPT=$PROMPT
export PROMPT="(${OP_RUN_WRAPPER_SYMBOL}) ${PROMPT}"
}
function unset_prompt() {
export PROMPT="${OP_RUN_WRAPPER_ORIGINAL_PROMPT}"
}
function toggle_secrets_injection() {
if [[ -z "${OP_RUN_WRAPPER_CMDS[*]}" ]]; then
echo "Error: OP_RUN_WRAPPER_CMDS is empty, please update the list of commands which require secrets injection."
zle reset-prompt
return 1
fi
if [[ -z "$OP_RUN_WRAPPER_ACTIVE" ]]; then
export OP_RUN_WRAPPER_ACTIVE=true
set_op_aliases
set_prompt
else
unset OP_RUN_WRAPPER_ACTIVE
unset_op_aliases
unset_prompt
fi
zle reset-prompt
}
zle -N toggle_secrets_injection
bindkey '^O' toggle_secrets_injection

View File

@ -33,6 +33,30 @@ service you want to get.
> - [Get started with 1Password CLI 2: Sign in](https://developer.1password.com/docs/cli/get-started#sign-in)
> - [Sign in to your 1Password account manually](https://developer.1password.com/docs/cli/sign-in-manually)
## Secrets Injection
This plugin wraps specific commands (e.g., terraform, env) with the op run command from 1Password, automatically injecting any relevant secrets already defined in your environment variables. This ensures seamless integration with 1Password to manage sensitive information without needing .env files.
### Key Features
- Automatic 1Password Integration: The plugin automatically loads secrets from your 1Password vaults into the environment for supported commands.
- Toggle Activation: Easily enable or disable the wrapper with a keybinding (Ctrl+O by default).
- Command-Specific Behavior: Each supported command (e.g., terraform, env) is wrapped with `op run`, and any secrets defined in your environment are automatically passed into the subprocess.
### Basic Setup
```zsh
# setup any commands you wish to wrap
➜ ~ export OP_RUN_WRAPPER_CMDS=(env)
# define a secret and it's path inside your 1Password vault
➜ ~ export AWS_ACCESS_KEY_ID="op://vault/secret/atrribute"
# enabled injection mode with Ctrl+O, call wrapped command `env` and see result
(🔑) ➜ ~ env | grep AWS_ACCESS_KEY_ID
AWS_ACCESS_KEY_ID=<concealed by 1Password>
```
For more information on the `op run` command, check out the official [1Password CLI documentation](https://developer.1password.com/docs/cli/secrets-environment-variables).
## Requirements
- [1Password CLI 2](https://developer.1password.com/docs/cli/get-started#install)

View File

@ -52,6 +52,7 @@ Available search contexts are:
| `gopkg` | `https://pkg.go.dev/search?m=package&q=` |
| `chatgpt` | `https://chatgpt.com/?q=` |
| `reddit` | `https://www.reddit.com/search/?q=` |
| `ppai` | `https://www.perplexity.ai/search/new?q=` |
Also there are aliases for bang-searching DuckDuckGo:

View File

@ -33,6 +33,7 @@ function web_search() {
gopkg "https://pkg.go.dev/search?m=package&q="
chatgpt "https://chatgpt.com/?q="
reddit "https://www.reddit.com/search/?q="
ppai "https://www.perplexity.ai/search/new?q="
)
# check whether the search engine is supported
@ -87,6 +88,7 @@ alias packagist='web_search packagist'
alias gopkg='web_search gopkg'
alias chatgpt='web_search chatgpt'
alias reddit='web_search reddit'
alias ppai='web_search ppai'
#add your own !bang searches here
alias wiki='web_search duckduckgo \!w'