forked from w3cj/dotfiles
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·159 lines (137 loc) · 5.63 KB
/
Copy pathsetup.sh
File metadata and controls
executable file
·159 lines (137 loc) · 5.63 KB
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
#!/bin/bash
# 定义当前脚本目录
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
echo "Script directory: $SCRIPT_DIR"
# 检查操作系统类型
OS_TYPE=$(uname)
echo "Operating System: $OS_TYPE"
# 安装 Homebrew(如果尚未安装),并在 Linux 上添加 Linuxbrew 路径
setup_brew() {
source "${SCRIPT_DIR}/setup_brew.sh"
}
# 安装 Bash 和 Zsh
setup_shells() {
source "${SCRIPT_DIR}/setup_shells.sh"
}
# 安装必要的软件
install_software() {
echo "Installing brew apps from brew-apps.txt..."
bash "${SCRIPT_DIR}/install_brew_apps.sh"
echo "Installing vim-plug for Vim..."
curl -fLo "$HOME/.vim/autoload/plug.vim" --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
echo "Installing vim-plug for Neovim..."
curl -fLo "$HOME/.local/share/nvim/site/autoload/plug.vim" --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
if ! command -v zoxide &> /dev/null 2>&1; then
echo "Installing zoxide..."
curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash
fi
if [ ! -d "$HOME/.nvm" ]; then
echo "Installing NVM..."
curl -o install.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh
chmod +x install.sh
bash install.sh
rm install.sh
fi
if ! command -v rustup &> /dev/null 2>&1; then
echo "Installing Rust..."
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
source "$HOME/.cargo/env"
fi
if [ ! -d "$HOME/miniconda3" ] || [ -z "$(ls -A "$HOME/miniconda3")" ]; then
echo "Installing Miniconda..."
mkdir -p $HOME/miniconda3
if [ "$OS_TYPE" = "Darwin" ]; then
ARCH=$(uname -m) # arm64 or x86_64
curl -o "$HOME/miniconda.sh" "https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-${ARCH}.sh"
elif [ "$OS_TYPE" = "Linux" ]; then
curl -o "$HOME/miniconda.sh" -sS https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
fi
bash "$HOME/miniconda.sh" -b -u -p "$HOME/miniconda3"
if [ $? -ne 0 ]; then
echo "Miniconda installation failed."
else
echo "Miniconda installation succeeded."
fi
rm "$HOME/miniconda.sh"
else
echo "Miniconda is already installed and not empty."
fi
# 安装 AWS CLI
if ! command -v aws &> /dev/null 2>&1; then
echo "Installing AWS CLI..."
if [ "$OS_TYPE" = "Darwin" ]; then
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg "AWSCLIV2.pkg" -target /
rm "AWSCLIV2.pkg"
elif [ "$OS_TYPE" = "Linux" ]; then
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
rm -rf awscliv2.zip aws
fi
else
echo "AWS CLI is already installed."
fi
echo "Creating necessary directories..."
mkdir -p "$HOME/.config/bat"
mkdir -p "$HOME/.config/ghostty"
mkdir -p "$HOME/.config/zellij"
mkdir -p "$HOME/.config"
mkdir -p "$HOME/.claude"
# Neovim uses the LazyVim config in this repo. Back up any existing config
# directory so we do not leave both init.lua and init.vim in place.
if [ -e "$HOME/.config/nvim" ] && [ ! -L "$HOME/.config/nvim" ]; then
backup_path="$HOME/.config/nvim.backup.$(date +%Y%m%d%H%M%S)"
echo "Backing up existing Neovim config to $backup_path"
mv "$HOME/.config/nvim" "$backup_path"
fi
echo "Creating symbolic links..."
ln -sf "$SCRIPT_DIR/.vimrc" "$HOME/.vimrc"
ln -sfn "$SCRIPT_DIR/lazyvim" "$HOME/.config/nvim"
ln -sf "$SCRIPT_DIR/.zshrc" "$HOME/.zshrc"
ln -sf "$SCRIPT_DIR/.gitconfig" "$HOME/.gitconfig"
ln -sf "$SCRIPT_DIR/.gitignore" "$HOME/.gitignore"
ln -sf "$SCRIPT_DIR/.bash_profile" "$HOME/.bash_profile"
ln -sf "$SCRIPT_DIR/.bashrc" "$HOME/.bashrc"
ln -sf "$SCRIPT_DIR/.commonrc" "$HOME/.commonrc"
ln -sf "$SCRIPT_DIR/.common_vimrc" "$HOME/.common_vimrc"
ln -sf "$SCRIPT_DIR/zellij/config.kdl" "$HOME/.config/zellij/config.kdl"
ln -sf "$SCRIPT_DIR/.editorconfig" "$HOME/.editorconfig"
ln -sf "$SCRIPT_DIR/.ideavimrc" "$HOME/.ideavimrc"
ln -sf "$SCRIPT_DIR/.aliases" "$HOME/.aliases"
ln -sf "$SCRIPT_DIR/.functions" "$HOME/.functions"
ln -sf "$SCRIPT_DIR/.tools" "$HOME/.tools"
ln -sf "$SCRIPT_DIR/.ripgreprc" "$HOME/.ripgreprc"
ln -sf "$SCRIPT_DIR/bat/config" "$HOME/.config/bat/config"
ln -sf "$SCRIPT_DIR/starship.toml" "$HOME/.config/starship.toml"
ln -sf "$SCRIPT_DIR/ghostty/config" "$HOME/.config/ghostty/config"
ln -sf "$SCRIPT_DIR/claude/CLAUDE.md" "$HOME/.claude/CLAUDE.md"
ln -sf "$SCRIPT_DIR/claude/RTK.md" "$HOME/.claude/RTK.md"
echo "Installing Vim and Neovim plugins..."
vim +PlugInstall +qall
nvim --headless "+Lazy! sync" +qa
echo "=================================================="
echo "Dotfiles setup completed successfully."
echo "Restart your shell (bash or zsh) to apply the settings"
echo "=================================================="
}
extra_macos_setup() {
# turn off accent chars by holding a key
defaults write -g ApplePressAndHoldEnabled -bool false
}
if [ "$OS_TYPE" = "Darwin" ]; then
setup_brew
setup_shells
install_software
extra_macos_setup
elif [ "$OS_TYPE" = "Linux" ]; then
setup_brew
setup_shells
install_software
else
echo "Unsupported operating system: $OS_TYPE"
exit 1
fi
echo "Done. Run './test.sh' to verify the setup."