From 2ec3e646a673a776092e253f475361eec58d54eb Mon Sep 17 00:00:00 2001 From: tar Date: Sat, 31 Jan 2026 20:54:45 +0100 Subject: [PATCH] Add emacs-install-fedora43.sh --- emacs-install-fedora43.sh | 218 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100755 emacs-install-fedora43.sh diff --git a/emacs-install-fedora43.sh b/emacs-install-fedora43.sh new file mode 100755 index 0000000..1772111 --- /dev/null +++ b/emacs-install-fedora43.sh @@ -0,0 +1,218 @@ +#!/usr/bin/env bash + +############################################################# +# Author: Taryel Hlontsi, 2025 +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +############################################################# + + + +############################################################# +# SETUP SECTION, use "sudo" to run the script +############################################################# +LOG_DIR="/home/${USER}/Opt" +LOG="${LOG_DIR}/log.txt" +PREFIX="/home/${USER}/Opt/emacs30" +BRANCH="emacs-30" +SOURCE="https://github.com/emacs-mirror/emacs.git" +EMACS_DIR="/home/${USER}/.emacs.d/" + +############################################################# +# HELPER FUNCTIONS +############################################################# +info() { + GREEN='\033[1;32m' + NC='\033[0m' + echo -e "${GREEN}$1${NC}" + echo -e "INFO:\t$1" >> $LOG +} + +trace() { + YELLOW='\033[1;33m' + NC='\033[0m' + echo -e "${YELLOW}$1${NC}" + echo -e "TRACE:\t$1" >> $LOG +} + +warn() { + PURPLE='\033[1;35m' + NC='\033[0m' + echo -e "${PURPLE}$1${NC}" + echo -e "WARN:\t$1" >> $LOG +} + +error() { + RED='\033[1;31m' + NC='\033[0m' + echo -e "${RED}$1${NC}" + echo -e "ERROR:\t$1" >> $LOG +} + +############################################################# +# 1 - INSTALL ESSENTIAL PACKAGES +############################################################# +install_essential_packages() { + local step_name='STEP 1 Installing essential packages' + warn "Press enter to proceed with $step_name"; read + info "$step_name" + + sudo dnf install -y \ + git \ + apt \ + ca-certificates \ + curl \ + gnupg2-gpg-agent \ + unzip \ + mupdf + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" +} + +############################################################# +# 2 - INSTALL BUILD DEPENDENCIES FOR EMACS +############################################################# +install_emacs_build_dependencies() { + local step_name='STEP 2 Installing packages for building Emacs' + warn "Press enter to proceed with $step_name"; read + info "$step_name" + + sudo dnf install -y \ + @c-development \ + @development-tools \ + autoconf \ + automake \ + texinfo \ + libtool \ + gtk3-devel \ + gtk2-devel \ + libXpm-devel \ + libjpeg-turbo-devel \ + giflib-devel \ + libtiff-devel \ + libpng-devel \ + librsvg2-devel \ + gnutls-devel \ + ncurses-devel \ + libxml2-devel \ + libxml2 \ + dbus-devel \ + libotf-devel \ + m17n-lib-devel \ + ImageMagick-devel \ + glib2-devel \ + gobject-introspection-devel \ + libacl-devel \ + webkit2gtk4.1-devel \ + libtree-sitter-devel \ + libgccjit-devel \ + jansson \ + jansson-devel + + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + info "done" +} + + +############################################################# +# 3 - CLONE AND BUILD EMACS +############################################################# +clone_and_build_emacs() { + local step_name='STEP 3 Building Emacs from source [./configure --help]' + warn "Press enter to proceed with $step_name"; read + info "$step_name" + + git clone $SOURCE -b $BRANCH + cd emacs + rm etc/emacsclient.desktop + ./autogen.sh + + ./configure \ + --with-native-compilation=aot \ + --with-json \ + --with-tree-sitter \ + --with-imagemagick \ + --with-rsvg \ + --with-xwidgets \ + --with-pgtk \ + --with-x-toolkit=gtk3 \ + --disable-silent-rules \ + --exec_prefix=$PREFIX \ + --prefix=$PREFIX + + make -j$(nproc) + sudo make install + + [[ $? -gt 0 ]] && { error "$step_name failed, stopping now"; exit 1; } + + cd .. + + info "done" +} + + +############################################################# +# 4 - CLONE EMACS CONFIG +############################################################# +clone_emacs_config() { + local step_name='STEP 4 Cloning emacs config to ~/.emacs.d' + warn "Press enter to proceed with $step_name"; read + info "$step_name" + + if [[ -d $EMACS_DIR ]]; then + rm -rf $EMACS_DIR + fi + + mkdir -p $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; } + + 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 "done" +} + + +############################################################# +# RUN SECTION +############################################################# +user=$(whoami) +if [ $user == root ]; then + error "You are using a root account, start without sudo!" + exit 1 +fi + +echo $(date +'%Y-%m-%d %H:%M') > $LOG + +info "Hiya!" + +sudo dnf update +sudo dnf upgrade -y + +install_essential_packages +install_emacs_build_dependencies +clone_and_build_emacs +clone_emacs_config + +info "Reboot (!) before starting Emacs" +info "Bye!" +info "PS. Log is here: ${LOG}" +warn "M-x nerd-icons-install-fonts" + +exit 0