diff --git a/scripts/profile/loadenv.sh b/scripts/profile/loadenv.sh new file mode 100644 index 00000000..2215b4b2 --- /dev/null +++ b/scripts/profile/loadenv.sh @@ -0,0 +1,35 @@ +# Maintains a global register of direnv locations. +# Starts a Bash session that uses the environment in any working directory. +# Inspired by direnv and bashmarks. + +if [ ! -n "$ENVDIR" ]; then + ENVDIR="${HOME}/.config/envsets" +fi +mkdir --parents "$ENVDIR" + +function .env { + declare name="${1}" + + bash --init-file <(cat \ + ~/.bashrc \ + <(direnv stdlib) \ + "$ENVDIR/$name" \ + <(cat <<< "export PS1='($name) $PS1'") \ + ) +} + +function lnenv { + declare name="${1}" + + ln -s -i -T "$(pwd)/.envrc" "$ENVDIR/$name" +} + +function rmenv { + declare name="${1}" + + rm "$ENVDIR/$name" +} + +function lsenv { + find "$ENVDIR" -mindepth 1 -maxdepth 1 -printf "%f -> %l\n" +}