-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·118 lines (96 loc) · 2.66 KB
/
setup.sh
File metadata and controls
executable file
·118 lines (96 loc) · 2.66 KB
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
#!/bin/bash
self="$(dirname "$(realpath "$0")")"
perfect=1
cmd_exists() {
command -v "$1" >/dev/null 2>&1 && return 0
return 1
}
verbose=
if grep -iE '( |^)(\-v|\-\-verbose)( |$)' <<<"$*" >/dev/null 2>&1; then
verbose=1
fi
verbose=0
target_dir=$(dirname "$self")
while true; do
case "$1" in
-v | --verbose)
verbose=1
;;
-c | --config)
shift
target_dir="$1"
;;
"")
break
;;
esac
shift
done
ftarget_dir="${target_dir/$HOME/\$HOME}"
fself="${self/$HOME/\$HOME}"
log_cmd() {
perfect=0
if [ "$verbose" = "1" ]; then
echo ""
echo "$2:"
echo " - $1"
else
echo "$1"
fi
}
pkg_manager_name=
pkg_manager_command=
pkg_manager_executable=
if [[ $(uname) == "Darwin" ]]; then
pkg_manager_executable="brew"
pkg_manager_name="Homebrew"
pkg_manager_command="brew install"
if ! cmd_exists $pkg_manager_executable; then
log_cmd "/bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"" "Install homebrew"
fi
elif cmd_exists apt; then
pkg_manager_executable="apt"
pkg_manager_name="apt"
pkg_manager_command="sudo apt update && sudo apt install -y"
fi
log_install() {
if [ "$pkg_manager_name" = "" ]; then
echo ""
echo "# Install $2"
echo ""
else
log_cmd "$pkg_manager_command $1" "Install ($pkg_manager_name) $2"
fi
}
conditional_log_install() {
chk_exec="$1"
pkg_name="$1"
descr="$2"
if [ $# = 3 ]; then
pkg_name="$2"
descr="$3"
fi
if ! cmd_exists "$chk_exec"; then
log_install "$pkg_name" "$descr"
fi
}
conditional_log_install "stow" "GNU Stow"
conditional_log_install "zsh" "zsh"
if ! [ "$(realpath "$target_dir/zsh")" = "$self/zsh" ]; then
log_cmd "stow \"$self\" -t \"$target_dir\"" "Symlink dotfiles $fself to $ftarget_dir"
fi
if ! finger "$(whoami)" | grep -E "Shell: /.*/zsh" >/dev/null 2>&1; then
log_cmd "chsh -s \"\$(which zsh)\"" "Switch user login shell to ZSH"
fi
if ! [[ -f "$HOME/.zshrc" ]] && grep -E '(.|source) (\"|$'"'"').*/\.zshrc\2' <"$HOME/.zshrc" >/dev/null 2>&1; then
log_cmd "echo \"[[ -f \\\"$ftarget_dir/zsh/.zshrc\\\" ]] && source \\\"$ftarget_dir/zsh/.zshrc\\\" >> \"\$HOME/.zshrc\"" "Source .zshrc"
fi
if ! [[ -f "$HOME/.zshenv" ]] && grep -E '(.|source) (\"|$'"'"').*/\.zshenv\2' <"$HOME/.zshenv" >/dev/null 2>&1; then
log_cmd "echo \"[[ -f \\\"$ftarget_dir/zsh/.zshenv\\\" ]] && source \\\"$ftarget_dir/zsh/.zshenv\\\" >> \"\$HOME/.zshenv\"" "Source .zshenv"
fi
if ! bash "$self/fonts.sh" --check >/dev/null 2>&1; then
pr="${self/$HOME/~}"
[ "$self" = "$(pwd)" ] && pr="."
log_cmd "bash $pr/fonts.sh" "Install fonts"
fi
if [ "$perfect" = 1 ] && [ "$verbose" = 1 ]; then echo "Already set up"; fi