From 2830430ca8b43fd3ba03bdae6f5f4b04bcfa4e88 Mon Sep 17 00:00:00 2001 From: Daneel Date: Tue, 24 Feb 2026 20:32:47 +0100 Subject: [PATCH] =?UTF-8?q?add:=20install=5Femacs=5Fmacos.sh=20=E2=80=94?= =?UTF-8?q?=20all-in-one=20Emacs=20build=20+=20Doom=20install/upgrade?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/install_emacs_macos.sh | 132 +++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100755 scripts/install_emacs_macos.sh diff --git a/scripts/install_emacs_macos.sh b/scripts/install_emacs_macos.sh new file mode 100755 index 0000000..825b50d --- /dev/null +++ b/scripts/install_emacs_macos.sh @@ -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"