This repository contains my personal GNU Emacs setup, crafted to be an integral part of my daily workflow and continually tweaked since 2019. It’s the second repository I clone after my dotfiles, ensuring I have a consistent development environment wherever I go.
This configuration serves as a practical and flexible tool, designed to meet my needs without chasing after the latest trends or overly complex setups. My focus is on providing a straightforward and transparent configuration, avoiding unnecessary packages or flashy features. I do not aim to make this setup glamorous; instead, it remains rooted in functionality and efficiency.
I adhere to the following guiding principles in this configuration:
- The setup is entirely managed within
early-init.el
andinit.el
, which are responsible for loading and configuring publicly available packages. The only exception to this iscustom.el
, which is an autogenerated layer. I don’t manually edit or read this file, so it doesn’t follow Core Principes as the rest of the configuration. - This configuration avoids unnecessary complexity, sticking to built-in packages whenever possible. When external packages are necessary, I prefer GNU alternatives over third-party options from MELPA, ensuring that the setup remains streamlined and understandable.
- My setup should work seamlessly across different operating systems, providing a consistent experience. These days it’s somewhat geared towards Linux, but it also work on macOS and Windows.
- The goal is to maintain a setup that is functional and easy to manage, without pushing Emacs to its limits or adding features for the sake of novelty.
- I intentionally avoid using
use-package
because I do not see a clear benefit for my use case, and I can manage perfectly well without it. - I also don’t use
evil-mode
; if I want to work in Vim, I simply use Vim. - I strive to maintain the default Emacs keybindings, and I keep my custom keymaps for any desired keybinding ideas, without altering default package behavior.
When it comes to performance, it’s all relative. Currently, Emacs loads in a little over a second in the graphical environment, which is admittedly slower than the configurations of those more dedicated to optimizing startup times. However, it is definitely faster than many other configurations found online. Have I settled on this? No, I occasionally work on slight optimizations and will continue to do so spontaneously. That said, Emacs startup time is not a top priority for me as long as it stays around one second, especially since I do not restart Emacs for weeks or months at a time. Therefore, these metrics might improve over time, but it’s certainly not something that occupies most of my attention.
Currently, I use GNU Emacs 29.x, and I recommend others do the same by using this configuration to ensure everything works smoothly. I have not tested this configuration with versions of Emacs prior to 29.1, and I have no insight into how it behaves on older versions.
I have built this configuration with the following tools in mind:
- direnv (
direnv
) - ripgrep (
rg
) - Git (
git
) - GnuPG (
gpg
) - Imagemagick (
convert
) - Ghostscript (
gs
) - Pandoc (
pandoc
) - The standard Unix password manager (
pass
) - GnuTLS
These tools enhance the functionality of my daily workflows, so it’s recommended to have them installed for full compatibility.
This project is open source software licensed under the GNU General Public Licence version 3. Copyright © 2019, 2020, 2021, 2022, 2023, 2024 Serghei Iakovlev.
In copyright notices where the copyright holder is Serghei Iakovlev, then where a range of years appears, this is an inclusive range that applies to every year in the range. For example: 2019-2024 represents the years 2019, 2020, 2021, 2022, 2023 and 2024.