My personal Emacs Configuration, containing bits of code collected from around the web. Have fun with it!
This configuration is known to work with Emacs 30.1 (and later) on Debian GNU/Linux and Windows 11 (sigh).
- Tight integration of Org Mode, via customizable variables for different types of Org Mode files, predefined capture templates, hydras, continuous clocking, and more.
- Gnus integration, including a general setup to easily add SMTP configuration for multiple email accounts.
- Extended completion based on orderless and consult.
- Magit.
- A custom “start menu” based on helm (via
C-x g
), allowing to access bookmarks, default applications, and files; see the documentation ofdb/helm-shortcuts
for more details. - More or less usable integration into Windows (necessary for work, sorry for that).
- A usable Eshell configuration.
- Support for various programming languages (Emacs Lisp, Clojure, Python, LaTeX, Perl, Haskell, …)
To use this configuration, either clone or download a copy of this repository and place it in your
~/.emacs.d
directory (beware that under Windows, your home directory may be anywhere, check the
variable %HOME%
for this).
If you use a proxy to access the Wild Internet™, make sure that the environment variables
http_proxy
and https_proxy
are set with the correct values. Upon first start, Emacs will
download all some packages it deems essential, so please be patient. All subsequent starts should
be much faster.
To make most of this configuration (and Emacs in general), a standard GNU (POSIX?) user space is
required. Under GNU/Linux system, this is standard, but for Windows this may be a problem. The
easiest way to get a minimal GNU user space is to install Git for Windows and augment your %PATH%
to include C:\Program Files\Git\usr\bin\
(or some-such). This way, executables like bash
,
find
, grep
, and gpg
are available to Emacs, but please be aware that the naming convention for
directories is different for these tools from the Windows standard, i.e., /c/Windows/System32/
instead of C:\Windows\System32\
. In general, this should not be a problem, though.
This configuration allows to make some customization without touching the code to adapt it to the need of the respective user. This is done using the Customize interface of Emacs. Some of the variables are set to some default values different from the default default values. However, those settings are done before loading user customization, and thus can be overwritten by the latter.
Additionally, some variables are provided that allow for additional configuration. Those are
located in the personal-settings
Customization group, which see, and come with some (and hopefully
sufficient) documentation.
If customizing variables is not enough, you can of course always add you custom code directly in the
configuration. However, this may make future merges difficult (in case you want to stay up-to-date
with this configuration, that is). To this end, a special variables called
db/after-init-load-files
can be customized to contain a list of files that will be loaded as the
last step during startup of Emacs. This way, custom code stays outside of the main configuration
and future merges should pass without conflicts.
The main configuration is available in the usual init.el file, with additional functionality
distributed over files in the site-lisp directory. Some private data (like customization) is
outsourced into a separate directory named private
, and is not included in this repository. The
configuration should work nevertheless, even without these private files.
The main init.el
file consists mostly of variable assignments, use-package
declarations,
initializing the package
subsystem, and loading customizations. The main lifting is done by the
db/run-init
function, which is attached to after-init-hook
in init.el
. This way, all
necessary local hooks and autoloads are set up by init.el
, and the db/run-init
functions only
activates modes needed for every session, sets default keybindings, hydras, and global hooks. It
also imports some environment variables and starts the server. Any additional packages are only
loaded when required. Additionally, after all this, db/run-init
loads all files contained in
db/after-init-load-files
, in the order given in that list.
Under Windows, using Tramp with ssh
from git does not seem to work because no ssh-askpass
is
included. Use plink
instead, TRAMP has builtin support for it.
This configuration is available under the MIT license, see LICENSE for details.