-
Notifications
You must be signed in to change notification settings - Fork 0
/
index
157 lines (135 loc) · 4.23 KB
/
index
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/usr/bin/env bash
# Scripts path depends on the current shell.
shellchemy_path=$(dirname "${BASH_SOURCE[0]}");
if [[ -n $ZSH_VERSION ]]; then shellchemy_path=${0:A:h}; fi
echo_regex_substring() {
local substring=$(echo "$1" | grep -oE "$2");
[ -z $substring ] && { return 1; }
echo "$substring";
}
# There are different ways to get the name of the system or the OS. The implemented
# one is https://github.com/microsoft/WSL/issues/4071#issuecomment-1223393940
# Another approach is https://stackoverflow.com/a/17072017/1054579
__get_system_name() {
local unameOut=$(uname -a)
case "${unameOut}" in
# wsl must be first since it will have Linux in the name too
*Microsoft*) result="WSL";;
*microsoft*) result="WSL2";;
Linux*) result="Linux";;
Darwin*) result="Mac";;
CYGWIN*) result="Cygwin";;
MINGW*) result="Windows";;
*Msys) result="Windows";;
*) result="UNKNOWN:${unameOut}"
esac
# if [[ ${result} == "Mac" ]] && sysctl -n machdep.cpu.brand_string | grep -q 'Apple M1'; then
# # Check if its an M1. This check should work even if the current processes is running under x86 emulation.
# result="MacM1"
# fi
echo $result;
}
SYSTEM_NAME=$(__get_system_name)
source "$shellchemy_path/print"
source "$shellchemy_path/git/utils"
source "$shellchemy_path/git/git"
source "$shellchemy_path/github"
source "$shellchemy_path/jira"
source "$shellchemy_path/shellchemy"
source "$shellchemy_path/windows"
cdnvm() {
run_cmd "cd "$1"";
envm;
if [[ $(node --version) != "v$2"* ]]; then
print_info "Changing node version to `color_cyan $2`"
run_cmd "nvm use $2";
fi
}
# Checks if a command is avaiable in your current session. Returns 0 if
# the command exists. Otherwise, shows an error message and returns 1 if
# the command doesn't exist.
# $1: Command.
cmd_exists() {
if ! command -v $1 &> /dev/null; then
print_error "`color_cyan $1` command doesn't exist.";
return 1;
fi
}
# Enables Brew on the current terminal session.
ebrew() {
cmd_exists brew > /dev/null 2>&1 && return 1;
print_info "Enabling `color_cyan brew`...";
if [[ $SYSTEM_NAME == "Mac" ]]; then
run_cmd "$(/opt/homebrew/bin/brew shellenv)";
else
run_cmd "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)";
fi
run_cmd "brew --version";
}
# Enables NVM on the current terminal session.
envm() {
cmd_exists nvm > /dev/null 2>&1 && return 1;
ebrew;
print_info "Enabling `color_cyan nvm`...";
local nvm_path=$(brew --prefix nvm);
if [[ -z $nvm_path ]]; then
print_error "`color_cyan nvm` was not installed with brew.";
return 1;
fi
run_cmd "export NVM_DIR=~/.nvm";
# This loads nvm
run_cmd "source $nvm_path/nvm.sh";
# This loads nvm bash_completion
run_cmd "source $nvm_path/etc/bash_completion.d/nvm";
run_cmd "node --version";
}
epython() {
cmd_exists python > /dev/null 2>&1 && return 1;
ebrew;
print_info "Enabling `color_cyan python`...";
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
pyenv global 2;
run_cmd "which python";
run_cmd "python --version";
}
# Checks if a function has parameters. Returns 0 if there are paramters.
# Otherwise returns 1.
# $@: Parameters
has_parameters() {
if [ $# -eq 0 ]; then
print_error "Missing parameters.";
return 1;
fi
return 0;
}
hide_output() {
"$@" > /dev/null 2>&1;
return $?;
}
# Prints and runs a command ($1).
# (Optional) Assigns the output to a variable name without "$" ($2)
run_cmd() {
print_cmd "$1";
if [[ $# == 1 ]]; then
# "eval" runs commands with pipes: https://stackoverflow.com/a/48098280/1054579
eval $1;
else
eval "$2=\"$(eval $1)\""
fi
return $?;
}
# Opens VSCode for the current directory. If $1 is specified, VSCode opens for
# the root of the git repository, or that path.
vsc() {
local vsc_path="${1:-.}";
local type="directory";
is_git_directory "$vsc_path" > /dev/null 2>&1 && {
vsc_path=$(cd $vsc_path; echo `git rev-parse --show-toplevel`;)
type=`color_magenta "repository"`;
}
local directory="$(basename "`cd "$vsc_path"; pwd`")";
print_info "Opening `color_cyan "$directory"` $type on VSCode.";
run_cmd "code \"$vsc_path\"";
}