-
Notifications
You must be signed in to change notification settings - Fork 0
/
installscript
211 lines (173 loc) · 5.97 KB
/
installscript
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
# This script installs various developer tools and set up configurations.
# Initialize color variables
GREEN=$(tput setaf 2)
RED=$(tput setaf 1)
BLUE=$(tput setaf 4)
NORMAL=$(tput sgr0)
# Define the location of dotfiles directory
DOTFILES_DIRECTORY=$(cd "$(dirname "$0")" && pwd)
success() {
printf "${GREEN}%s${NORMAL}\n" "$1"
}
info() {
printf "${BLUE}%s${NORMAL}\n" "$1"
}
error() {
printf "${RED}%s${NORMAL}\n" "$1"
}
header() {
info "========== $1 =========="
}
# Main function that orchestrates the overall tasks
main() {
if [[ -z "${1}" ]]; then
error "You must provide package manager as an argument (apt or dnf)."
exit 1
fi
PACKAGE_MANAGER="${1}"
update_setup
zsh_installation
oh_my_zsh_installation
symlink_zsh_prefs
install_and_update_zsh_plugins
starship_installation
fzf_installation
git_configuration
neovim_installation
nvm_installation
php_installation
diff_so_fancy_installation
python_installation
tldr_installation
bat_installation
success "++++++++++++++++++++++++++"
success "+ Installation Complete. +"
success "++++++++++++++++++++++++++"
}
update_setup() {
header "Updating package repositories..."
sudo "${PACKAGE_MANAGER}" update -y
sudo "${PACKAGE_MANAGER}" install -y curl wget zip
}
zsh_installation() {
if ! type "zsh" > /dev/null; then
header "Installing Zsh..."
sudo $PACKAGE_MANAGER install zsh -y
chsh -s "$(which zsh)"
fi
}
oh_my_zsh_installation() {
if [ ! -d "$HOME/.oh-my-zsh" ]; then
header "Installing Oh My Zsh..."
curl -L https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh | sh
fi
}
symlink_zsh_prefs() {
header "Creating symbolic link to zshrc..."
rm -f "${HOME}/.zshrc"
ln -sv "${DOTFILES_DIRECTORY}/shell/.zshrc" "${HOME}/.zshrc"
}
install_and_update_zsh_plugins() {
header "Setting up Zsh Plugins..."
if [[ ! -d "${DOTFILES_DIRECTORY}/misc/oh-my-zsh-custom/plugins/zsh-syntax-highlighting" ]]
then
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "${DOTFILES_DIRECTORY}/misc/oh-my-zsh-custom/plugins/zsh-syntax-highlighting"
else
git -C "${DOTFILES_DIRECTORY}/misc/oh-my-zsh-custom/plugins/zsh-syntax-highlighting" pull
fi
if [[ ! -d "${DOTFILES_DIRECTORY}/misc/oh-my-zsh-custom/plugins/zsh-autosuggestions" ]]
then
git clone https://github.com/zsh-users/zsh-autosuggestions "${DOTFILES_DIRECTORY}/misc/oh-my-zsh-custom/plugins/zsh-autosuggestions"
else
git -C "${DOTFILES_DIRECTORY}/misc/oh-my-zsh-custom/plugins/zsh-autosuggestions" pull
fi
}
starship_installation() {
header "Installing Starship..."
curl -sS https://starship.rs/install.sh | sh
rm -f "${HOME}/.config/starship.toml"
ln -sv "${DOTFILES_DIRECTORY}/shell/starship.toml" "${HOME}/.config/starship.toml"
}
fzf_installation() {
header "Installing fzf..."
sudo "${PACKAGE_MANAGER}" install -y fzf
}
git_configuration() {
header "Configuring Git..."
# Add global gitignore
rm "$HOME/.global-gitignore"
ln -s "$DOTFILES_DIRECTORY/shell/.global-gitignore" "$HOME/.global-gitignore"
# Add gitconfig
if ! [ -f "$HOME/.gitconfig" ]; then
read -p " - What is your github author name? " git_authorname
read -p " - What is your github author email? " git_authoremail
sed -e "s/AUTHORNAME/$git_authorname/g" \
-e "s/AUTHOREMAIL/$git_authoremail/g" \
-e "s+DOTFILES_DIRECTORY+$DOTFILES_DIRECTORY+g" \
"$DOTFILES_DIRECTORY/shell/.gitconfig.example" > "$HOME/.gitconfig"
else
echo " - .gitconfig already exists."
fi
}
neovim_installation() {
header "Installing neovim..."
sudo $PACKAGE_MANAGER install neovim -y
mkdir -p "$HOME/.config"
ln -s "$DOTFILES_DIRECTORY/shell/nvim" "$HOME/.config/nvim"
# Install nvim plugin
curl -fLo "$HOME/.config/nvim/autoload/plug.vim" --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
nvim +PlugInstall +qall
}
nvm_installation() {
read -p "Do you wish to install nvm ? [Yn]: " -n 1 -r REPLY
if [[ $REPLY =~ ^[Yy]$ ]]; then
header "Installing nvm..."
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
nvm install stable
fi
echo
}
php_installation() {
read -p "Do you wish to install php ? [Yn]: " -n 1 -r REPLY
if [[ $REPLY =~ ^[Yy]$ ]]; then
header "Installing PHP..."
sudo $PACKAGE_MANAGER install php php-xdebug php-memcached php-xml php-mbstring php-curl -y
header "Installing Composer..."
EXPECTED_COMPOSER_CHECKSUM="$(curl https://composer.github.io/installer.sig)"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_COMPOSER_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
if [ "$EXPECTED_COMPOSER_CHECKSUM" != "$ACTUAL_COMPOSER_CHECKSUM" ]
then
>&2 echo 'ERROR: Invalid installer checksum'
rm composer-setup.php
exit 1
fi
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php
fi
echo
}
diff_so_fancy_installation() {
if [ -d "$DOTFILES_DIRECTORY/misc/diffsofancy" ]; then
header "Updating diff-so-fancy..."
git -C "$DOTFILES_DIRECTORY/misc/diffsofancy" pull
else
header "Installing diff-so-fancy..."
git clone https://github.com/so-fancy/diff-so-fancy "$DOTFILES_DIRECTORY/misc/diffsofancy"
chmod +x "$DOTFILES_DIRECTORY/misc/diffsofancy/diff-so-fancy"
sudo ln -s "$DOTFILES_DIRECTORY/misc/diffsofancy/diff-so-fancy" /usr/local/bin/diff-so-fancy
fi
}
python_installation() {
header "Installing Python / Pip..."
sudo $PACKAGE_MANAGER install python3 python3-venv python3-pip -y
}
tldr_installation() {
header "Installing tldr..."
pip3 install tldr
}
bat_installation() {
header "Installing bat..."
sudo $PACKAGE_MANAGER install bat
}
main "${@}"