gabriel / muse public
install-omzsh-plugin.sh bash
98 lines 4.1 KB
9ef121d1 feat: add Oh My ZSH plugin for Muse (all six phases) Gabriel Cardona <gabriel@tellurstori.com> 3d ago
1 #!/usr/bin/env bash
2 # install-omzsh-plugin.sh — Install the Muse Oh My ZSH plugin
3 # ─────────────────────────────────────────────────────────────
4 # Run from the muse repo root:
5 # bash tools/install-omzsh-plugin.sh
6 #
7 # What it does:
8 # 1. Locates the Oh My ZSH custom plugin directory
9 # (respects $ZSH_CUSTOM if set, otherwise ~/.oh-my-zsh/custom)
10 # 2. Creates the muse/ subdirectory inside plugins/
11 # 3. Symlinks muse.plugin.zsh and _muse from tools/omzsh-plugin/
12 # so updates to the Muse repo automatically update the plugin
13 # 4. Prints the one line you need to add to ~/.zshrc
14 #
15 # To uninstall:
16 # rm -rf "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/muse"
17
18 set -euo pipefail
19
20 # ── Resolve paths ─────────────────────────────────────────────────────────────
21
22 REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)"
23 PLUGIN_SRC="$REPO_DIR/tools/omzsh-plugin"
24
25 # Respect $ZSH_CUSTOM if the user has set it (e.g. for Zinit, Antigen, etc.)
26 ZSH_CUSTOM_DIR="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}"
27 PLUGIN_DST="$ZSH_CUSTOM_DIR/plugins/muse"
28
29 # ── Sanity checks ─────────────────────────────────────────────────────────────
30
31 if [[ ! -f "$PLUGIN_SRC/muse.plugin.zsh" ]]; then
32 echo "ERROR: Plugin source not found at $PLUGIN_SRC/muse.plugin.zsh" >&2
33 echo " Run this script from the muse repository root." >&2
34 exit 1
35 fi
36
37 if [[ ! -d "$ZSH_CUSTOM_DIR" ]]; then
38 echo "ERROR: Oh My ZSH custom directory not found at $ZSH_CUSTOM_DIR" >&2
39 echo " Install Oh My ZSH first: https://ohmyz.sh" >&2
40 echo " Or set \$ZSH_CUSTOM to your custom plugin directory." >&2
41 exit 1
42 fi
43
44 if ! command -v python3 >/dev/null 2>&1; then
45 echo "WARNING: python3 not found in PATH." >&2
46 echo " The plugin requires python3 for JSON/TOML parsing." >&2
47 echo " Install it before using the plugin." >&2
48 fi
49
50 # ── Create plugin directory and symlinks ──────────────────────────────────────
51
52 mkdir -p "$PLUGIN_DST"
53
54 # Use -f to replace existing symlinks (handles re-runs and updates cleanly).
55 ln -sf "$PLUGIN_SRC/muse.plugin.zsh" "$PLUGIN_DST/muse.plugin.zsh"
56 ln -sf "$PLUGIN_SRC/_muse" "$PLUGIN_DST/_muse"
57
58 # ── Report ────────────────────────────────────────────────────────────────────
59
60 echo ""
61 echo " Muse Oh My ZSH plugin installed"
62 echo ""
63 echo " plugin dir $PLUGIN_DST"
64 echo " source $PLUGIN_SRC (symlinked — updates automatically)"
65 echo ""
66 echo " Next step: add 'muse' to the plugins array in your ~/.zshrc:"
67 echo ""
68 echo " plugins=(git muse)"
69 echo ""
70 echo " Then reload your shell:"
71 echo ""
72 echo " source ~/.zshrc"
73 echo ""
74
75 # ── Powerlevel10k hint ────────────────────────────────────────────────────────
76
77 if [[ -f "$HOME/.p10k.zsh" ]]; then
78 echo " Powerlevel10k detected."
79 echo " Add 'muse_vcs' to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or"
80 echo " POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS in ~/.p10k.zsh:"
81 echo ""
82 echo " POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(... muse_vcs ...)"
83 echo ""
84 fi
85
86 # ── fzf hint ──────────────────────────────────────────────────────────────────
87
88 if ! command -v fzf >/dev/null 2>&1; then
89 echo " Optional: install fzf to unlock interactive tools"
90 echo " (branch picker, commit browser, stash browser):"
91 echo ""
92 echo " brew install fzf # macOS"
93 echo " apt install fzf # Debian/Ubuntu"
94 echo ""
95 fi
96
97 echo " Full docs: docs/reference/omzsh-plugin.md"
98 echo ""