init.zsh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. PLUGIN_DIR="$HOME/.local/share/zsh/plugins"
  2. mkdir -p "$PLUGIN_DIR"
  3. plugins=(
  4. "blimmer/zsh-aws-vault"
  5. "romkatv/zsh-defer"
  6. "zsh-users/zsh-autosuggestions"
  7. "hlissner/zsh-autopair"
  8. "zsh-users/zsh-history-substring-search"
  9. "Aloxaf/fzf-tab"
  10. "junegunn/fzf"
  11. "subnixr/minimal"
  12. "zap-zsh/vim"
  13. "zsh-users/zsh-syntax-highlighting"
  14. )
  15. zap() {
  16. echo "⚡ Updating plugins..."
  17. for plugin in "${plugins[@]}"; do
  18. plugin_name=${plugin##*/}
  19. if [ ! -d "$PLUGIN_DIR/$plugin_name" ]; then
  20. echo "Installing $plugin_name"
  21. git clone --quiet "https://github.com/$plugin" "$PLUGIN_DIR/$plugin_name" --depth=1
  22. else
  23. old_hash=$(git -C "$PLUGIN_DIR/$plugin_name" rev-parse HEAD 2>/dev/null)
  24. git -C "$PLUGIN_DIR/$plugin_name" fetch --quiet
  25. git -C "$PLUGIN_DIR/$plugin_name" reset --hard origin/HEAD --quiet
  26. new_hash=$(git -C "$PLUGIN_DIR/$plugin_name" rev-parse HEAD 2>/dev/null)
  27. if [ "$old_hash" = "$new_hash" ]; then
  28. echo "✓ $plugin_name (up to date)"
  29. else
  30. echo "↑ $plugin_name (${old_hash:0:7} → ${new_hash:0:7})"
  31. fi
  32. fi
  33. done
  34. for dir in "$PLUGIN_DIR"/*; do
  35. if [ -d "$dir" ]; then
  36. plugin_name=$(basename "$dir")
  37. if [[ ! " ${plugins[@]##*/} " =~ " $plugin_name " ]]; then
  38. echo "Removing unused plugin: $plugin_name"
  39. rm -rf "$dir"
  40. fi
  41. fi
  42. done
  43. echo "Plugin update complete!"
  44. }
  45. for plugin in "${plugins[@]}"; do
  46. plugin_name=${plugin##*/}
  47. [[ -d "$PLUGIN_DIR/$plugin_name" ]] || git clone --quiet "https://github.com/$plugin" "$PLUGIN_DIR/$plugin_name" --depth=1
  48. done
  49. source "$PLUGIN_DIR/zsh-defer/zsh-defer.plugin.zsh"
  50. source "$PLUGIN_DIR/zsh-aws-vault/zsh-aws-vault.plugin.zsh"
  51. _batch_defer() {
  52. local files=("$@")
  53. for file in "${files[@]}"; do
  54. [[ -f "$file" ]] && source "$file"
  55. done
  56. }
  57. zsh-defer source "$PLUGIN_DIR/zsh-autosuggestions/zsh-autosuggestions.zsh"
  58. zsh-defer source "$PLUGIN_DIR/zsh-autopair/autopair.zsh"
  59. zsh-defer source "$PLUGIN_DIR/zsh-history-substring-search/zsh-history-substring-search.zsh"
  60. source "$PLUGIN_DIR/minimal/minimal.zsh"
  61. source "$ZDOTDIR/opts.zsh"
  62. # source "$ZDOTDIR/rose-pine.sh"
  63. source "$ZDOTDIR/tmux.zsh"
  64. zsh-defer _batch_defer "$ZDOTDIR/alias.zsh" "$ZDOTDIR/keymap.zsh" "$ZDOTDIR/path.zsh" "$ZDOTDIR/pnpm.zsh" "$ZDOTDIR/mise.zsh"
  65. local func_files=("$ZDOTDIR/functions"/*.zsh)
  66. zsh-defer _batch_defer "${func_files[@]}" "$ZDOTDIR/completions/external.zsh"
  67. zsh-defer _batch_defer \
  68. "$PLUGIN_DIR/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" \
  69. "$PLUGIN_DIR/fzf-tab/fzf-tab.plugin.zsh" \
  70. "$PLUGIN_DIR/fzf/shell/completion.zsh" \
  71. "$PLUGIN_DIR/fzf/shell/key-bindings.zsh" \
  72. "$PLUGIN_DIR/vim/vim.plugin.zsh"
  73. _compile_zsh_files() {
  74. (
  75. local files=(
  76. "$ZDOTDIR/init.zsh"
  77. "$ZDOTDIR/opts.zsh"
  78. "$ZDOTDIR/rose-pine.sh"
  79. "$ZDOTDIR/completions/external.zsh"
  80. "$ZDOTDIR/tmux.zsh"
  81. "$ZDOTDIR/alias.zsh"
  82. "$ZDOTDIR/keymap.zsh"
  83. "$ZDOTDIR/path.zsh"
  84. "$ZDOTDIR/pnpm.zsh"
  85. "$ZDOTDIR/mise.zsh"
  86. )
  87. for func_file in "$ZDOTDIR/functions"/*.zsh; do
  88. files+=("$func_file")
  89. done
  90. for file in "${files[@]}"; do
  91. [[ ! -f "$file" ]] && continue
  92. local zwc="${file}.zwc"
  93. if [[ "$file" -nt "$zwc" ]] || [[ ! -f "$zwc" ]]; then
  94. zcompile "$file" 2>/dev/null &
  95. fi
  96. done
  97. wait
  98. ) > /dev/null 2>&1 &!
  99. }
  100. zsh-defer _compile_zsh_files