forked from ChrisTitusTech/mybash
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup.sh
executable file
·277 lines (246 loc) · 8.86 KB
/
setup.sh
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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
#!/bin/sh -e
RC='\033[0m'
RED='\033[31m'
YELLOW='\033[33m'
GREEN='\033[32m'
# Check if the home directory and linuxtoolbox folder exist, create them if they don't
LINUXTOOLBOXDIR="$HOME/linuxtoolbox"
if [ ! -d "$LINUXTOOLBOXDIR" ]; then
echo "${YELLOW}Creating linuxtoolbox directory: $LINUXTOOLBOXDIR${RC}"
mkdir -p "$LINUXTOOLBOXDIR"
echo "${GREEN}linuxtoolbox directory created: $LINUXTOOLBOXDIR${RC}"
fi
if [ -d "$LINUXTOOLBOXDIR/mybash" ]; then rm -rf "$LINUXTOOLBOXDIR/mybash"; fi
echo "${YELLOW}Cloning mybash repository into: $LINUXTOOLBOXDIR/mybash${RC}"
git clone https://github.com/ChrisTitusTech/mybash "$LINUXTOOLBOXDIR/mybash"
if [ $? -eq 0 ]; then
echo "${GREEN}Successfully cloned mybash repository${RC}"
else
echo "${RED}Failed to clone mybash repository${RC}"
exit 1
fi
# add variables to top level so can easily be accessed by all functions
PACKAGER=""
SUDO_CMD=""
SUGROUP=""
GITPATH=""
cd "$LINUXTOOLBOXDIR/mybash" || exit
command_exists() {
command -v "$1" >/dev/null 2>&1
}
checkEnv() {
## Check for requirements.
REQUIREMENTS='curl groups sudo'
for req in $REQUIREMENTS; do
if ! command_exists "$req"; then
echo "${RED}To run me, you need: $REQUIREMENTS${RC}"
exit 1
fi
done
## Check Package Handler
PACKAGEMANAGER='nala apt dnf yum pacman zypper emerge xbps-install nix-env'
for pgm in $PACKAGEMANAGER; do
if command_exists "$pgm"; then
PACKAGER="$pgm"
echo "Using $pgm"
break
fi
done
if [ -z "$PACKAGER" ]; then
echo "${RED}Can't find a supported package manager${RC}"
exit 1
fi
if command_exists sudo; then
SUDO_CMD="sudo"
elif command_exists doas && [ -f "/etc/doas.conf" ]; then
SUDO_CMD="doas"
else
SUDO_CMD="su -c"
fi
echo "Using $SUDO_CMD as privilege escalation software"
## Check if the current directory is writable.
GITPATH=$(dirname "$(realpath "$0")")
if [ ! -w "$GITPATH" ]; then
echo "${RED}Can't write to $GITPATH${RC}"
exit 1
fi
## Check SuperUser Group
SUPERUSERGROUP='wheel sudo root'
for sug in $SUPERUSERGROUP; do
if groups | grep -q "$sug"; then
SUGROUP="$sug"
echo "Super user group $SUGROUP"
break
fi
done
## Check if member of the sudo group.
if ! groups | grep -q "$SUGROUP"; then
echo "${RED}You need to be a member of the sudo group to run me!${RC}"
exit 1
fi
}
installDepend() {
## Check for dependencies.
DEPENDENCIES='bash bash-completion tar bat tree multitail fastfetch wget unzip fontconfig'
if ! command_exists nvim; then
DEPENDENCIES="${DEPENDENCIES} neovim"
fi
echo "${YELLOW}Installing dependencies...${RC}"
if [ "$PACKAGER" = "pacman" ]; then
if ! command_exists yay && ! command_exists paru; then
echo "Installing yay as AUR helper..."
${SUDO_CMD} ${PACKAGER} --noconfirm -S base-devel
cd /opt && ${SUDO_CMD} git clone https://aur.archlinux.org/yay-git.git && ${SUDO_CMD} chown -R "${USER}:${USER}" ./yay-git
cd yay-git && makepkg --noconfirm -si
else
echo "AUR helper already installed"
fi
if command_exists yay; then
AUR_HELPER="yay"
elif command_exists paru; then
AUR_HELPER="paru"
else
echo "No AUR helper found. Please install yay or paru."
exit 1
fi
${AUR_HELPER} --noconfirm -S ${DEPENDENCIES}
elif [ "$PACKAGER" = "nala" ]; then
${SUDO_CMD} ${PACKAGER} install -y ${DEPENDENCIES}
elif [ "$PACKAGER" = "emerge" ]; then
${SUDO_CMD} ${PACKAGER} -v app-shells/bash app-shells/bash-completion app-arch/tar app-editors/neovim sys-apps/bat app-text/tree app-text/multitail app-misc/fastfetch
elif [ "$PACKAGER" = "xbps-install" ]; then
${SUDO_CMD} ${PACKAGER} -v ${DEPENDENCIES}
elif [ "$PACKAGER" = "nix-env" ]; then
${SUDO_CMD} ${PACKAGER} -iA nixos.bash nixos.bash-completion nixos.gnutar nixos.neovim nixos.bat nixos.tree nixos.multitail nixos.fastfetch nixos.pkgs.starship
elif [[ "$PACKAGER" == "dnf" ]]; then
${SUDO_CMD} ${PACKAGER} install -y ${DEPENDENCIES}
else
${SUDO_CMD} ${PACKAGER} install -yq ${DEPENDENCIES}
fi
# Check to see if the FiraCode Nerd Font is installed (Change this to whatever font you would like)
FONT_NAME="FiraCode Nerd Font"
if fc-list :family | grep -iq "$FONT_NAME"; then
echo "Font '$FONT_NAME' is installed."
else
echo "Installing font '$FONT_NAME'"
# Change this URL to correspond with the correct font
FONT_URL="https://github.com/ryanoasis/nerd-fonts/releases/download/v2.3.3/FiraCode.zip"
FONT_DIR="$HOME/.local/share/fonts"
wget $FONT_URL -O ${FONT_NAME}.zip
unzip ${FONT_NAME}.zip -d $FONT_NAME
mkdir -p $FONT_DIR
mv ${FONT_NAME}/*.ttf $FONT_DIR/
# Update the font cache
fc-cache -fv
# delete the files created from this
rm -rf ${FONT_NAME} ${FONT_NAME}.zip
echo "'$FONT_NAME' installed successfully."
fi
}
installStarshipAndFzf() {
if command_exists starship; then
echo "Starship already installed"
return
fi
if ! curl -sS https://starship.rs/install.sh | sh; then
echo "${RED}Something went wrong during starship install!${RC}"
exit 1
fi
if command_exists fzf; then
echo "Fzf already installed"
else
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
fi
}
installZoxide() {
if command_exists zoxide; then
echo "Zoxide already installed"
return
fi
if ! curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh; then
echo "${RED}Something went wrong during zoxide install!${RC}"
exit 1
fi
}
install_additional_dependencies() {
# we have PACKAGER so just use it
# for now just going to return early as we have already installed neovim in `installDepend`
# so I am not sure why we are trying to install it again
return
case "$PACKAGER" in
*apt)
if [ ! -d "/opt/neovim" ]; then
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim.appimage
chmod u+x nvim.appimage
./nvim.appimage --appimage-extract
${SUDO_CMD} mv squashfs-root /opt/neovim
${SUDO_CMD} ln -s /opt/neovim/AppRun /usr/bin/nvim
fi
;;
*zypper)
${SUDO_CMD} zypper refresh
${SUDO_CMD} zypper -n install neovim # -y doesn't work on opensuse -n is short for -non-interactive which is equivalent to -y
;;
*dnf)
${SUDO_CMD} dnf check-update
${SUDO_CMD} dnf install -y neovim
;;
*pacman)
${SUDO_CMD} pacman -Syu
${SUDO_CMD} pacman -S --noconfirm neovim
;;
*)
echo "No supported package manager found. Please install neovim manually."
exit 1
;;
esac
}
create_fastfetch_config() {
## Get the correct user home directory.
USER_HOME=$(getent passwd "${SUDO_USER:-$USER}" | cut -d: -f6)
if [ ! -d "$USER_HOME/.config/fastfetch" ]; then
mkdir -p "$USER_HOME/.config/fastfetch"
fi
# Check if the fastfetch config file exists
if [ -e "$USER_HOME/.config/fastfetch/config.jsonc" ]; then
rm -f "$USER_HOME/.config/fastfetch/config.jsonc"
fi
ln -svf "$GITPATH/config.jsonc" "$USER_HOME/.config/fastfetch/config.jsonc" || {
echo "${RED}Failed to create symbolic link for fastfetch config${RC}"
exit 1
}
}
linkConfig() {
## Get the correct user home directory.
USER_HOME=$(getent passwd "${SUDO_USER:-$USER}" | cut -d: -f6)
## Check if a bashrc file is already there.
OLD_BASHRC="$USER_HOME/.bashrc"
if [ -e "$OLD_BASHRC" ]; then
echo "${YELLOW}Moving old bash config file to $USER_HOME/.bashrc.bak${RC}"
if ! mv "$OLD_BASHRC" "$USER_HOME/.bashrc.bak"; then
echo "${RED}Can't move the old bash config file!${RC}"
exit 1
fi
fi
echo "${YELLOW}Linking new bash config file...${RC}"
ln -svf "$GITPATH/.bashrc" "$USER_HOME/.bashrc" || {
echo "${RED}Failed to create symbolic link for .bashrc${RC}"
exit 1
}
ln -svf "$GITPATH/starship.toml" "$USER_HOME/.config/starship.toml" || {
echo "${RED}Failed to create symbolic link for starship.toml${RC}"
exit 1
}
}
checkEnv
installDepend
installStarshipAndFzf
installZoxide
install_additional_dependencies
create_fastfetch_config
if linkConfig; then
echo "${GREEN}Done!\nrestart your shell to see the changes.${RC}"
else
echo "${RED}Something went wrong!${RC}"
fi