refactor: streamline local environment defaults

Improve shell and setup resilience, clean package definitions, and remove the hardcoded Alacritty startup directory so the dotfiles behave more predictably across machines.
This commit is contained in:
2026-03-23 16:38:15 +08:00
parent 0b5df66b87
commit c0a19555c1
6 changed files with 66 additions and 86 deletions

54
.zshrc
View File

@@ -26,7 +26,11 @@ export MANPAGER="sh -c \"col -b | vim -c 'set ft=man ts=8 nomod nolist nonu' \
-c 'nnoremap i <nop>' \ -c 'nnoremap i <nop>' \
-c 'nnoremap <Space> <C-f>' \ -c 'nnoremap <Space> <C-f>' \
-c 'noremap q :quit<CR>' -\"" -c 'noremap q :quit<CR>' -\""
export KUBECONFIG=$(echo `ls ~/.kube/*config*` | sed 's/ /:/g') typeset -a kubeconfigs
kubeconfigs=("$HOME"/.kube/*config*(N))
if (( ${#kubeconfigs[@]} )); then
export KUBECONFIG="${(j/:/)kubeconfigs}"
fi
export HELM_CACHE_HOME=$HOME/.cache/helm export HELM_CACHE_HOME=$HOME/.cache/helm
export FZF_DEFAULT_OPTS="--height=50% --layout=reverse" export FZF_DEFAULT_OPTS="--height=50% --layout=reverse"
export GPG_TTY=$(tty) export GPG_TTY=$(tty)
@@ -45,7 +49,7 @@ export ZSH_HIGHLIGHT_MAXLENGTH=60
export GIT_EXTERNAL_DIFF=difft export GIT_EXTERNAL_DIFF=difft
FPATH="$brew_opt/share/zsh/site-functions:${ASDF_DIR}/completions:${FPATH}" FPATH="$brew_opt/share/zsh/site-functions:${FPATH}"
DISABLE_MAGIC_FUNCTIONS=true DISABLE_MAGIC_FUNCTIONS=true
HISTSIZE=10000 # Number of commands to remember in memory (in-session) HISTSIZE=10000 # Number of commands to remember in memory (in-session)
@@ -53,23 +57,27 @@ SAVEHIST=50000 # Number of commands to save to the history file
HISTFILE=~/.zsh_history # File where history is stored HISTFILE=~/.zsh_history # File where history is stored
source $HOME/.antigen/antigen.zsh if [ -f "$HOME/.antigen/antigen.zsh" ]; then
antigen use oh-my-zsh source "$HOME/.antigen/antigen.zsh"
antigen bundle zsh-users/zsh-autosuggestions antigen use oh-my-zsh
antigen bundle zsh-users/zsh-syntax-highlighting antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-completions antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle git antigen bundle zsh-users/zsh-completions
antigen bundle kubectl antigen bundle git
antigen bundle autojump antigen bundle kubectl
antigen bundle pip antigen bundle autojump
antigen bundle asdf antigen bundle pip
antigen bundle nvim antigen bundle nvim
antigen bundle darvid/zsh-poetry antigen bundle darvid/zsh-poetry
antigen bundle Aloxaf/fzf-tab antigen bundle Aloxaf/fzf-tab
antigen bundle vi-mode antigen bundle vi-mode
#antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv #antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
# antigen bundle jeffreytse/zsh-vi-mode # antigen bundle jeffreytse/zsh-vi-mode
antigen apply antigen apply
else
mkdir $HOME/.antigen
curl -L git.io/antigen > $HOME/.antigen/antigen.zsh
fi
# menu # menu
@@ -276,12 +284,12 @@ function bitnami_seal() {
} }
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
eval "$(starship init zsh)" command -v starship >/dev/null 2>&1 && eval "$(starship init zsh)"
eval "$(direnv hook zsh)" command -v direnv >/dev/null 2>&1 && eval "$(direnv hook zsh)"
alias ta='tmux a' alias ta='tmux a'
alias tl='tmux ls && read session && tmux attach -t ${session:-default} || tmux new -s ${session:-default}' alias tl='tmux ls && read session && tmux attach -t ${session:-default} || tmux new -s ${session:-default}'
alias ls='lsd' command -v lsd >/dev/null 2>&1 && alias ls='lsd'
alias l='ls -l' alias l='ls -l'
alias la='ls -a' alias la='ls -a'
alias lla='ls -la' alias lla='ls -la'
@@ -321,7 +329,7 @@ alias grep='ggrep'
[ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh [ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh
[ -f /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.zsh.inc ] && . /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.zsh.inc [ -f /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.zsh.inc ] && . /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/completion.zsh.inc
source <(fzf --zsh) command -v fzf >/dev/null 2>&1 && source <(fzf --zsh)
bindkey -M viins '^b' vi-backward-char bindkey -M viins '^b' vi-backward-char
bindkey -M viins '^f' vi-forward-char bindkey -M viins '^f' vi-forward-char

View File

@@ -1,8 +1,6 @@
tap "anomalyco/tap" tap "anomalyco/tap"
tap "farion1231/ccswitch" tap "farion1231/ccswitch"
tap "homebrew/cask"
tap "minio/stable" tap "minio/stable"
tap "telepresenceio/telepresence"
tap "vitobotta/tap" tap "vitobotta/tap"
brew "act" brew "act"
brew "argocd" brew "argocd"
@@ -28,8 +26,8 @@ brew "helm"
brew "helmfile" brew "helmfile"
brew "iperf3" brew "iperf3"
brew "k9s" brew "k9s"
brew "kubernetes-cli"
brew "kubectx" brew "kubectx"
brew "kubernetes-cli"
brew "lrzsz" brew "lrzsz"
brew "lsd" brew "lsd"
brew "lua" brew "lua"
@@ -43,10 +41,11 @@ brew "mysql-client@8.4"
brew "neofetch" brew "neofetch"
brew "neovim" brew "neovim"
brew "nexttrace" brew "nexttrace"
brew "ripgrep"
brew "opencode"
brew "postgresql@17", restart_service: :changed brew "postgresql@17", restart_service: :changed
brew "rclone" brew "rclone"
brew "redis", restart_service: :changed brew "redis", restart_service: :changed
brew "ripgrep"
brew "rustup" brew "rustup"
brew "starship" brew "starship"
brew "swiftformat" brew "swiftformat"
@@ -55,73 +54,48 @@ brew "trzsz-ssh"
brew "uv" brew "uv"
brew "wget" brew "wget"
brew "xcbeautify" brew "xcbeautify"
brew "xcode-build-server"
brew "yarn"
brew "zsh" brew "zsh"
brew "anomalyco/tap/opencode"
brew "minio/stable/mc" brew "minio/stable/mc"
brew "telepresenceio/telepresence/telepresence-oss"
brew "vitobotta/tap/hetzner_k3s" brew "vitobotta/tap/hetzner_k3s"
cask "1password" cask "1password"
cask "1password-cli"
cask "alacritty" cask "alacritty"
cask "alma"
cask "apifox" cask "apifox"
cask "appcleaner"
cask "battle-net"
cask "brave-browser" cask "brave-browser"
cask "farion1231/ccswitch/cc-switch" cask "farion1231/ccswitch/cc-switch"
cask "chatgpt" cask "chatgpt"
cask "cherry-studio" cask "cherry-studio"
cask "clash-party"
cask "claude" cask "claude"
cask "claude-code" cask "claude-code"
cask "codex" cask "codex"
cask "codex-app" cask "codex-app"
cask "copilot-cli" cask "copilot-cli"
cask "craft"
cask "cursor"
cask "daisydisk"
cask "datagrip" cask "datagrip"
cask "eudic" cask "feishu"
cask "figma"
cask "font-jetbrains-mono-nerd-font" cask "font-jetbrains-mono-nerd-font"
cask "font-maple-mono-nf-cn" cask "font-maple-mono-nf-cn"
cask "gcloud-cli"
cask "ghostty"
cask "github-copilot-for-xcode"
cask "google-chrome" cask "google-chrome"
cask "google-drive"
cask "intellij-idea-ce"
cask "jordanbaird-ice" cask "jordanbaird-ice"
cask "kiro" cask "kiro"
cask "mac-mouse-fix" cask "kiro-cli"
cask "netnewswire" cask "netnewswire"
cask "notion" cask "notion"
cask "obsidian" cask "obsidian"
cask "only-switch" cask "only-switch"
cask "orbstack" cask "orbstack"
cask "raycast" cask "raycast"
cask "sourcetree"
cask "spotify" cask "spotify"
cask "squirrel-app"
cask "stats" cask "stats"
cask "steam"
cask "telegram" cask "telegram"
cask "typeless" cask "typeless"
cask "visual-studio-code" cask "visual-studio-code@insiders"
cask "wechat" cask "wechat"
mas "HamHub", id: 6458691598 mas "1Password for Safari", id: 1569813296
mas "GarageBand", id: 682658836
mas "iMovie", id: 408981434
mas "Keynote", id: 409183694 mas "Keynote", id: 409183694
mas "Lark", id: 6449830127
mas "Numbers", id: 409203825 mas "Numbers", id: 409203825
mas "Pages", id: 409201541 mas "Pages", id: 409201541
mas "PDFgear", id: 6469021132
mas "Quantumult X", id: 1443988620
mas "SenPlayer", id: 6443975850
mas "Shadowrocket", id: 932747118
mas "sing-box", id: 6673731168
mas "The Unarchiver", id: 425424353
mas "Xcode", id: 497799835
vscode "anthropic.claude-code" vscode "anthropic.claude-code"
vscode "donjayamanne.githistory" vscode "donjayamanne.githistory"
vscode "dreamecho.git-blame-lens" vscode "dreamecho.git-blame-lens"

View File

@@ -8,7 +8,7 @@ live_config_reload = true
[terminal] [terminal]
# OSC 52 剪贴板支持 # OSC 52 剪贴板支持
osc52 = "CopyPaste" # Disabled, OnlyCopy, OnlyPaste, CopyPaste osc52 = "CopyPaste" # Disabled, OnlyCopy, OnlyPaste, CopyPaste
shell = { program = "/bin/zsh", args = ["-c", "cd ~/Workspace 2>/dev/null || true; exec zsh"] } shell = { program = "/bin/zsh" }
[selection] [selection]
semantic_escape_chars = ",│`|\"' ()[]{}<>" semantic_escape_chars = ",│`|\"' ()[]{}<>"

View File

@@ -1,10 +1,10 @@
[init] [init]
defaultBranch = main defaultBranch = main
[user] [user]
name = YOUR_NAME name = Li Tang
signingkey = YOUR_SSH_SIGNING_KEY signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPaVruhhL4O9BiAncnW1wH3jc7/hsqsXLknA8Xtnjjee
email = YOUR_EMAIL email = iamtangli42@gmail.com
[commit] [commit]
gpgsign = true gpgsign = true
@@ -20,7 +20,7 @@
[core] [core]
editor = nvim editor = nvim
excludesfile = ~/.config/git/.gitignore excludesfile = /Users/d0zingcat/.config/git/.gitignore
[pager] [pager]
difftool = true difftool = true

View File

@@ -21,7 +21,7 @@
"guihua.lua": { "branch": "master", "commit": "87bea7b98429405caf2a0ce4d029b027bb017c70" }, "guihua.lua": { "branch": "master", "commit": "87bea7b98429405caf2a0ce4d029b027bb017c70" },
"img-clip.nvim": { "branch": "main", "commit": "b6ddfb97b5600d99afe3452d707444afda658aca" }, "img-clip.nvim": { "branch": "main", "commit": "b6ddfb97b5600d99afe3452d707444afda658aca" },
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" }, "indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
"lazygit.nvim": { "branch": "main", "commit": "a04ad0dbc725134edbee3a5eea29290976695357" }, "lazygit.nvim": { "branch": "main", "commit": "a04ad0dbc725134edbee3a5eea29290976695357" },
"legendary.nvim": { "branch": "master", "commit": "6de819bc285eb8c420e49e82c21d5bb696b5a727" }, "legendary.nvim": { "branch": "master", "commit": "6de819bc285eb8c420e49e82c21d5bb696b5a727" },
"lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" }, "lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" },
@@ -47,8 +47,8 @@
"nvim-lspconfig": { "branch": "master", "commit": "8adb3b5938f6074a1bcc36d3c3916f497d2e8ec4" }, "nvim-lspconfig": { "branch": "master", "commit": "8adb3b5938f6074a1bcc36d3c3916f497d2e8ec4" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-notify": { "branch": "master", "commit": "b5825cf9ee881dd8e43309c93374ed5b87b7a896" }, "nvim-notify": { "branch": "master", "commit": "b5825cf9ee881dd8e43309c93374ed5b87b7a896" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-treesitter": { "branch": "main", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" }, "nvim-treesitter-textobjects": { "branch": "main", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" },
"nvim-ufo": { "branch": "main", "commit": "3c7a3570e9c9dc198a2ad4491b0b0e51c4d4ba08" }, "nvim-ufo": { "branch": "main", "commit": "3c7a3570e9c9dc198a2ad4491b0b0e51c4d4ba08" },
"nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" }, "nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
"oil.nvim": { "branch": "master", "commit": "5b6068aad7d2057dd399fac73b7fb2cdf23ccd6e" }, "oil.nvim": { "branch": "master", "commit": "5b6068aad7d2057dd399fac73b7fb2cdf23ccd6e" },
@@ -56,10 +56,9 @@
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" }, "project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" },
"promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" }, "promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" },
"rainbow-delimiters.nvim": { "branch": "master", "commit": "55ad4fb76ab68460f700599b7449385f0c4e858e" }, "rainbow-delimiters.nvim": { "branch": "master", "commit": "607a438d8c647a355749973fd295e33505afafde" },
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" }, "snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
"sniprun": { "branch": "master", "commit": "a90c65846c3c18efc3f799d8b6dc26af9d4a69ed" }, "sniprun": { "branch": "master", "commit": "a90c65846c3c18efc3f799d8b6dc26af9d4a69ed" },
"statuscol.nvim": { "branch": "main", "commit": "c46172d0911aa5d49ba5f39f4351d1bb7aa289cc" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" }, "telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" }, "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" }, "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },

View File

@@ -34,6 +34,7 @@ FILES=(
# Config directories to link # Config directories to link
CONFIG_FILES=( CONFIG_FILES=(
alacritty
git git
nvim nvim
tmux tmux
@@ -168,15 +169,6 @@ function cmd_init() {
print_success "Antigen already installed" print_success "Antigen already installed"
fi fi
# Install asdf
if [ ! -d "$HOME/.asdf" ]; then
print_warning "Installing asdf..."
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
print_success "asdf installed"
else
print_success "asdf already installed"
fi
# Create necessary directories # Create necessary directories
print_warning "Creating directories..." print_warning "Creating directories..."
mkdir -p "$HOME/.config/" mkdir -p "$HOME/.config/"
@@ -195,6 +187,10 @@ function cmd_init() {
function cmd_install() { function cmd_install() {
print_header "Installing Dotfiles Symlinks" print_header "Installing Dotfiles Symlinks"
mkdir -p "$HOME_DIR/.config"
mkdir -p "$HOME_DIR/.ssh"
mkdir -p "$HOME_DIR/.kube"
# Link files # Link files
print_warning "Linking files..." print_warning "Linking files..."
@@ -210,8 +206,7 @@ function cmd_install() {
# Link config directories # Link config directories
print_warning "Linking config directories..." print_warning "Linking config directories..."
for i in "${CONFIG_FILES[@]}"; do for i in "${CONFIG_FILES[@]}"; do
if [ -d "$WORKING_DIR/$i" ]; then if [ -e "$WORKING_DIR/$i" ]; then
mkdir -p "$HOME_DIR/.config"
ln -svfn "$WORKING_DIR/$i" "$HOME_DIR/.config/$i" ln -svfn "$WORKING_DIR/$i" "$HOME_DIR/.config/$i"
print_success "Linked: .config/$i" print_success "Linked: .config/$i"
else else
@@ -244,9 +239,13 @@ function cmd_install() {
if command_exists fzf; then if command_exists fzf; then
print_success "fzf already installed" print_success "fzf already installed"
elif command_exists brew; then elif command_exists brew; then
print_warning "Installing fzf..." if [ -x "$(brew --prefix)/opt/fzf/install" ]; then
$(brew --prefix)/opt/fzf/install --key-bindings --completion 2>/dev/null || true print_warning "Installing fzf shell integration..."
print_success "fzf installed" "$(brew --prefix)/opt/fzf/install" --key-bindings --completion --no-update-rc 2>/dev/null || true
print_success "fzf shell integration installed"
else
print_warning "fzf binary not found yet; run: brew bundle install"
fi
fi fi
print_header "Installation Complete!" print_header "Installation Complete!"
@@ -603,14 +602,14 @@ function cmd_check() {
local git_email=$(git config --file "$HOME_DIR/.gitconfig" user.email 2>/dev/null || echo "") local git_email=$(git config --file "$HOME_DIR/.gitconfig" user.email 2>/dev/null || echo "")
echo -n " user.name: " echo -n " user.name: "
if [ "$git_name" == "YOUR_NAME" ] || [ -z "$git_name" ]; then if [[ "$git_name" == "YOUR_NAME" || -z "$git_name" ]]; then
print_warning "not configured" print_warning "not configured"
else else
print_success "$git_name" print_success "$git_name"
fi fi
echo -n " user.email: " echo -n " user.email: "
if [ "$git_email" == "YOUR_EMAIL" ] || [ -z "$git_email" ]; then if [[ "$git_email" == "YOUR_EMAIL" || -z "$git_email" ]]; then
print_warning "not configured" print_warning "not configured"
else else
print_success "$git_email" print_success "$git_email"