#+STARTUP: overview indent
* Introduction
+:PROPERTIES:
+:CUSTOM_ID: introduction
+:END:
This document holds my customizations for GNU Emacs. Its source version is written in
[[https://orgmode.org/][Org mode]], utilizing [[https://orgmode.org/worg/org-contrib/babel/][Babel]] to realize [[https://en.wikipedia.org/wiki/Literate_programming][literate programming]]. The Elisp code blocks
exporting and publishing]] below for more information regarding [[https://eshelyaron.com][my website]].
* Fresh installation
+:PROPERTIES:
+:CUSTOM_ID: install
+:END:
To bootstrap this configuration, fetch a local clone of the repository from
[[https://git.sr.ht/~eshel/dotfiles][SourceHut]] and create a symlink from the =.emacs.d= subdirectory into your home
#+end_src
* Allow for more memory usage during initialization
+:PROPERTIES:
+:CUSTOM_ID: garbage-collection-tweeks
+:END:
#+begin_src emacs-lisp
(let ((normal-gc-cons-threshold (* 20 1024 1024))
#+end_src
* Loading the =modus-vivendi= theme
+:PROPERTIES:
+:CUSTOM_ID: themes
+:END:
#+begin_src emacs-lisp
(load-theme 'modus-vivendi)
#+end_src
* Package archives
+:PROPERTIES:
+:CUSTOM_ID: package-archives
+:END:
#+begin_src emacs-lisp
(require 'package)
#+end_src
* History
+:PROPERTIES:
+:CUSTOM_ID: history
+:END:
#+begin_src emacs-lisp
(defun esy/setup-history ()
#+end_src
* Display settings
+:PROPERTIES:
+:CUSTOM_ID: display
+:END:
** Must have display settings
+:PROPERTIES:
+:CUSTOM_ID: display-must-haves
+:END:
#+begin_src emacs-lisp
(setq use-file-dialog nil
#+end_src
** More display settings
+:PROPERTIES:
+:CUSTOM_ID: display-goodies
+:END:
#+begin_src emacs-lisp
(defun esy/setup-display ()
#+end_src
* Org-mode settings :org:
+:PROPERTIES:
+:CUSTOM_ID: org
+:END:
** Literate config bootstrap
:PROPERTIES:
#+end_src
** Org-mode basic settings
+:PROPERTIES:
+:CUSTOM_ID: org-must-haves
+:END:
#+begin_src emacs-lisp
(defconst esy/inbox-path "~/inbox.org"
#+end_src
+** Interactively fill missing CUSTOM_ID properties
+:PROPERTIES:
+:CUSTOM_ID: orgs-custom-ids
+:END:
+
+#+begin_src emacs-lisp
+ (defun esy/org-fill-custom-id (point value)
+ "Set CUSTOM_ID to VALUE interactively for the entry at POINT."
+ (interactive "d\nMCUSTOM_ID: ")
+ (org-entry-put point "CUSTOM_ID" value))
+
+ (defun esy/org-fill-custom-ids-in-buffer ()
+ "Visit headers in the current buffer and set CUSTOM_ID for each."
+ (interactive)
+ (require 'beacon)
+ (org-global-cycle 1)
+ (org-map-entries (lambda ()
+ (unless (org-entry-get (point) "CUSTOM_ID")
+ (beacon-blink)
+ (org-cycle)
+ (call-interactively #'esy/org-fill-custom-id)
+ (org-global-cycle 1)))))
+#+end_src
** Export and publish
:PROPERTIES:
:CUSTOM_ID: exporting
#+end_src
** Org-mode capture templates
+:PROPERTIES:
+:CUSTOM_ID: org-capture-templates
+:END:
#+begin_src emacs-lisp
#+end_src
** Unset =org-mode= binding of =C-,= to =org-cycle-agenda-files= :kbd:
+:PROPERTIES:
+:CUSTOM_ID: org-bindings
+:END:
#+begin_src emacs-lisp
(keymap-unset org-mode-map "C-," t)
#+end_src
* Email settings :mail:
+:PROPERTIES:
+:CUSTOM_ID: email
+:END:
** My accounts
+:PROPERTIES:
+:CUSTOM_ID: accounts
+:END:
#+begin_src emacs-lisp
(setq user-full-name "Eshel Yaron")
#+end_src
** Sending mail from multiple SMTP accounts
+:PROPERTIES:
+:CUSTOM_ID: multiple-smtp-accounts
+:END:
#+begin_src emacs-lisp
(defun esy/smtpmail-multi-make-accout (address server)
#+end_src
** Reading mail with Gnus
+:PROPERTIES:
+:CUSTOM_ID: gnus
+:END:
#+begin_src emacs-lisp
(setq mail-user-agent 'gnus-user-agent
#+end_src
* Global keybindings :kbd:
+:PROPERTIES:
+:CUSTOM_ID: global-keybindings
+:END:
** Misc. keybindings
+:PROPERTIES:
+:CUSTOM_ID: misc-keybindings
+:END:
#+begin_src emacs-lisp
(defun esy/kill-dwim ()
#+end_src
** =C-x= keybindings
+:PROPERTIES:
+:CUSTOM_ID: c-x-keybindings
+:END:
#+begin_src emacs-lisp
(defun esy/customize-ctl-x-map ()
#+end_src
** =C-h= keybindings
+:PROPERTIES:
+:CUSTOM_ID: c-h-keybindings
+:END:
#+begin_src emacs-lisp
(defun esy/customize-help-map ()
#+end_src
** =ace-window= homerow keys
+:PROPERTIES:
+:CUSTOM_ID: ace-window
+:END:
#+begin_src emacs-lisp
(with-eval-after-load 'ace-window
#+end_src
** =ace-link= setup
+:PROPERTIES:
+:CUSTOM_ID: ace-link
+:END:
#+begin_src emacs-lisp
(add-hook 'after-init-hook #'ace-link-setup-default)
#+end_src
* Display weekly agenda on startup
+:PROPERTIES:
+:CUSTOM_ID: agenda-on-startup
+:END:
#+begin_src emacs-lisp :tangle no
(defun esy/display-weekly-agenda ()
#+end_src
* Minibuffer and completions
+:PROPERTIES:
+:CUSTOM_ID: minibuffer-and-completions
+:END:
** Enable and indicate recursive minibuffers
+:PROPERTIES:
+:CUSTOM_ID: recursive-minibuffers
+:END:
#+begin_src emacs-lisp
(defun esy/setup-recursive-minibuffers ()
#+end_src
** Completions
+:PROPERTIES:
+:CUSTOM_ID: completions
+:END:
#+begin_src emacs-lisp
(defun esy/setup-completions ()
#+end_src
* Elfeed
+:PROPERTIES:
+:CUSTOM_ID: elfeed
+:END:
#+begin_src emacs-lisp
(defun esy/setup-elfeed ()
#+end_src
* eww
+:PROPERTIES:
+:CUSTOM_ID: eww
+:END:
#+begin_src emacs-lisp
(with-eval-after-load 'eww
#+end_src
* Async shell commands with =dtache=
+:PROPERTIES:
+:CUSTOM_ID: dtache
+:END:
#+begin_src emacs-lisp
(defun esy/setup-dtache ()
#+end_src
* Mode-line customizations
+:PROPERTIES:
+:CUSTOM_ID: modeline
+:END:
#+begin_src emacs-lisp
(defvar esy/ping-target "1.1.1.1"
#+end_src
* Setup PATH from shell environment
+:PROPERTIES:
+:CUSTOM_ID: path-from-shell
+:END:
#+begin_src emacs-lisp
(require 'exec-path-from-shell)
#+end_src
* Programming
+:PROPERTIES:
+:CUSTOM_ID: programming
+:END:
** General =prog-mode= settings
+:PROPERTIES:
+:CUSTOM_ID: prog-mode
+:END:
#+begin_src emacs-lisp
(defun esy/setup-programming ()
#+end_src
* LaTeX and PDF settings
+:PROPERTIES:
+:CUSTOM_ID: latex-and-pdf
+:END:
#+begin_src emacs-lisp
(defun esy/pdf-tools-install ()
#+end_src
* Misc. settings
+:PROPERTIES:
+:CUSTOM_ID: misc
+:END:
#+begin_src emacs-lisp
(defun esy/setup-misc ()
#+end_src
* Elisp Footer
+:PROPERTIES:
+:CUSTOM_ID: footer
+:END:
#+begin_src emacs-lisp
(provide 'esy)