⚡️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 • Usage • Configuration • Uninstalling
Features
- Per Directory Environment Variables
- Auto Load .env files in Directories
- Auto Execute Commands in Directories
- Per Directory Aliases
- Works with any CD like Command
Installation
- Install binary
- Init your shell
- Reload your shell and start using!
# check that env var gets set
# check that env var gets unset
Usage
Defining Per Directory Env Variables
You can explicitly define environment variables in two ways:
[[]]
= "/Users/synoet/dev/project"
= { = "true", = "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
[[]]
= "IS_DEBUG"
= "true"
= [
"/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
[[]]
= "/Users/synoet/dev/project"
= { = "true", = "false"}
= [".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
[[]]
= ".env"
= [
"/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
[[]]
= "/Users/synoet/dev/project"
= { = "true", = "false"}
= [".env"]
= [
{ = "build", = ["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
[[]]
= "build"
= ["yarn cache clean", "yarn build", "yarn package"]
= [
"/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
[[]]
= "/Users/synoet/dev/project"
= { = "true", = "false"}
= [".env"]
= [
{ = "build", = ["yarn cache clean", "yarn build", "yarn package"] }
]
= ["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
[[]]
= "git fetch -p"
= [
"/Users/synoet/dev/cdwe",
"/Users/synoet/dev/macro/macro-api"
]
Configuration
Global Configuration Options
[]
# Shell (Created during cdwe init <shell>)
= "zsh"
# Custom CD Command (defaults to cd)
= "z"
# Show alias hints on cd
= true
# Show env hints on cd
= true
# shoe run hints on cd
= true
Example Configuration
[]
= "z"
= true
= true
= true
= true
= "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
[[]]
= "/Users/synoet/dev/cdwe"
= { = "testing" }
= ["git fetch -p"]
= [
{ = "build", = ["cargo build --release"]},
{ = "run", = ["cargo run"]},
{ = "ci", = ["cargo fmt", "cargo test"]}
]
# sets the "ENV_VAR" env var in the following directories
[[]]
= "ENV_VAR"
= "THIS IS A TEST"
= [
"/Users/synoet/dev/cdwe",
"/Users/synoet/dev/ballast"
]
# auto loads from .env file in following directories
[[]]
= ".env"
= [
"/Users/synoet/dev/cdwe",
"/Users/synoet/dev/project-api"
]
# will auto run the command "git fetch -p" in the following directories
[[]]
= "git fetch -p"
= [
"/Users/synoet/dev/cdwe",
"/Users/synoet/dev/project-api"
]
Uninstalling
- Run cdwe-remove to clean up all shell artifacts
- Uninstall binary