diff options
author | Vikas Kushwaha <dev@vikas.rocks> | 2025-06-13 08:37:31 +0530 |
---|---|---|
committer | Vikas Kushwaha <dev@vikas.rocks> | 2025-06-13 08:37:31 +0530 |
commit | 28ea0e3cbe1c0f980a05d6fb13a428bcab2ea1c5 (patch) | |
tree | b44f5301c4f60b1dae51a91e72b614996ee074ce /.local/bin/development/envrun | |
parent | 311a468de08231c3dd2327473b79066a25e67462 (diff) |
Diffstat (limited to '.local/bin/development/envrun')
-rwxr-xr-x | .local/bin/development/envrun | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/.local/bin/development/envrun b/.local/bin/development/envrun new file mode 100755 index 0000000..aad0822 --- /dev/null +++ b/.local/bin/development/envrun @@ -0,0 +1,55 @@ +#!/bin/sh + +help() { echo "envrun - run programs in an isolated home directory + +USAGE: + envrun [OPTION]... COMMAND + +OPTIONS: + -d ENVHOME use the ENVHOME environment directory + -h show this help message"; } + +while getopts 'd:h' o; do case "$o" in + d) export ENVHOME="$OPTARG" ;; + *) help >&2; exit ;; +esac done +shift $((OPTIND - 1)) + +export HOME="${ENVHOME:-"$PWD"}" +export XDG_CACHE_HOME="$HOME/.cache" +export XDG_CONFIG_HOME="$HOME/.config" +export XDG_DATA_HOME="$HOME/.local/share" +export XDG_STATE_HOME="$HOME/.local/state" + +ensure_dirs() { + for dir in "$@"; do + [ -d "$dir" ] || { missing=1; break; } + done + + [ "$missing" = 1 ] || return + printf "\nFollowing directories will be created.\n\n" + for dir in "$@"; do + [ -d "$dir" ] || echo "$dir/" + done + + printf "\ncontinue? [y/N] " + read -r ans + case "$ans" in + y|Y) echo; mkdir -pv "$@"; echo ;; + *) exit ;; + esac +} + +ensure_dirs \ + "$XDG_CACHE_HOME" \ + "$XDG_CONFIG_HOME" \ + "$XDG_DATA_HOME" \ + "$XDG_STATE_HOME" + +[ "$#" -lt 1 ] && { + echo "Please provide a command to run." + exit +} + +"$@" + |