summaryrefslogtreecommitdiff
path: root/plugins/lando
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/lando')
-rw-r--r--plugins/lando/README.md24
-rw-r--r--plugins/lando/lando.plugin.zsh35
2 files changed, 44 insertions, 15 deletions
diff --git a/plugins/lando/README.md b/plugins/lando/README.md
index 6daeae4e4..2f881cf3d 100644
--- a/plugins/lando/README.md
+++ b/plugins/lando/README.md
@@ -8,7 +8,7 @@ To use it, add `lando` to the plugins array in your zshrc file:
plugins=(... lando)
```
-## ALIASES:
+## Wrapped Commands
| Alias | Description |
|:----------:|:----------------:|
@@ -21,16 +21,34 @@ plugins=(... lando)
| `wp` | `lando wp` |
| `yarn` | `lando yarn` |
+More or different commands can be wrapped by setting the `LANDO_ZSH_WRAPPED_COMMANDS` setting, see [Settings](#settings) below.
+
## How It Works:
This plugin removes the requirement to type `lando` before a command. It utilizes the lando version of supported commands run within directories with the following criteria:
+
- The `.lando.yml` file is found in the current directory or any parent directory within `$LANDO_ZSH_SITES_DIRECTORY`.
- The current directory is within `$LANDO_ZSH_SITES_DIRECTORY` but is not `$LANDO_ZSH_SITES_DIRECTORY` itself.
+- If the command is not a part of the commands available in the lando environment, it will run the command without `lando`.
## Settings:
-- `LANDO_ZSH_SITES_DIRECTORY`: The plugin will stop searching through parents for `CONFIG_FILE` once it hits this directory.
-- `LANDO_ZSH_CONFIG_FILE`: The plugin will check to see if this provided file exists to check for presence of Lando.
+> NOTE: these settings must be set *before* the plugin is loaded, and any changes require a restart of the shell to be applied.
+
+- `LANDO_ZSH_SITES_DIRECTORY`: The plugin will stop searching through parents for `CONFIG_FILE` once it hits this directory:
+ ```sh
+ LANDO_ZSH_SITES_DIRECTORY="$HOME/Code"
+ ```
+
+- `LANDO_ZSH_CONFIG_FILE`: The plugin will check to see if this provided file exists to check for presence of Lando:
+ ```sh
+ LANDO_ZSH_CONFIG_FILE=".lando.dev.yml"
+ ```
+
+- `LANDO_ZSH_WRAPPED_COMMANDS`: The list of commands to wrap, as a string of commands separated by whitespace:
+ ```sh
+ LANDO_ZSH_WRAPPED_COMMANDS="mysql php composer test artisan"
+ ```
## Author:
diff --git a/plugins/lando/lando.plugin.zsh b/plugins/lando/lando.plugin.zsh
index af53e7e5a..ee796d212 100644
--- a/plugins/lando/lando.plugin.zsh
+++ b/plugins/lando/lando.plugin.zsh
@@ -1,25 +1,36 @@
# Settings
: ${LANDO_ZSH_SITES_DIRECTORY:="$HOME/Sites"}
: ${LANDO_ZSH_CONFIG_FILE:=.lando.yml}
+: ${LANDO_ZSH_WRAPPED_COMMANDS:="
+ artisan
+ composer
+ drush
+ gulp
+ npm
+ php
+ wp
+ yarn
+"}
# Enable multiple commands with lando.
-function artisan \
- composer \
- drush \
- gulp \
- npm \
- php \
- wp \
- yarn {
- if checkForLandoFile; then
- lando "$0" "$@"
+function ${=LANDO_ZSH_WRAPPED_COMMANDS} {
+ # If the lando task is available in `lando --help`, then it means:
+ #
+ # 1. `lando` is in a project with a `.lando.yml` file.
+ # 2. The lando task is available for lando, based on the .lando.yml config file.
+ #
+ # This has a penalty of about 250ms, so we still want to check if the lando file
+ # exists before, which is the fast path. If it exists, checking help output is
+ # still faster than running the command and failing.
+ if _lando_file_exists && lando --help 2>&1 | command grep -Eq "^ +lando $0 "; then
+ command lando "$0" "$@"
else
command "$0" "$@"
fi
}
# Check for the file in the current and parent directories.
-checkForLandoFile() {
+_lando_file_exists() {
# Only bother checking for lando within the Sites directory.
if [[ "$PWD/" != "$LANDO_ZSH_SITES_DIRECTORY"/* ]]; then
# Not within $LANDO_ZSH_SITES_DIRECTORY
@@ -38,4 +49,4 @@ checkForLandoFile() {
# Could not find $LANDO_ZSH_CONFIG_FILE in the current directory
# or in any of its parents up to $LANDO_ZSH_SITES_DIRECTORY.
return 1
-} \ No newline at end of file
+}