-
Notifications
You must be signed in to change notification settings - Fork 1
/
env
116 lines (102 loc) · 2.7 KB
/
env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env zsh
# env -- envvars & standard library for dotfiles; don't symlink me!
# Can be sourced by zsh/bash scripts
export XDG_CACHE_HOME=~/.cache
export XDG_CONFIG_HOME=~/.config
export XDG_DATA_HOME=~/.local/share
export XDG_BIN_HOME=~/.local/bin
# subshell-elimination: uncomment to make this dynamic
# export DOTFILES="$(cd $(dirname "${BASH_SOURCE:-${(%):-%x}}") && pwd -P)"
export DOTFILES="$HOME/.dotfiles"
export DOTFILES_DATA="$XDG_DATA_HOME/dotfiles"
export DOTFILES_ASSETS="$DOTFILES/assets"
for dir in "$XDG_CACHE_HOME" "$XDG_CONFIG_HOME" "$XDG_DATA_HOME" "$XDG_BIN_HOME" "$DOTFILES_DATA"; do
[[ -d $dir ]] || mkdir -p "$dir"
done
## Library, curtesy of hlissner
## https://github.com/hlissner/dotfiles/blob/master/env
# check if we're in an interactive session
function _is_interactive { [[ $- == *i* || -n $EMACS ]]; }
# check if a process is running
function _is_running {
for prc in "$@"; do
pgrep -x "$prc" >/dev/null || return 1
done
}
# check if a command is available
function _is_callable {
for cmd in "$@"; do
command -v "$cmd" >/dev/null || return 1
done
}
# source a file, fail silently if it doesn't exist
function _source {
[[ -f $1 ]] && source "$1"
}
# source a file, either with an absolute path,
# or relative to dotfiles.
#
# _load shell/zsh/completion.zsh
#
function _load {
case $1 in
/*) source "$1" ;;
*) source "$DOTFILES/$1" ;;
esac
}
function _load_silent {
case $1 in
/*) _source "$1" ;;
*) _source "$DOTFILES/$1" ;;
esac
}
# load a file from all enabled topics
#
# _load_all env.zsh
#
# ~/.local/share/dotfiles/
# ├── editor.vim.topic
# │ └── env.zsh
# └── shell.zsh.topic
# └── env.zsh
#
function _load_all {
for file in "$DOTFILES_DATA"/*.topic/"$1"; do
[[ -e $file ]] && source "$file"
done
}
# makes sure a repo is cloned to the destination,
# clones it otherwise
#
# _ensure_repo eliasnorrby/dotfiles ~/.dotfiles
#
function _ensure_repo {
local target=$1
local dest=$2
if [[ ! -d $dest ]]; then
if [[ $target =~ "^[^/]+/[^/]+$" ]]; then
url=https://github.com/$target
elif [[ $target =~ "^[^/]+$" ]]; then
url=git@github.com:$USER/$target.git
fi
[[ -n ${dest%/*} ]] && mkdir -p ${dest%/*}
git clone --recursive "$url" "$dest" || return 1
fi
}
# check os for branching
#
# [[ $(_os) == "macos" ]] && brew install something
#
function _os {
case $OSTYPE in
linux*) if [[ -f /etc/arch-release ]]; then echo -n arch
elif [[ -f /etc/debian_version ]]; then echo -n debian
fi ;;
darwin*) echo -n macos ;;
cygwin*) echo -n cygwin ;;
esac
}
# check if remote
function _remote {
[ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]
}