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 <Space> <C-f>' \
-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 FZF_DEFAULT_OPTS="--height=50% --layout=reverse"
export GPG_TTY=$(tty)
@@ -45,7 +49,7 @@ export ZSH_HIGHLIGHT_MAXLENGTH=60
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
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
source $HOME/.antigen/antigen.zsh
antigen use oh-my-zsh
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-completions
antigen bundle git
antigen bundle kubectl
antigen bundle autojump
antigen bundle pip
antigen bundle asdf
antigen bundle nvim
antigen bundle darvid/zsh-poetry
antigen bundle Aloxaf/fzf-tab
antigen bundle vi-mode
#antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
# antigen bundle jeffreytse/zsh-vi-mode
antigen apply
if [ -f "$HOME/.antigen/antigen.zsh" ]; then
source "$HOME/.antigen/antigen.zsh"
antigen use oh-my-zsh
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle zsh-users/zsh-syntax-highlighting
antigen bundle zsh-users/zsh-completions
antigen bundle git
antigen bundle kubectl
antigen bundle autojump
antigen bundle pip
antigen bundle nvim
antigen bundle darvid/zsh-poetry
antigen bundle Aloxaf/fzf-tab
antigen bundle vi-mode
#antigen bundle MichaelAquilina/zsh-autoswitch-virtualenv
# antigen bundle jeffreytse/zsh-vi-mode
antigen apply
else
mkdir $HOME/.antigen
curl -L git.io/antigen > $HOME/.antigen/antigen.zsh
fi
# menu
@@ -276,12 +284,12 @@ function bitnami_seal() {
}
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
eval "$(starship init zsh)"
eval "$(direnv hook zsh)"
command -v starship >/dev/null 2>&1 && eval "$(starship init zsh)"
command -v direnv >/dev/null 2>&1 && eval "$(direnv hook zsh)"
alias ta='tmux a'
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 la='ls -a'
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/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 '^f' vi-forward-char

View File

@@ -1,8 +1,6 @@
tap "anomalyco/tap"
tap "farion1231/ccswitch"
tap "homebrew/cask"
tap "minio/stable"
tap "telepresenceio/telepresence"
tap "vitobotta/tap"
brew "act"
brew "argocd"
@@ -28,8 +26,8 @@ brew "helm"
brew "helmfile"
brew "iperf3"
brew "k9s"
brew "kubernetes-cli"
brew "kubectx"
brew "kubernetes-cli"
brew "lrzsz"
brew "lsd"
brew "lua"
@@ -43,10 +41,11 @@ brew "mysql-client@8.4"
brew "neofetch"
brew "neovim"
brew "nexttrace"
brew "ripgrep"
brew "opencode"
brew "postgresql@17", restart_service: :changed
brew "rclone"
brew "redis", restart_service: :changed
brew "ripgrep"
brew "rustup"
brew "starship"
brew "swiftformat"
@@ -55,73 +54,48 @@ brew "trzsz-ssh"
brew "uv"
brew "wget"
brew "xcbeautify"
brew "xcode-build-server"
brew "yarn"
brew "zsh"
brew "anomalyco/tap/opencode"
brew "minio/stable/mc"
brew "telepresenceio/telepresence/telepresence-oss"
brew "vitobotta/tap/hetzner_k3s"
cask "1password"
cask "1password-cli"
cask "alacritty"
cask "alma"
cask "apifox"
cask "appcleaner"
cask "battle-net"
cask "brave-browser"
cask "farion1231/ccswitch/cc-switch"
cask "chatgpt"
cask "cherry-studio"
cask "clash-party"
cask "claude"
cask "claude-code"
cask "codex"
cask "codex-app"
cask "copilot-cli"
cask "craft"
cask "cursor"
cask "daisydisk"
cask "datagrip"
cask "eudic"
cask "figma"
cask "feishu"
cask "font-jetbrains-mono-nerd-font"
cask "font-maple-mono-nf-cn"
cask "gcloud-cli"
cask "ghostty"
cask "github-copilot-for-xcode"
cask "google-chrome"
cask "google-drive"
cask "intellij-idea-ce"
cask "jordanbaird-ice"
cask "kiro"
cask "mac-mouse-fix"
cask "kiro-cli"
cask "netnewswire"
cask "notion"
cask "obsidian"
cask "only-switch"
cask "orbstack"
cask "raycast"
cask "sourcetree"
cask "spotify"
cask "squirrel-app"
cask "stats"
cask "steam"
cask "telegram"
cask "typeless"
cask "visual-studio-code"
cask "visual-studio-code@insiders"
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 "Lark", id: 6449830127
mas "Numbers", id: 409203825
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 "donjayamanne.githistory"
vscode "dreamecho.git-blame-lens"

View File

@@ -8,7 +8,7 @@ live_config_reload = true
[terminal]
# OSC 52 剪贴板支持
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]
semantic_escape_chars = ",│`|\"' ()[]{}<>"

View File

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

View File

@@ -21,7 +21,7 @@
"guihua.lua": { "branch": "master", "commit": "87bea7b98429405caf2a0ce4d029b027bb017c70" },
"img-clip.nvim": { "branch": "main", "commit": "b6ddfb97b5600d99afe3452d707444afda658aca" },
"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" },
"legendary.nvim": { "branch": "master", "commit": "6de819bc285eb8c420e49e82c21d5bb696b5a727" },
"lualine.nvim": { "branch": "master", "commit": "0c6cca9f2c63dadeb9225c45bc92bb95a151d4af" },
@@ -47,8 +47,8 @@
"nvim-lspconfig": { "branch": "master", "commit": "8adb3b5938f6074a1bcc36d3c3916f497d2e8ec4" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-notify": { "branch": "master", "commit": "b5825cf9ee881dd8e43309c93374ed5b87b7a896" },
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" },
"nvim-treesitter": { "branch": "main", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "0f051e9813a36481f48ca1f833897210dbcfffde" },
"nvim-ufo": { "branch": "main", "commit": "3c7a3570e9c9dc198a2ad4491b0b0e51c4d4ba08" },
"nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" },
"oil.nvim": { "branch": "master", "commit": "5b6068aad7d2057dd399fac73b7fb2cdf23ccd6e" },
@@ -56,10 +56,9 @@
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" },
"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" },
"sniprun": { "branch": "master", "commit": "a90c65846c3c18efc3f799d8b6dc26af9d4a69ed" },
"statuscol.nvim": { "branch": "main", "commit": "c46172d0911aa5d49ba5f39f4351d1bb7aa289cc" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
"todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },

View File

@@ -34,6 +34,7 @@ FILES=(
# Config directories to link
CONFIG_FILES=(
alacritty
git
nvim
tmux
@@ -168,15 +169,6 @@ function cmd_init() {
print_success "Antigen already installed"
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
print_warning "Creating directories..."
mkdir -p "$HOME/.config/"
@@ -195,6 +187,10 @@ function cmd_init() {
function cmd_install() {
print_header "Installing Dotfiles Symlinks"
mkdir -p "$HOME_DIR/.config"
mkdir -p "$HOME_DIR/.ssh"
mkdir -p "$HOME_DIR/.kube"
# Link files
print_warning "Linking files..."
@@ -210,8 +206,7 @@ function cmd_install() {
# Link config directories
print_warning "Linking config directories..."
for i in "${CONFIG_FILES[@]}"; do
if [ -d "$WORKING_DIR/$i" ]; then
mkdir -p "$HOME_DIR/.config"
if [ -e "$WORKING_DIR/$i" ]; then
ln -svfn "$WORKING_DIR/$i" "$HOME_DIR/.config/$i"
print_success "Linked: .config/$i"
else
@@ -244,9 +239,13 @@ function cmd_install() {
if command_exists fzf; then
print_success "fzf already installed"
elif command_exists brew; then
print_warning "Installing fzf..."
$(brew --prefix)/opt/fzf/install --key-bindings --completion 2>/dev/null || true
print_success "fzf installed"
if [ -x "$(brew --prefix)/opt/fzf/install" ]; then
print_warning "Installing fzf shell integration..."
"$(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
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 "")
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"
else
print_success "$git_name"
fi
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"
else
print_success "$git_email"