mirror of
https://github.com/Dichgrem/dotfiles.git
synced 2026-02-04 16:31:55 -05:00
update:setup.sh
This commit is contained in:
199
setup_ubuntu.sh
199
setup_ubuntu.sh
@@ -1,93 +1,173 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
if [ "$EUID" -eq 0 ]; then
|
||||||
|
echo "❌ 请不要以 root 用户运行此脚本"
|
||||||
|
echo " 脚本会提示输入密码来安装需要 root 权限的软件"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 基础软件
|
# 基础软件
|
||||||
# =============================
|
# =============================
|
||||||
sudo apt update
|
echo ">>> 检查基础软件..."
|
||||||
sudo apt install -y \
|
PACKAGES="build-essential curl wget git unzip ca-certificates gnupg lsb-release software-properties-common zsh neovim eza fzf zoxide"
|
||||||
build-essential curl wget git unzip \
|
TO_INSTALL=""
|
||||||
ca-certificates gnupg lsb-release software-properties-common \
|
|
||||||
zsh neovim eza fzf zoxide
|
for pkg in $PACKAGES; do
|
||||||
|
if ! dpkg -l | grep -q "^ii $pkg "; then
|
||||||
|
TO_INSTALL="$TO_INSTALL $pkg"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$TO_INSTALL" ]; then
|
||||||
|
echo " 需要安装:$TO_INSTALL"
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y $TO_INSTALL
|
||||||
|
else
|
||||||
|
echo " ✓ 基础软件已安装"
|
||||||
|
fi
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 安装 Docker
|
# 安装 Docker
|
||||||
# =============================
|
# =============================
|
||||||
echo ">>> Installing Docker..."
|
echo ">>> 检查 Docker..."
|
||||||
|
if ! command -v docker >/dev/null 2>&1; then
|
||||||
|
echo ">>> Installing Docker..."
|
||||||
|
|
||||||
sudo install -m 0755 -d /etc/apt/keyrings
|
sudo install -m 0755 -d /etc/apt/keyrings
|
||||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
|
|
||||||
echo \
|
echo \
|
||||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
|
||||||
https://download.docker.com/linux/ubuntu \
|
https://download.docker.com/linux/ubuntu \
|
||||||
$(lsb_release -sc) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
$(lsb_release -sc) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||||
|
else
|
||||||
|
echo " ✓ Docker 已安装"
|
||||||
|
fi
|
||||||
|
|
||||||
# 加入 Docker 组(避免 sudo)
|
if ! groups | grep -q docker; then
|
||||||
sudo usermod -aG docker "$USER"
|
sudo usermod -aG docker "$USER"
|
||||||
echo ">>> Added $USER to docker group"
|
echo ">>> Added $USER to docker group"
|
||||||
|
else
|
||||||
|
echo " ✓ 用户已在 docker 组中"
|
||||||
|
fi
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 安装 Atuin
|
# 安装 Atuin
|
||||||
# =============================
|
# =============================
|
||||||
echo ">>> Installing Atuin..."
|
echo ">>> 检查 Atuin..."
|
||||||
curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh | bash
|
if ! command -v atuin >/dev/null 2>&1; then
|
||||||
|
echo ">>> Installing Atuin..."
|
||||||
|
curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh | bash
|
||||||
|
else
|
||||||
|
echo " ✓ Atuin 已安装"
|
||||||
|
fi
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 安装 Starship
|
# 安装 Starship
|
||||||
# =============================
|
# =============================
|
||||||
echo ">>> Installing Starship..."
|
echo ">>> 检查 Starship..."
|
||||||
curl -sS https://starship.rs/install.sh | sh -s -- -y
|
if ! command -v starship >/dev/null 2>&1; then
|
||||||
|
echo ">>> Installing Starship..."
|
||||||
|
curl -sS https://starship.rs/install.sh | sh -s -- -y
|
||||||
|
else
|
||||||
|
echo " ✓ Starship 已安装"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# =============================
|
||||||
|
# 安装 Fastfetch
|
||||||
|
# =============================
|
||||||
|
echo ">>> 检查 Fastfetch..."
|
||||||
|
if ! command -v fastfetch >/dev/null 2>&1; then
|
||||||
|
echo ">>> Installing Fastfetch..."
|
||||||
|
|
||||||
|
ARCH=$(uname -m)
|
||||||
|
case $ARCH in
|
||||||
|
x86_64)
|
||||||
|
ARCH="amd64"
|
||||||
|
;;
|
||||||
|
aarch64)
|
||||||
|
ARCH="aarch64"
|
||||||
|
;;
|
||||||
|
armv7l)
|
||||||
|
ARCH="armv7"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo " ⚠️ 不支持的架构: $ARCH"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "aarch64" ] && [ "$ARCH" != "armv7" ]; then
|
||||||
|
echo " ⚠️ 跳过 Fastfetch 安装"
|
||||||
|
else
|
||||||
|
FASTFETCH_VERSION=$(curl -s "https://api.github.com/repos/fastfetch-cli/fastfetch/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
||||||
|
FASTFETCH_URL="https://github.com/fastfetch-cli/fastfetch/releases/download/${FASTFETCH_VERSION}/fastfetch-linux-${ARCH}.deb"
|
||||||
|
|
||||||
|
TEMP_DEB="/tmp/fastfetch.deb"
|
||||||
|
wget -O "$TEMP_DEB" "$FASTFETCH_URL"
|
||||||
|
sudo dpkg -i "$TEMP_DEB" || sudo apt install -f -y
|
||||||
|
rm -f "$TEMP_DEB"
|
||||||
|
echo " ✓ Fastfetch 安装完成"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " ✓ Fastfetch 已安装"
|
||||||
|
fi
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 安装 JetBrainsMono Nerd Font
|
# 安装 JetBrainsMono Nerd Font
|
||||||
# =============================
|
# =============================
|
||||||
|
echo ">>> 检查 Nerd Font..."
|
||||||
FONT_NAME="JetBrainsMono"
|
FONT_NAME="JetBrainsMono"
|
||||||
ZIP_URL="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${FONT_NAME}.zip"
|
ZIP_URL="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${FONT_NAME}.zip"
|
||||||
ZIP_FILE="/tmp/${FONT_NAME}.zip"
|
ZIP_FILE="/tmp/${FONT_NAME}.zip"
|
||||||
FONT_DIR="$HOME/.local/share/fonts"
|
FONT_DIR="$HOME/.local/share/fonts"
|
||||||
|
|
||||||
echo ">>> Downloading Nerd Font..."
|
if [ ! -f "$FONT_DIR/JetBrains Mono Nerd Font Mono.ttf" ]; then
|
||||||
|
echo ">>> Downloading Nerd Font..."
|
||||||
|
|
||||||
mkdir -p "$FONT_DIR"
|
mkdir -p "$FONT_DIR"
|
||||||
|
|
||||||
# 下载失败自动切换 FastGit
|
wget -O "$ZIP_FILE" "$ZIP_URL" || \
|
||||||
wget -O "$ZIP_FILE" "$ZIP_URL" || \
|
wget -O "$ZIP_FILE" "https://download.fastgit.org/ryanoasis/nerd-fonts/releases/latest/download/${FONT_NAME}.zip"
|
||||||
wget -O "$ZIP_FILE" "https://download.fastgit.org/ryanoasis/nerd-fonts/releases/latest/download/${FONT_NAME}.zip"
|
|
||||||
|
|
||||||
unzip -o "$ZIP_FILE" -d "$FONT_DIR"
|
unzip -o "$ZIP_FILE" -d "$FONT_DIR"
|
||||||
fc-cache -fv
|
fc-cache -fv
|
||||||
|
echo " ✓ Nerd Font 安装完成"
|
||||||
|
else
|
||||||
|
echo " ✓ Nerd Font 已安装"
|
||||||
|
fi
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 安装 zsh 插件
|
# 安装 zsh 插件
|
||||||
# =============================
|
# =============================
|
||||||
echo ">>> Installing zsh plugins..."
|
echo ">>> 检查 zsh 插件..."
|
||||||
|
|
||||||
PLUGIN_DIR="$HOME/.config/zsh/plugins"
|
PLUGIN_DIR="$HOME/.config/zsh/plugins"
|
||||||
mkdir -p "$PLUGIN_DIR"
|
mkdir -p "$PLUGIN_DIR"
|
||||||
|
|
||||||
# zsh-autosuggestions
|
install_plugin() {
|
||||||
if [ ! -d "$PLUGIN_DIR/zsh-autosuggestions" ]; then
|
local name=$1
|
||||||
git clone https://github.com/zsh-users/zsh-autosuggestions "$PLUGIN_DIR/zsh-autosuggestions"
|
local url=$2
|
||||||
fi
|
if [ ! -d "$PLUGIN_DIR/$name" ]; then
|
||||||
|
git clone "$url" "$PLUGIN_DIR/$name"
|
||||||
|
echo " ✓ $name 安装完成"
|
||||||
|
else
|
||||||
|
echo " ✓ $name 已安装"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# syntax-highlighting
|
install_plugin "zsh-autosuggestions" "https://github.com/zsh-users/zsh-autosuggestions"
|
||||||
if [ ! -d "$PLUGIN_DIR/zsh-syntax-highlighting" ]; then
|
install_plugin "zsh-syntax-highlighting" "https://github.com/zsh-users/zsh-syntax-highlighting"
|
||||||
git clone https://github.com/zsh-users/zsh-syntax-highlighting "$PLUGIN_DIR/zsh-syntax-highlighting"
|
install_plugin "fzf-tab" "https://github.com/Aloxaf/fzf-tab"
|
||||||
fi
|
|
||||||
|
|
||||||
# fzf-tab
|
|
||||||
if [ ! -d "$PLUGIN_DIR/fzf-tab" ]; then
|
|
||||||
git clone https://github.com/Aloxaf/fzf-tab "$PLUGIN_DIR/fzf-tab"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 生成 .zshrc
|
# 生成 .zshrc
|
||||||
# =============================
|
# =============================
|
||||||
echo ">>> Generating ~/.zshrc..."
|
echo ">>> 生成 ~/.zshrc..."
|
||||||
|
|
||||||
cat > ~/.zshrc << 'EOF'
|
cat > ~/.zshrc << 'EOF'
|
||||||
# ========================
|
# ========================
|
||||||
@@ -110,17 +190,14 @@ setopt HIST_IGNORE_DUPS HIST_IGNORE_SPACE SHARE_HISTORY INC_APPEND_HISTORY
|
|||||||
# Tools Integration
|
# Tools Integration
|
||||||
# ========================
|
# ========================
|
||||||
if [[ -o interactive ]]; then
|
if [[ -o interactive ]]; then
|
||||||
# AtuIn
|
|
||||||
if command -v atuin >/dev/null 2>&1; then
|
if command -v atuin >/dev/null 2>&1; then
|
||||||
eval "$(atuin init zsh)"
|
eval "$(atuin init zsh)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# zoxide
|
|
||||||
if command -v zoxide >/dev/null 2>&1; then
|
if command -v zoxide >/dev/null 2>&1; then
|
||||||
eval "$(zoxide init zsh)"
|
eval "$(zoxide init zsh)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# starship
|
|
||||||
if command -v starship >/dev/null 2>&1; then
|
if command -v starship >/dev/null 2>&1; then
|
||||||
eval "$(starship init zsh)"
|
eval "$(starship init zsh)"
|
||||||
fi
|
fi
|
||||||
@@ -169,28 +246,44 @@ if ! command -v starship >/dev/null 2>&1; then
|
|||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
echo " ✓ .zshrc 已生成"
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 设置 GNOME Terminal 字体
|
# 设置 GNOME Terminal 字体
|
||||||
# =============================
|
# =============================
|
||||||
|
echo ">>> 检查 GNOME Terminal 字体..."
|
||||||
if command -v gsettings >/dev/null; then
|
if command -v gsettings >/dev/null; then
|
||||||
if gsettings list-schemas | grep -q "org.gnome.Terminal"; then
|
if gsettings list-schemas | grep -q "org.gnome.Terminal"; then
|
||||||
echo ">>> Setting GNOME Terminal font..."
|
|
||||||
|
|
||||||
PROFILE_ID=$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d "'")
|
PROFILE_ID=$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d "'")
|
||||||
PROFILE_PATH="org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$PROFILE_ID/"
|
PROFILE_PATH="org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$PROFILE_ID/"
|
||||||
|
CURRENT_FONT=$(gsettings get "$PROFILE_PATH" font 2>/dev/null | tr -d "'")
|
||||||
|
|
||||||
|
if [ "$CURRENT_FONT" != "JetBrainsMono Nerd Font Mono 14" ]; then
|
||||||
|
echo ">>> Setting GNOME Terminal font..."
|
||||||
gsettings set "$PROFILE_PATH" font 'JetBrainsMono Nerd Font Mono 14' || true
|
gsettings set "$PROFILE_PATH" font 'JetBrainsMono Nerd Font Mono 14' || true
|
||||||
|
echo " ✓ 字体已设置"
|
||||||
else
|
else
|
||||||
echo "⚠️ 检测到不是 GNOME Terminal,跳过字体设置。"
|
echo " ✓ 字体已正确设置"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " ⚠️ 检测到不是 GNOME Terminal,跳过字体设置"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "⚠️ gsettings 不可用,跳过终端字体设置。"
|
echo " ⚠️ gsettings 不可用,跳过终端字体设置"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# =============================
|
# =============================
|
||||||
# 更改默认 shell 为 zsh
|
# 更改默认 shell 为 zsh
|
||||||
# =============================
|
# =============================
|
||||||
echo ">>> Changing default shell to zsh..."
|
echo ">>> 检查默认 shell..."
|
||||||
chsh -s "$(which zsh)"
|
CURRENT_SHELL=$(getent passwd "$USER" | cut -d: -f7)
|
||||||
|
if [ "$CURRENT_SHELL" != "$(which zsh)" ]; then
|
||||||
|
echo ">>> Changing default shell to zsh..."
|
||||||
|
sudo chsh -s "$(which zsh)" "$USER"
|
||||||
|
echo " ✓ 默认 shell 已设置为 zsh"
|
||||||
|
else
|
||||||
|
echo " ✓ 默认 shell 已是 zsh"
|
||||||
|
fi
|
||||||
|
|
||||||
echo ">>> 完成!重新登录即可生效所有配置。"
|
echo ""
|
||||||
|
echo ">>> ✓ 完成!重新登录即可生效所有配置。"
|
||||||
|
|||||||
Reference in New Issue
Block a user