Last active 4 months ago

ZSH installer script, by default all options are disabled.

Revision 4c235e38091508f503d7c426395f28974bc8680c

install-zsh.sh Raw
1#!/bin/bash
2
3DATE=$(date '+%F') # Date in this format e.g. 2024-01-21
4TIME=$(date '+%I:%M %p') # Time in this format e.g. 3:40PM
5
6# By default all of these options are set to false.
7
8# Install ZSH and oy mh zsh
9INSTALL_ZSH=false
10# Install the .zshrc file
11INSTALL_ZSH_FILE=false
12# Install power level10k
13INSTALL_P10K=false
14# Install the zsh plugins
15INSTALL_ZSH_PLUGINS=false
16# Backup the ZSH file
17BACKUP_ZSH_FILE=false
18ZSH_FILE=https://gist.kelsoncraft.net/kelson8/b469849533e34e9683012e08e0099e74/raw/HEAD/.zshrc
19ZSH_USER_PATH="/home/$USER/.zshrc"
20
21# New options for root, this is for installing ZSH to the root user.
22ZSH_ROOT_PATH="/root/.zshrc"
23# If this is set to true, this will install zshrc and powerlevel10k
24# to the root user instaed of the current user.
25ZSH_ROOT_MODE=false
26
27# This needs git and curl installed on a base Debian 12 install.
28
29function install_zsh(){
30 # TODO Check if zsh is currently installed, untested
31 # This seems to not attempt to reinstall zsh if it sees the file
32 # but I don't know if it'll install it if it doesn't see it.
33 if [ ! -f "/bin/zsh" ]; then
34
35 # TODO Check if installing system is debian or arch
36 if [ -f "/etc/arch-release" ]; then
37 sudo pacman -S zsh -y
38 fi
39
40 # This part of the script is confirmed tested and working on Debian 12
41 # This seems to exist on both Ubuntu 24.04 and Debian 12
42 if [ -f "/etc/debian_version" ]; then
43 sudo apt install zsh -y
44 fi
45 #
46 fi
47
48 if [ "$ZSH_ROOT_MODE" == "true" ]; then
49 # Switch to root user folder.
50 cd "/root" || exit
51 # Setup oh my zsh
52 sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
53
54 # Backup current .zshrc and replace it if the option is enabled
55 if [ "$BACKUP_ZSH_FILE" == "true" ]; then
56 cp "/root/.zshrc" "/root/.zshrc.bak"
57 fi
58
59 if [ "$INSTALL_ZSH_FILE" == "true" ]; then
60 install_zsh_file
61 fi
62
63 # Print the date and time, and that it was installed.
64 echo "$DATE @ $TIME Zsh installed for root user!"
65 # Regular user install
66 else
67 cd "/home/$USER" || exit
68 # Setup oh my zsh
69 sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
70
71
72 # Backup current .zshrc and replace it if the option is enabled
73 if [ "$BACKUP_ZSH_FILE" == "true" ]; then
74 cp "/home/$USER/.zshrc" "/home/$USER/.zshrc.bak"
75 fi
76
77 if [ "$INSTALL_ZSH_FILE" == "true" ]; then
78 install_zsh_file
79 fi
80
81 # This already asks the user to replace the current shell, disabled
82 # sudo -u "$USER" chsh -s /bin/zsh
83
84 # Print the date and time, and that it was installed.
85 echo "$DATE @ $TIME Zsh installed for user $USER!"
86
87 fi
88}
89
90# Put the zsh file from the git url into the path set above.
91# Changed this to work with root or regular user.
92function install_zsh_file() {
93 if [ "$ZSH_ROOT_MODE" == "true" ]; then
94 wget $ZSH_FILE -O "$ZSH_ROOT_PATH"
95 else
96 wget $ZSH_FILE -O "$ZSH_USER_PATH"
97 fi
98}
99
100function install_p10k() {
101 if [ "$ZSH_ROOT_MODE" == "true" ]; then
102 # Root user install
103 # Install powerlevel10k
104 git clone https://github.com/romkatv/powerlevel10k.git "/root/.oh-my-zsh/custom/themes/powerlevel10k"
105 # Regular user install
106 else
107 # Install powerlevel10k, I had to add $USERHOME since sudo was putting it in /themes/
108 git clone https://github.com/romkatv/powerlevel10k.git "/home/$USER/.oh-my-zsh/custom/themes/powerlevel10k"
109 fi
110}
111
112function install_zsh_plugins() {
113 if [ "$ZSH_ROOT_MODE" == "true" ]; then
114 # Root user install
115 # Syntax highlighting
116 git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "/root/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting"
117 # Auto suggestions
118 git clone https://github.com/zsh-users/zsh-autosuggestions "/root/.oh-my-zsh/custom/plugins/zsh-autosuggestions"
119 # Oh my zsh auto update
120 git clone https://github.com/Pilaton/OhMyZsh-full-autoupdate.git "/root/.oh-my-zsh/custom/plugins/ohmyzsh-full-autoupdate"
121
122 # Regular user install
123 else
124 # Syntax highlighting
125 git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "/home/$USER/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting"
126 # Auto suggestions
127 git clone https://github.com/zsh-users/zsh-autosuggestions "/home/$USER/.oh-my-zsh/custom/plugins/zsh-autosuggestions"
128 # Oh my zsh auto update
129 git clone https://github.com/Pilaton/OhMyZsh-full-autoupdate.git "/home/$USER/.oh-my-zsh/custom/plugins/ohmyzsh-full-autoupdate"
130 fi
131}
132
133function main() {
134 # Make sure git is installed, if not exit
135 if ! git --version >/dev/null 2>&1
136 then
137 echo "Git is not installed! It is required for this to run."
138 exit 1
139 fi
140
141 # Install zsh
142 if [ $INSTALL_ZSH == "true" ]; then
143 install_zsh
144 fi
145
146 # Install power level 10k
147 if [ $INSTALL_P10K == "true" ]; then
148 install_p10k
149 fi
150
151 # Install my custom plugins
152 if [ $INSTALL_ZSH_PLUGINS == "true" ]; then
153 install_zsh_plugins
154 fi
155
156 # This already runs if install zsh is enabled, do nothing if it's enabled.
157 if [ $INSTALL_ZSH == "false" ] && [ "$INSTALL_ZSH_FILE" == "true" ]; then
158 install_zsh_file
159 fi
160}
161
162main
163