-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathbootstrap
More file actions
executable file
·119 lines (94 loc) · 2.85 KB
/
bootstrap
File metadata and controls
executable file
·119 lines (94 loc) · 2.85 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
119
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# Darwin/Linux
UNAME_S="$(uname -s)"
HOSTNAME_S="$(hostname -s)"
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
mkdir -p "$XDG_CONFIG_HOME"
git submodule update --init --recursive
for fname in "$SCRIPT_DIR"/.*; do
[[ ! -f $fname ]] && continue # Skip non-files
fname_src="$fname"
fname_base=$(basename "$fname")
fname_target="$HOME/$fname_base"
if [[ "$fname_base" =~ ^\.(tags.*|DS_Stor|)$ ]]; then
echo >&2 "Skipping $fname"
continue
fi
if ! [[ "$fname_base" = *.json || "$fname_base" = *.conf || "$fname_base" = *.local || "$fname_base" = *.lua ]]; then
if [[ "$fname_base" =~ \..*\..* ]]; then
echo >&2 "Skipping dotfile variant $fname"
continue
fi
fi
# Handle os-specific config files
if [[ -f "$fname.$UNAME_S" ]]; then
fname_src="$fname.$UNAME_S"
echo >&2 "Using $fname_src for $fname"
fi
# Handle host-specific config files
if [[ -f "$fname.$HOSTNAME_S" ]]; then
fname_src="$fname.$HOSTNAME_S"
echo >&2 "Using $fname_src for $fname"
fi
ln -vsfn "$fname_src" "$fname_target"
done
# Bash-completion
mkdir -p "$HOME/.local/share/"
rm -f "$HOME/.local/share/bash-completion"
ln -sfn "$SCRIPT_DIR/.local/share/bash-completion" "$HOME/.local/share/"
# For neovim
ln -sfn "$SCRIPT_DIR"/vim "$XDG_CONFIG_HOME/nvim"
ln -sfn "$SCRIPT_DIR"/.vimrc "$XDG_CONFIG_HOME/nvim/init.vim"
# Config dir
for dname in "$SCRIPT_DIR"/config/*; do
dname_src="$dname"
dname_base=$(basename "$dname")
dname_target="$XDG_CONFIG_HOME/$dname_base"
if [[ "$dname_base" =~ .*\..* ]]; then
echo >&2 "Skipping config dir variant $dname"
continue
fi
# Handle os-specific config files
if [[ -d "$dname.$UNAME_S" ]]; then
dname_src="$dname.$UNAME_S"
echo >&2 "Using $dname_src for $dname"
fi
# Handle host-specific config files
if [[ -d "$dname.$HOSTNAME_S" ]]; then
dname_src="$dname.$HOSTNAME_S"
fi
ln -vsfn "$dname_src" "$XDG_CONFIG_HOME/$dname_base"
done
config_dirs=(
.ctags.d
.ipython
.githooks
)
for config_dir in "${config_dirs[@]}"; do
ln -vsfn "$SCRIPT_DIR/$config_dir" "$HOME/$config_dir"
done
# Binaries
mkdir -p "$HOME"/bin
ln -vsfn "$SCRIPT_DIR"/bin/* "$HOME"/bin/
for binfile in "${SCRIPT_DIR}/${UNAME_S}"/bin/*; do
[[ ! -f "$binfile" ]] && continue
ln -vsfn "$binfile" "$HOME"/bin/"$(basename "$binfile")"
done
mkdir -p "$HOME"/scripts
ln -vsfn "$SCRIPT_DIR"/scripts/* "$HOME"/scripts/
for scriptsfile in "${SCRIPT_DIR}/${UNAME_S}"/scripts/*; do
[[ ! -f "$scriptsfile" ]] && continue
ln -vsfn "$scriptsfile" "$HOME"/scripts/"$(basename "$scriptsfile")"
done
# Vim dir
rm -f "$HOME"/.vim
ln -sfn "$SCRIPT_DIR"/vim "$HOME"/.vim
# Vim plugins
nvim +PlugInstall! +qall
# Vim Remote plugins
nvim +UpdateRemotePlugins +qall
"$SCRIPT_DIR/install-helpers"