From 5e07b8ad420ab2f34d3f5d8f36014ed87667c21c Mon Sep 17 00:00:00 2001 From: tar Date: Wed, 1 May 2024 20:09:53 +0200 Subject: [PATCH] Update the Emacs installation script --- emacs-29-install-debian12.sh | 285 ++++++++++++++++++----------------- 1 file changed, 148 insertions(+), 137 deletions(-) diff --git a/emacs-29-install-debian12.sh b/emacs-29-install-debian12.sh index 57c3703..08eda29 100644 --- a/emacs-29-install-debian12.sh +++ b/emacs-29-install-debian12.sh @@ -59,67 +59,71 @@ error() { # 1 - INSTALL ESSENTIAL PACKAGES ############################################################# install_essential_packages() { - info "STEP 1 Installing essential packages" + local step_name='STEP 1 Installing essential packages' + warn "Press enter to proceed with $step_name"; read + info "$step_name" apt install -y \ - git \ - apt-transport-https \ - ca-certificates \ - curl \ - gnupg-agent \ - software-properties-common \ - unzip - - [[ $? -gt 0 ]] && { error 'Install failed, stopping now'; exit 1; } + git \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg-agent \ + software-properties-common \ + unzip - info "STEP 1 done" - warn "Press enter to proceed with the next step"; read + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" } ############################################################# -# 2 - INSTALL BUILD DEPENDENCIES FOR EMASC +# 2 - INSTALL BUILD DEPENDENCIES FOR EMASC ############################################################# install_emacs_build_dependencies() { - info "STEP 2 Installing essential packages for building Emacs and tree-sitter" + local step_name='STEP 2 Installing essential packages for building Emacs and tree-sitter' + warn "Press enter to proceed with $step_name"; read + info "$step_name" apt install -y \ - build-essential \ - autoconf \ - automake \ - texinfo \ - libtool \ - libgtk-3-dev \ - libgtk2.0-dev \ - libxpm-dev \ - libjpeg-dev \ - libgif-dev \ - libtiff5-dev \ - libpng-dev \ - librsvg2-dev \ - libgnutls28-dev \ - libncurses-dev \ - libxml2-dev \ - libgpm-dev \ - libdbus-1-dev \ - libotf-dev \ - libm17n-dev \ - libmagickcore-dev \ - libmagickwand-dev \ - libglib2.0-dev \ - libgirepository1.0-dev - - - [[ $? -gt 0 ]] && { error 'Install failed, stopping now'; exit 1; } + build-essential \ + autoconf \ + automake \ + texinfo \ + libtool \ + libgtk-3-dev \ + libgtk2.0-dev \ + libxpm-dev \ + libjpeg-dev \ + libgif-dev \ + libtiff5-dev \ + libpng-dev \ + librsvg2-dev \ + libgnutls28-dev \ + libncurses-dev \ + libxml2-dev \ + libgpm-dev \ + libdbus-1-dev \ + libotf-dev \ + libm17n-dev \ + libmagickcore-dev \ + libmagickwand-dev \ + libglib2.0-dev \ + libgirepository1.0-dev - info "STEP 2 done" - warn "Press enter to proceed with the next step"; read + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" } ############################################################# # 3 - CLONE AND BUILD TREE_SITTER ############################################################# clone_and_build_tree_sitter() { - info "STEP 3 Installing tree-sitter from source" + local step_name='STEP 3 Installing tree-sitter from source' + warn "Press enter to proceed with $step_name"; read + info "$step_name" # Alternative solution might be just installing via apt: # sudo apt install libtree-sitter-dev @@ -128,88 +132,93 @@ clone_and_build_tree_sitter() { cd tree-sitter make make install - + # if emacs fails to build becasue of tree-sitter not found # this step might help: # export LD_LIBRARY_PATH=/usr/local/lib/ - - [[ $? -gt 0 ]] && { error 'Install failed, stopping now'; exit 1; } + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } cd .. - info "STEP 3 done" - warn "Press enter to proceed with the next step"; read + info "done" } ############################################################# -# 4 - INSTALL PDF SUPPORT DEPENDENCIES +# 4 - INSTALL PDF SUPPORT DEPENDENCIES ############################################################# install_pdf_support_dependencies() { - info "STEP 4 Installing PDF support dependencies" + local step_name='STEP 4 Installing PDF support dependencies' + warn "Press enter to proceed with $step_name"; read + info "$step_name" apt install -y mupdf mupdf-tools - - - [[ $? -gt 0 ]] && { error 'Install failed, stopping now'; exit 1; } - info "STEP 4 done" - warn "Press enter to proceed with the next step"; read + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" } ############################################################# -# 5 - INSTALL NATIVE JIT COMPILATION DEPENDENCIES +# 5 - INSTALL NATIVE JIT COMPILATION DEPENDENCIES ############################################################# install_native_jit_compilation_dependencies() { - info "STEP 5 Installing native JIT compilation support dependencies" + local step_name='STEP 5 Installing native JIT compilation support dependencies' + warn "Press enter to proceed with $step_name"; read + info "$step_name" # apt install build-essential will install gcc-12, so matching libgccjit for it will be: apt -y install libgccjit-12-dev - - [[ $? -gt 0 ]] && { error 'Install failed, stopping now'; exit 1; } - info "STEP 5 done" - warn "Press enter to proceed with the next step"; read + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" } ############################################################# -# 6 - INSTALL NATIVE JSON SERIALIZATION DEPENDENCIES +# 6 - INSTALL NATIVE JSON SERIALIZATION DEPENDENCIES ############################################################# install_native_json_serialization_dependencies() { - info "STEP 6 Installing native JSON serialization support dependencies" + local step_name='STEP 6 Installing native JSON serialization support dependencies' + warn "Press enter to proceed with $step_name"; read + info "$step_name" # speeds up LSP communication apt install -y libjansson4 libjansson-dev - - [[ $? -gt 0 ]] && { error 'Install failed, stopping now'; exit 1; } - info "STEP 6 done" - warn "Press enter to proceed with the next step"; read + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" } ############################################################# -# 7 - INSTALL IMAGE DYNAMIC RESIZING DEPENDENCIES +# 7 - INSTALL IMAGE DYNAMIC RESIZING DEPENDENCIES ############################################################# install_image_dynamic_resizing_dependencies() { - info "STEP 7 Installing image dynamic resizing dependencies" + local step_name='STEP 7 Installing image dynamic resizing dependencies' + warn "Press enter to proceed with $step_name"; read + info "$step_name" apt install -y libmagickcore-dev libmagick++-dev - - [[ $? -gt 0 ]] && { error 'Install failed, stopping now'; exit 1; } - info "STEP 7 done" - warn "Press enter to proceed with the next step"; read + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" } ############################################################# -# 8 - CLONE AND BUILD EMACS +# 8 - CLONE AND BUILD EMACS ############################################################# clone_and_build_emacs() { - info "STEP 8 Building Emacs from source [./configure --help]" + local step_name='STEP 8 Building Emacs from source [./configure --help]' + warn "Press enter to proceed with $step_name"; read + info "$step_name" git clone https://git.savannah.gnu.org/git/emacs.git -b emacs-29 cd emacs ./autogen.sh - + ./configure \ --with-native-compilation=aot \ --with-json \ @@ -220,43 +229,45 @@ clone_and_build_emacs() { make make install - - [[ $? -gt 0 ]] && { error 'Install failed, stopping now'; exit 1; } + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } cd .. - - info "STEP 8 done" - warn "Press enter to proceed with the next step"; read + + info "done" } ############################################################# -# 9 - INSTALL FONTS +# 9 - INSTALL FONTS ############################################################# install_fonts() { - info "STEP 9 Installing fonts" + local step_name='STEP 9 Installing fonts' + warn "Press enter to proceed with $step_name"; read + info "$step_name" VICTOR_MONO="https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/VictorMono.zip" FONTS_DIR="/home/${SUDO_USER}/.local/share/fonts/" mkdir -p $FONTS_DIR && \ - wget --continue $VICTOR_MONO --output-document victor-mono.zip && \ - unzip -qq victor-mono.zip -d victor-mono && \ - rm victor-mono.zip && \ - mv victor-mono $FONTS_DIR && \ - chown -Rv $SUDO_USER:$SUDO_USER $FONTS_DIR && \ - chmod -Rv 755 $FONTS_DIR + wget --continue $VICTOR_MONO --output-document victor-mono.zip && \ + unzip -qq victor-mono.zip -d victor-mono && \ + rm victor-mono.zip && \ + mv victor-mono $FONTS_DIR && \ + chown -Rv $SUDO_USER:$SUDO_USER $FONTS_DIR && \ + chmod -Rv 755 $FONTS_DIR - [[ $? -gt 0 ]] && { error 'Fonts installation failed, stopping now'; exit 1; } - - info "STEP 9 done" - warn "Press enter to proceed with the next step"; read + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" } ############################################################# # 10 - INSTALL PYENV ############################################################# install_pyenv() { - info "STEP 10 Installing pyenv" + local step_name='STEP 10 Installing pyenv' + warn "Press enter to proceed with $step_name"; read + info "$step_name" BASHRC="/home/${SUDO_USER}/.bashrc" PROFILE="/home/${SUDO_USER}/.profile" @@ -275,86 +286,87 @@ install_pyenv() { echo 'export PYENV_ROOT="$HOME/.pyenv"' >> $PROFILE echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> $PROFILE echo 'eval "$(pyenv init -)"' >> $PROFILE - - [[ $? -gt 0 ]] && { error 'pyenv installation failed, stopping now'; exit 1; } + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } chown -Rv $SUDO_USER:$SUDO_USER $LOCAL_BIN $PYENV && \ - chmod -Rv 755 $LOCAL_BIN + chmod -Rv 755 $LOCAL_BIN trace "installing dependencies for pyenv to be able to build python" # dependencies to build python (should be already installed) # apt install -y make \ - # build-essential \ - # zlib1g-dev \ - # libbz2-dev \ - # wget \ - # curl \ - # xz-utils \ - # libxml2-dev \ - # libffi-dev \ - # liblzma-dev + # build-essential \ + # zlib1g-dev \ + # libbz2-dev \ + # wget \ + # curl \ + # xz-utils \ + # libxml2-dev \ + # libffi-dev \ + # liblzma-dev # dependencies to build python apt install -y libssl-dev \ - libreadline-dev \ - libsqlite3-dev \ - llvm \ - libncursesw5-dev \ - tk-dev \ - libxmlsec1-dev + libreadline-dev \ + libsqlite3-dev \ + llvm \ + libncursesw5-dev \ + tk-dev \ + libxmlsec1-dev trace "usage: pyenv install -l | pyenv versions | pyenv install 3.12 | pyenv global 3.12" - info "STEP 10 done" - warn "Press enter to proceed with the next step"; read + info "done" } ############################################################# # 11 - INSTALL PYTHON PACKAGES FOR EMACS ############################################################# install_python_packages() { - info "STEP 11 Installing python packages" + local step_name='STEP 11 Installing python packages' + warn "Press enter to proceed with $step_name"; read + info "$step_name" apt install -y python3-pip \ - python3-jedi \ - python3-flake8 \ - python3-yapf \ - python3-autopep8 \ - python3-importmagic \ - python3-venv \ - black \ - flake8 - - [[ $? -gt 0 ]] && { error 'python packages installation failed, stopping now'; exit 1; } + python3-jedi \ + python3-flake8 \ + python3-yapf \ + python3-autopep8 \ + python3-importmagic \ + python3-venv \ + black \ + flake8 + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } trace "Ensure the following in ~/emacs.d/init.el" trace "to use the system stuff rather than the eply's virtual environment:" trace "(setq elpy-rpc-virtualenv-path 'current)" - - info "STEP 11 done" - warn "Press enter to proceed with the next step"; read + + info "done" } ############################################################# # 12 - CLONE EMACS CONFIG ############################################################# clone_emacs_config() { - info "STEP 12 Cloning emacs config to ~/.emacs.d" + local step_name='STEP 12 Cloning emacs config to ~/.emacs.d' + warn "Press enter to proceed with $step_name"; read + info "$step_name" EMACS_DIR="/home/${SUDO_USER}/.emacs.d/" mkdir -p $EMACS_DIR && \ - git clone https://gittar.crabdance.com/tar/.emacs.d.git $EMACS_DIR - + git clone https://gittar.crabdance.com/tar/.emacs.d.git $EMACS_DIR + [[ $? -gt 0 ]] && { error 'cloning emacs config failed, stopping now'; exit 1; } chown -R $SUDO_USER:$SUDO_USER $EMACS_DIR trace "Emacs will throw a lot of compilation warnings on first startup - that's ok" trace "To install the icons you need to run: M-x nerd-icons-install-fonts" - - info "STEP 12 done" - warn "Press enter to proceed with the next step"; read + + info "done" } @@ -363,7 +375,7 @@ clone_emacs_config() { ############################################################# user=$(whoami) if [ $user != root ]; then - error "You are using a non-privileged account" + error "You are using a non-privileged account" exit 1 fi @@ -392,4 +404,3 @@ info "Bye!" info "PS. Log is here: ${LOG}" exit 0 -