Reformat and slightly update README

This commit is contained in:
Daniel Borchmann 2025-03-28 18:58:40 +01:00
parent 69e917ec86
commit 49c57c5438
No known key found for this signature in database
GPG Key ID: 784AA8DF0CCDF625

View File

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