add: install_emacs_macos.sh — all-in-one Emacs build + Doom install/upgrade
This commit is contained in:
132
scripts/install_emacs_macos.sh
Executable file
132
scripts/install_emacs_macos.sh
Executable file
@@ -0,0 +1,132 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
RED='\033[0;31m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
ZOOM_PATCH_STATUS="přeskočen"
|
||||||
|
DOOM_STATUS="neznámý"
|
||||||
|
|
||||||
|
# --- Předběžné kontroly ---
|
||||||
|
if [[ "$(uname -s)" != "Darwin" ]]; then
|
||||||
|
echo "Tento skript je pro macOS." && exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v brew &>/dev/null; then
|
||||||
|
echo "Homebrew nenalezen. Nainstaluj: https://brew.sh" && exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- [1/7] Prerekvizity ---
|
||||||
|
echo -e "${GREEN}[1/7] Prerekvizity...${NC}"
|
||||||
|
PACKAGES=(autoconf libgmp texinfo pkg-config gnutls libxml2 jansson tree-sitter librsvg imagemagick)
|
||||||
|
for pkg in "${PACKAGES[@]}"; do
|
||||||
|
if ! brew list "$pkg" &>/dev/null; then
|
||||||
|
echo " Instaluji $pkg..."
|
||||||
|
brew install "$pkg"
|
||||||
|
else
|
||||||
|
echo " $pkg již nainstalován"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
TREE_SITTER_VERSION=$(brew info tree-sitter --json=v2 2>/dev/null | grep -o '"pkg_version":"[^"]*"' | head -1 | cut -d'"' -f4)
|
||||||
|
echo " tree-sitter verze: $TREE_SITTER_VERSION"
|
||||||
|
|
||||||
|
# --- [2/7] Emacs zdroj ---
|
||||||
|
echo -e "${GREEN}[2/7] Emacs zdroj...${NC}"
|
||||||
|
if [[ ! -d ~/src/emacs/.git ]]; then
|
||||||
|
git clone --depth 50 https://github.com/emacs-mirror/emacs.git ~/src/emacs
|
||||||
|
cd ~/src/emacs
|
||||||
|
git checkout emacs-30
|
||||||
|
else
|
||||||
|
cd ~/src/emacs
|
||||||
|
git fetch origin
|
||||||
|
git checkout emacs-30
|
||||||
|
git pull --rebase origin emacs-30
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- [3/7] Zoom accessibility patch ---
|
||||||
|
echo -e "${GREEN}[3/7] Zoom accessibility patch...${NC}"
|
||||||
|
PATCH_FILE=~/.config/doom/patches/0001-ns-implement-AXBoundsForRange-for-macOS-Zoom-cursor-.patch
|
||||||
|
cd ~/src/emacs
|
||||||
|
if grep -q UAZoomChangeFocus src/nsterm.m 2>/dev/null; then
|
||||||
|
echo " Patch already applied, skipping"
|
||||||
|
ZOOM_PATCH_STATUS="aplikován (již dříve)"
|
||||||
|
elif [[ ! -f "$PATCH_FILE" ]]; then
|
||||||
|
echo -e "${RED} Patch soubor neexistuje: $PATCH_FILE${NC}"
|
||||||
|
ZOOM_PATCH_STATUS="přeskočen (soubor chybí)"
|
||||||
|
else
|
||||||
|
if git am --ignore-whitespace "$PATCH_FILE"; then
|
||||||
|
echo " Patch aplikován"
|
||||||
|
ZOOM_PATCH_STATUS="aplikován"
|
||||||
|
else
|
||||||
|
git am --abort 2>/dev/null || true
|
||||||
|
echo -e "${RED} WARNING: Patch selhal (conflict). Pokračuji bez patche.${NC}"
|
||||||
|
ZOOM_PATCH_STATUS="selhal"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- [4/7] Build ---
|
||||||
|
echo -e "${GREEN}[4/7] Build...${NC}"
|
||||||
|
cd ~/src/emacs
|
||||||
|
./autogen.sh
|
||||||
|
./configure \
|
||||||
|
--with-ns \
|
||||||
|
--with-tree-sitter \
|
||||||
|
--with-gnutls \
|
||||||
|
--with-xml2 \
|
||||||
|
--with-json \
|
||||||
|
--with-imagemagick \
|
||||||
|
--with-rsvg \
|
||||||
|
--without-x \
|
||||||
|
--without-dbus \
|
||||||
|
CFLAGS="-O2 -g3"
|
||||||
|
|
||||||
|
set +o pipefail
|
||||||
|
make -j"$(sysctl -n hw.ncpu)" 2>&1 | tee /tmp/emacs-build.log
|
||||||
|
MAKE_EXIT=${PIPESTATUS[0]}
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
if [[ "$MAKE_EXIT" -ne 0 ]]; then
|
||||||
|
echo -e "${RED}BUILD FAILED, see /tmp/emacs-build.log${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- [5/7] Install do /Applications ---
|
||||||
|
echo -e "${GREEN}[5/7] Install do /Applications...${NC}"
|
||||||
|
sudo rm -rf /Applications/Emacs.app
|
||||||
|
cp -r nextstep/Emacs.app /Applications/
|
||||||
|
codesign --force --deep --sign - /Applications/Emacs.app
|
||||||
|
echo " Emacs.app nainstalován a podepsán"
|
||||||
|
|
||||||
|
# --- [6/7] Wrapper v /usr/local/bin/emacs ---
|
||||||
|
echo -e "${GREEN}[6/7] Wrapper v /usr/local/bin/emacs...${NC}"
|
||||||
|
sudo tee /usr/local/bin/emacs > /dev/null << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
exec /Applications/Emacs.app/Contents/MacOS/Emacs "$@"
|
||||||
|
EOF
|
||||||
|
sudo chmod +x /usr/local/bin/emacs
|
||||||
|
echo " Wrapper vytvořen"
|
||||||
|
|
||||||
|
# --- [7/7] Doom Emacs ---
|
||||||
|
echo -e "${GREEN}[7/7] Doom Emacs...${NC}"
|
||||||
|
if [[ -d ~/.config/emacs/.git ]]; then
|
||||||
|
echo " Doom existuje, upgraduji..."
|
||||||
|
~/.config/emacs/bin/doom upgrade --force
|
||||||
|
DOOM_STATUS="upgradován"
|
||||||
|
else
|
||||||
|
echo " Doom neexistuje, instaluji..."
|
||||||
|
git clone --depth 1 https://github.com/doomemacs/doomemacs ~/.config/emacs
|
||||||
|
~/.config/emacs/bin/doom install --no-fonts --no-env
|
||||||
|
DOOM_STATUS="nainstalován"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Závěrečné info ---
|
||||||
|
echo ""
|
||||||
|
echo "=== Emacs install hotov ==="
|
||||||
|
echo "Verze: $(/usr/local/bin/emacs --version | head -1)"
|
||||||
|
echo "tree-sitter: $TREE_SITTER_VERSION"
|
||||||
|
echo "Zoom patch: $ZOOM_PATCH_STATUS"
|
||||||
|
echo "Doom: $DOOM_STATUS"
|
||||||
|
echo ""
|
||||||
|
echo "Spusť: emacs"
|
||||||
|
echo "Nebo: open /Applications/Emacs.app"
|
||||||
Reference in New Issue
Block a user