219 lines
5.7 KiB
Bash
Executable File
219 lines
5.7 KiB
Bash
Executable File
#!/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 <https://www.gnu.org/licenses/>
|
|
#############################################################
|
|
|
|
|
|
|
|
#############################################################
|
|
# 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
|