<commit_before>#+title: Daniel’s Emacs Configuration

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 25.2 (and later) on
Debian GNU/Linux and Windows 10 (sigh).

* Features

- 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 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]].
- A custom “start menu” based on helm (via ~C-x g~), allowing to access
  bookmarks, default 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.
- Support for various programming languages (Emacs Lisp, Clojure, Python, LaTeX,
  Perl, Haskell, …)

* Initial Setup

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 [[https://git-scm.com/download/win][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.

* Customization

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.

* Adding custom code

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.

* Structure

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 outsources into a separate directory named
=private=, and is not included in this repository.  The configuration should<commit_msg>Fix typo in README<commit_after>#+title: Daniel’s Emacs Configuration

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 25.2 (and later) on
Debian GNU/Linux and Windows 10 (sigh).

* Features

- 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 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]].
- A custom “start menu” based on helm (via ~C-x g~), allowing to access
  bookmarks, default 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.
- Support for various programming languages (Emacs Lisp, Clojure, Python, LaTeX,
  Perl, Haskell, …)

* Initial Setup

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 [[https://git-scm.com/download/win][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.

* Customization

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.

* Adding custom code

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.

* Structure

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
{'fraction_non_alphanumeric': 0.07457377652397891, 'fraction_numerical': 0.002207776278670428, 'mean_word_length': 4.577291381668947, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 14, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '588498', 'n_tokens_mistral': 2181, 'n_tokens_neox': 2097, 'n_words': 1118}