#+title: Emacs configuration and personal packages #+property: header-args :tangle ~/.emacs.d/init.el :comments yes :results silent #+auto_tangle: t * Bootstrap This is the emacs standard init file, which will load (maybe tangled) the file [[./init.org][init.org]], checking first whether a fresh tangle is needed. Note that the rest of elisp tangling in init.org goes to a different file (namely, the one that is loaded by =~/.emacs.d/init.el=). However, also note that if [[https://github.com/jingtaozf/literate-elisp/blob/master/literate-elisp.org][literate-elisp]] is installed, we load instead directly the org file. It's because of that that we start by setting up packages. Here's the directory where a checkout of this repo lives: #+begin_src emacs-lisp (defvar jao-emacs-dir (expand-file-name "~/etc/emacs")) #+end_src followed by package.el's initialisation: #+begin_src emacs-lisp (setq package-user-dir (expand-file-name (format "~/.emacs.d/elpa.%s" emacs-major-version)) package-check-signature 'allow-unsigned) (require 'package) (dolist (a '(("melpa" . "https://melpa.org/packages/") ("org" . "https://orgmode.org/elpa/"))) (add-to-list 'package-archives a t)) (package-initialize) #+end_src and a tangling helper: #+begin_src emacs-lisp (defun jao-maybe-tangle (basename) (let ((el (expand-file-name (format "%s.el" basename) jao-emacs-dir)) (org (expand-file-name (format "%s.org" basename) jao-emacs-dir))) (when (file-newer-than-file-p org el) (require 'ob-tangle) (org-babel-tangle-file org el)) el)) #+end_src Finally, we load either init.org or its tangled version from ~jao-emacs-dir~: #+begin_src emacs-lisp (if (require 'literate-elisp nil t) (literate-elisp-load-file (expand-file-name "init.org" jao-emacs-dir)) (load-file (jao-maybe-tangle "init"))) #+end_src You can tangle this readme to generate the minimal init.el file above. * Configuration as a set of literate files - [[./init.org][init.org]]: main configuration as a literate org file; it uses (besides lots of packages), many of my libraries in [[./lib][lib]], and loads on demand the other org files below. - [[./completion.org][completion.org]]: completion setup using company, consult and friends. - [[./org.org][org.org]] org mode configuration. - [[./blog.org][blog.org]]: blogging using org-static-blog. - [[./gnus.org][gnus.org]]: tangled to gnus.el automatically by init.org, so that it's ready for loading by Gnus. - [[./exwm.org][exwm.org]]: configuration for exwm, loaded when ~jao-exwmn-enable~ is called. The [[./attic][attic]] contains other literate configuration files not currently used by init.org.