#!/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"