lazy/init_sudo.sh
2023-10-23 22:47:20 +08:00

287 lines
7.5 KiB
Bash
Executable File

#!/bin/bash
scriptdir=$(dirname $(realpath $0))
tempdir=$(mktemp -d)
if [[ $EUID -eq 0 ]]; then
echo "This script should not be run as root."
exit 1
fi
if [[ $(sudo whoami) != "root" ]]; then
echo "Please get sudo access first."
exit 1
fi
# ============================================================
git_clone() {
local repo=$1
local dir=$2
if [ ! -d "$dir" ]; then
if [ "$3" = "--norecursive" ]; then
git clone --single-branch "$github/$repo" $dir
else
git clone --single-branch --recursive "$github/$repo" $dir
fi
fi
}
update_file() {
local A="$1"
local B="$2"
if [ -f "$A" ] && [ -f "$B" ] && [ "$(cat "$A")" != "$(cat "$B")" ]; then
cp "$A" "$B"
echo "File $B has been updated."
fi
}
# ============================================================
check_google_access() {
abroad=0
local response=$(curl -s -o /dev/null -w "%{http_code}" -m 5 "http://www.google.com")
if [ "$response" -eq 200 ]; then
abroad=1
echo "Internet: abroad"
github="https://github.com"
else
abroad=0
echo "Internet: internal"
github="https://g.nano.ac/https://github.com"
fi
}
update_files() {
update_file $scriptdir/files/ys-simple.zsh-theme ~/.oh-my-zsh/themes/ys-simple.zsh-theme
}
configure_ssh() {
[ -f ~/.ssh/authorized_keys ] && return
read -p "要配置 authorized_keys 吗?[Y]: " response
if [[ -z "$response" ]] || [[ $response =~ ^[Yy]$ ]]; then
mkdir -p ~/.ssh
cp $scriptdir/files/authorized_keys ~/.ssh/authorized_keys
fi
}
configure_ssh_keygen() {
[ -f ~/.ssh/id_ed25519.pub ] && return
read -p "要生成 sshkey 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
mkdir -p ~/.ssh
read -p "sshkey 的名字: " sshkeyname
ssh-keygen -t ed25519 -C $sshkeyname
fi
}
configure_nano() {
[ -f ~/.nanorc ] && return
read -p "要配置 nano 吗?[Y]: " response
if [[ -z "$response" ]] || [[ $response =~ ^[Yy]$ ]]; then
sudo apt install nano -y
cp $scriptdir/files/.nanorc ~/.nanorc
fi
}
configure_vim() {
[ -f ~/.vimrc ] && return
read -p "要配置 vim 吗?[Y]: " response
if [[ -z "$response" ]] || [[ $response =~ ^[Yy]$ ]]; then
sudo apt install vim -y
cp $scriptdir/files/.vimrc ~/.vimrc
fi
}
configure_tuna() {
[ $abroad -eq 1 ] && return
read -p "要切换 Tuna 源吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
python3 $scriptdir/files/oh-my-tuna.py
sudo python3 $scriptdir/files/oh-my-tuna.py
fi
}
configure_apt_upgrade() {
read -p "要运行 apt upgrade 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
sudo apt update
sudo apt upgrade -y
sudo apt autoremove -y
fi
}
configure_install() {
read -p "要运行 apt/pip3 install 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
sudo apt update
sudo apt install tmux git curl htop net-tools tcptraceroute tar unzip -y
sudo apt install hexyl bat neofetch fd-find fzf -y
pip3 install trash-cli
sudo apt install exa -y
if [ $? -ne 0 ]; then
unzip $scriptdir/files/exa-linux-x86_64-v0.10.1.zip -d $tempdir/exa
sudo cp $tempdir/exa/bin/* /usr/local/bin/
sudo cp $tempdir/exa/man/* /usr/share/man/man1/
sudo cp $tempdir/exa/completions/exa.zsh /usr/local/share/zsh/site-functions
rm $tempdir/exa -r
fi
fi
}
configure_zsh() {
[ -f ~/.zshrc ] && return
read -p "要配置 zsh 吗?[Y]: " response
if [[ -z "$response" ]] || [[ $response =~ ^[Yy]$ ]]; then
sudo apt install zsh -y
rm ~/.oh-my-zsh -r
git_clone ohmyzsh/ohmyzsh ~/.oh-my-zsh
RUNZSH=no ZSH=~/.oh-my-zsh $scriptdir/files/install-ohmyzsh.sh
git_clone zsh-users/zsh-autosuggestions ~/.oh-my-zsh/plugins/zsh-autosuggestions
git_clone zsh-users/zsh-syntax-highlighting ~/.oh-my-zsh/plugins/zsh-syntax-highlighting
git_clone paulirish/git-open ~/.oh-my-zsh/plugins/git-open --norecursive
sudo apt install autojump -y
cp $scriptdir/files/.zshrc ~/.zshrc
cp $scriptdir/files/ys-simple.zsh-theme ~/.oh-my-zsh/themes/ys-simple.zsh-theme
fi
}
configure_tmux() {
[ -f ~/.tmux.conf ] && return
read -p "要配置 tmux 吗?[Y]: " response
if [[ -z "$response" ]] || [[ $response =~ ^[Yy]$ ]]; then
sudo apt install tmux -y
rm ~/.tmux -r
git_clone tmux-plugins/tpm ~/.tmux/plugins/tpm --norecursive
git_clone tmux-plugins/tmux-sensible ~/.tmux/plugins/tmux-sensible
git_clone tmux-plugins/tmux-yank ~/.tmux/plugins/tmux-yank
git_clone tmux-plugins/tmux-prefix-highlight ~/.tmux/plugins/tmux-prefix-highlight
git_clone seebi/tmux-colors-solarized ~/.tmux/plugins/tmux-colors-solarized
cp $scriptdir/files/.tmux.conf ~/.tmux.conf
sudo apt install xsel -y # 能够让 tmux 剪切板与 terminal 同步
fi
}
configure_iptables() {
[ -f /etc/network/if-pre-up.d/iptables-load ] && return
read -p "要配置 iptables 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
sudo cp $scriptdir/files/iptables-load /etc/network/if-pre-up.d/iptables-load
sudo chmod +x /etc/network/if-pre-up.d/iptables-load
sudo sh /etc/network/if-pre-up.d/iptables-load
fi
}
configure_hostname() {
read -p "要修改 hostname 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
read -p "hostname: " new_hostname
echo $new_hostname | sudo tee /etc/hostname >/dev/null
fi
}
configure_timedate() {
read -p "要修改 时区 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
sudo timedatectl set-timezone Asia/Shanghai
fi
}
configure_fail2ban() {
[ -f /etc/fail2ban/jail.local ] && return
read -p "要配置 fail2ban 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
sudo apt install fail2ban
sudo mkdir -p /etc/fail2ban
sudo cp $scriptdir/files/jail.local /etc/fail2ban/jail.local
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo fail2ban-client status sshd
fi
}
configure_miniconda() {
[ -d ~/.miniconda3 ] && return
read -p "要安装 miniconda 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O $tempdir/miniconda.sh
bash $tempdir/miniconda.sh -b -p ~/.miniconda3
rm $tempdir/miniconda.sh
~/.miniconda3/bin/conda init zsh
~/.miniconda3/bin/conda config --set changeps1 False
~/.miniconda3/bin/conda install -c conda-forge mamba
fi
}
configure_git() {
[ -f ~/.gitconfig ] && return
read -p "要配置 git 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
cp $scriptdir/files/.gitconfig ~/.gitconfig
fi
}
configure_docker_rootless() {
[ -f ~/.config/docker/daemon.json ] && return
read -p "要配置 Docker (Rootless mode) 吗?[N]: " response
if [[ $response =~ ^[Yy]$ ]]; then
cp $scriptdir/files/docker-rootless-daemon.json ~/.config/docker/daemon.json
fi
}
check_google_access
update_files
configure_ssh
configure_ssh_keygen
configure_nano
configure_vim
configure_tuna
configure_apt_upgrade
configure_install
configure_zsh
configure_tmux
configure_iptables
configure_hostname
configure_timedate
configure_fail2ban
configure_miniconda
configure_git
# configure_docker_rootless