# ⚡️cdwe (cd with env) A simple configurable cd wrapper that provides powerful utilities for customizing your envionment per directory. \ *(For **ZSH** / **BASH** / **FISH** Shells)* [Installation](#installation) • [Usage](#usage) • [Configuration](#configuration) • [Uninstalling](#uninstalling)

usage

Features

Installation

  1. Install binary bash cargo install cdwe

  2. Init your shell bash cdwe init zsh # zsh shells cdwe init bash # bash shells cdwe init fish # fish shells

  3. Reload your shell and start using! ```bash

    check that env var gets set

cdwe /Users/synoet/dev/projecta echo $IS_DEBUG

check that env var gets unset

cdwe .. echo $IS_DEBUG ```

Usage

### Defining Per Directory Env Variables

You can explicitly define environment variables in two ways: toml [[directory]] path = "/Users/synoet/dev/project" vars = {"IS_DEBUG" = "true", "IS_PROD" = "false"} path: the path to your directory you are configuring

vars: a map of env vars to set

By default env vars will also be loaded in subdirectories, in this example /Users/synoet/dev/project/src would also have IS_DEBUG and IS_PROD set

OR

toml [[env_variable]] name = "IS_DEBUG" value = "true" dirs = [ "/Users/synoet/dev/project1", "/Users/synoet/dev/project2" ] Here you can define one env var for multiple directories.

name: Is the key of the env variable

value: is the value of the env variable

dirs: Is a list of directories to load this env var for

### Loading From .env files

The directory object also takes a load_from field toml [[directory]] path = "/Users/synoet/dev/project" vars = {"IS_DEBUG" = "true", "IS_PROD" = "false"} load_from = [".env"] load_from: List of .env file names to auto load in, these should be relative to the dir defined in path.

In this example we would try to load in a env file at /Users/synoet/dev/project/.env

Unlike per directory env vars, env files are only loaded in the exact matching directory not in subdirectories

OR

Similarly we can define a single env file for multiple directories

toml [[env_file]] load_from = ".env" dirs = [ "/Users/synoet/dev/macro/macro-site/astro", "/Users/synoet/dev/macro/app-monorepo/packages/app" ]

### Defining Aliases Per Directory

Here we can define aliases that will be set and unset as functions only in specific directories

toml [[directory]] path = "/Users/synoet/dev/project" vars = {"IS_DEBUG" = "true", "IS_PROD" = "false"} load_from = [".env"] aliases = [ { name = "build", commands = ["yarn cache clean", "yarn build", "yarn package"] } ]

Here we define a build alias which will live only in /User/synoet/dev/project/* and all subdirectories.

aliases: a list of aliases to define for the directory

OR toml [[alias]] name = "build" commands = ["yarn cache clean", "yarn build", "yarn package"] dirs = [ "/Users/synoet/dev/projecta", "/Users/synoet/dev/projectb" ] Here you are defining the same alias for multiple directories.

### Defining Auto Commands

Here we can define commands that will automatically run anytime we cd into a specific directory toml [[directory]] path = "/Users/synoet/dev/project" vars = {"IS_DEBUG" = "true", "IS_PROD" = "false"} load_from = [".env"] aliases = [ { name = "build", commands = ["yarn cache clean", "yarn build", "yarn package"] } ] run = ["git fetch -p", "ls"] In this case every time we enter /Users/synoet/dev/project cdwe will automatically run git fetch -p and ls

Auto Commands also require an exact match and don't propogate to subdirectories

OR

toml [[command]] run = "git fetch -p" dirs = [ "/Users/synoet/dev/cdwe", "/Users/synoet/dev/macro/macro-api" ]

Configuration

Global Configuration Options

```toml [config]

Shell (Created during cdwe init )

shell = "zsh"

Custom CD Command (defaults to cd)

cd_command = "z"

Show alias hints on cd

alias_hints = true

Show env hints on cd

env_hints = true

shoe run hints on cd

run_hints = true ```

Example Configuration

```toml [config] cdcommand = "z" aliashints = true envhints = true commandhints = true run_hints = true shell = "zsh"

Defined a directory

Will have env var "TEST" set in this directory

Will auto run "git fetch -p" whenever you cd into this dir

Exposes the following aliases in that directory and sub dirs

[[directory]] path = "/Users/synoet/dev/cdwe" vars = { "TEST" = "testing" } runs = ["git fetch -p"] aliases = [ { name = "build", commands = ["cargo build --release"]}, { name = "run", commands = ["cargo run"]}, { name = "ci", commands = ["cargo fmt", "cargo test"]} ]

sets the "ENV_VAR" env var in the following directories

[[envvariable]] name = "ENVVAR" value = "THIS IS A TEST" dirs = [ "/Users/synoet/dev/cdwe", "/Users/synoet/dev/ballast" ]

auto loads from .env file in following directories

[[envfile]] loadfrom = ".env" dirs = [ "/Users/synoet/dev/cdwe", "/Users/synoet/dev/project-api" ]

will auto run the command "git fetch -p" in the following directories

[[command]] run = "git fetch -p" dirs = [ "/Users/synoet/dev/cdwe", "/Users/synoet/dev/project-api" ] ```

Uninstalling

  1. Run cdwe-remove to clean up all shell artifacts ``bash cdwe-remove #removes thesource ` from your .zshrc/.bashrc/.fish

zsh #reload your shell, use bash or fish if you use those. ```

  1. Uninstall binary bash cargo uninstall cdwe