forked from ohmyzsh/ohmyzsh
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(opentofu): add plugin for OpenTofu (ohmyzsh#12285)
- Adds aliases - Sets up autocompletion - Adds promp functions to show workspace and `tofu` version Co-authored-by: Marc Cornellà <[email protected]>
- Loading branch information
Showing
2 changed files
with
101 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
# OpenTofu plugin | ||
|
||
Plugin for OpenTofu, a fork of Terraform that is open-source, community-driven, and managed by the Linux Foundation. It adds | ||
completion for `tofu` command, as well as aliases and a prompt function. | ||
|
||
To use it, add `opentofu` to the plugins array of your `~/.zshrc` file: | ||
|
||
```shell | ||
plugins=(... opentofu) | ||
``` | ||
|
||
## Requirements | ||
|
||
- [OpenTofu](https://opentofu.org/) | ||
|
||
## Aliases | ||
|
||
| Alias | Command | | ||
| ----- | --------------- | | ||
| `tt` | `tofu` | | ||
| `tta` | `tofu apply` | | ||
| `ttc` | `tofu console` | | ||
| `ttd` | `tofu destroy` | | ||
| `ttf` | `tofu fmt` | | ||
| `tti` | `tofu init` | | ||
| `tto` | `tofu output` | | ||
| `ttp` | `tofu plan` | | ||
| `ttv` | `tofu validate` | | ||
| `tts` | `tofu state` | | ||
| `ttsh`| `tofu show` | | ||
| `ttr` | `tofu refresh` | | ||
| `ttt` | `tofu test` | | ||
| `ttws`| `tofu workspace`| | ||
|
||
|
||
## Prompt functions | ||
|
||
- `tofu_prompt_info`: shows the current workspace when in an OpenTofu project directory. | ||
|
||
- `tofu_version_prompt_info`: shows the current version of the `tofu` commmand. | ||
|
||
To use them, add them to a `PROMPT` variable in your theme or `.zshrc` file: | ||
|
||
```sh | ||
PROMPT='$(tofu_prompt_info)' | ||
RPROMPT='$(tofu_version_prompt_info)' | ||
``` | ||
|
||
You can also specify the PREFIX and SUFFIX strings for both functions, with the following variables: | ||
|
||
```sh | ||
# for tofu_prompt_info | ||
ZSH_THEME_TOFU_PROMPT_PREFIX="%{$fg[white]%}" | ||
ZSH_THEME_TOFU_PROMPT_SUFFIX="%{$reset_color%}" | ||
# for tofu_version_prompt_info | ||
ZSH_THEME_TOFU_VERSION_PROMPT_PREFIX="%{$fg[white]%}" | ||
ZSH_THEME_TOFU_VERSION_PROMPT_SUFFIX="%{$reset_color%}" | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# set up the tofu completion (compatible for zsh) | ||
autoload -Uz bashcompinit && bashcompinit | ||
complete -C tofu tofu | ||
|
||
# tofu workspace prompt function | ||
function tofu_prompt_info() { | ||
# only show the workspace name if we're in an opentofu project | ||
# i.e. if a .terraform directory exists within the hierarchy | ||
local dir="$PWD" | ||
while [[ ! -d "${dir}/.terraform" ]]; do | ||
[[ "$dir" != / ]] || return 0 # stop at the root directory | ||
dir="${dir:h}" # get the parent directory | ||
done | ||
|
||
# workspace might be different than the .terraform/environment file | ||
# for example, if set with the TF_WORKSPACE environment variable | ||
local workspace="$(tofu workspace show)" | ||
# make sure to escape % signs in the workspace name to prevent command injection | ||
echo "${ZSH_THEME_TOFU_PROMPT_PREFIX-[}${workspace:gs/%/%%}${ZSH_THEME_TOFU_PROMPT_SUFFIX-]}" | ||
} | ||
|
||
# tofu version prompt function | ||
function tofu_version_prompt_info() { | ||
# get the output of `tofu --version` in a single line, and get the second word after splitting by a space | ||
local tofu_version=${${(s: :)$(tofu --version)}[2]} | ||
# make sure to escape % signs in the version string to prevent command injection | ||
echo "${ZSH_THEME_TOFU_VERSION_PROMPT_PREFIX-[}${tofu_version:gs/%/%%}${ZSH_THEME_TOFU_VERSION_PROMPT_SUFFIX-]}" | ||
} | ||
|
||
alias tt='tofu' | ||
alias tta='tofu apply' | ||
alias ttc='tofu console' | ||
alias ttd='tofu destroy' | ||
alias ttf='tofu fmt' | ||
alias tti='tofu init' | ||
alias tto='tofu output' | ||
alias ttp='tofu plan' | ||
alias ttv='tofu validate' | ||
alias tts='tofu state' | ||
alias ttsh='tofu show' | ||
alias ttr='tofu refresh' | ||
alias ttt='tofu test' | ||
alias ttws='tofu workspace' |